C# 生命游戏代码示例:实现经典细胞自动机
以下是一个 C# 编写的生命游戏代码示例:
using System;
namespace GameOfLife
{
class Program
{
static void Main(string[] args)
{
int rows = 10;
int cols = 10;
int[,] grid = new int[rows, cols];
// 初始化网格
InitializeGrid(grid);
// 打印初始网格
PrintGrid(grid);
// 开始游戏
while (true)
{
Console.WriteLine('Press Enter to continue or 'q' to quit.');
string input = Console.ReadLine();
if (input == "q")
{
break;
}
// 更新网格状态
UpdateGrid(grid);
// 打印更新后的网格
PrintGrid(grid);
}
}
// 初始化网格
static void InitializeGrid(int[,] grid)
{
Random random = new Random();
for (int i = 0; i < grid.GetLength(0); i++)
{
for (int j = 0; j < grid.GetLength(1); j++)
{
grid[i, j] = random.Next(0, 2);
}
}
}
// 更新网格状态
static void UpdateGrid(int[,] grid)
{
int rows = grid.GetLength(0);
int cols = grid.GetLength(1);
int[,] newGrid = new int[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
int liveNeighbors = CountLiveNeighbors(grid, i, j);
if (grid[i, j] == 1 && (liveNeighbors < 2 || liveNeighbors > 3))
{
// 细胞死亡
newGrid[i, j] = 0;
}
else if (grid[i, j] == 0 && liveNeighbors == 3)
{
// 细胞复活
newGrid[i, j] = 1;
}
else
{
// 细胞状态不变
newGrid[i, j] = grid[i, j];
}
}
}
// 更新网格
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
grid[i, j] = newGrid[i, j];
}
}
}
// 统计细胞周围活细胞数量
static int CountLiveNeighbors(int[,] grid, int row, int col)
{
int count = 0;
int rows = grid.GetLength(0);
int cols = grid.GetLength(1);
// 定义相邻细胞的相对坐标
int[] dx = { -1, -1, -1, 0, 0, 1, 1, 1 };
int[] dy = { -1, 0, 1, -1, 1, -1, 0, 1 };
for (int i = 0; i < dx.Length; i++)
{
int newRow = row + dx[i];
int newCol = col + dy[i];
// 检查相邻细胞是否在网格内且为活细胞
if (newRow >= 0 && newRow < rows && newCol >= 0 && newCol < cols && grid[newRow, newCol] == 1)
{
count++;
}
}
return count;
}
// 打印网格
static void PrintGrid(int[,] grid)
{
int rows = grid.GetLength(0);
int cols = grid.GetLength(1);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
Console.Write(grid[i, j] == 1 ? '■ ' : '□ ');
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
该代码实现了生命游戏的逻辑,使用二维数组表示网格,其中 1 表示活细胞,0 表示死细胞。程序首先初始化网格,然后进入游戏循环,每次按下 Enter 键更新网格状态并打印。在更新网格状态时,根据细胞周围活细胞的数量来决定细胞的生死状态。最后,使用 PrintGrid 函数打印网格。
原文地址: https://www.cveoy.top/t/topic/fMJV 著作权归作者所有。请勿转载和采集!