C# 生命游戏实现:面向对象编程的终极挑战
以下是使用 C# 实现生命游戏的示例代码:
using System;
namespace GameOfLife
{
class Program
{
static void Main(string[] args)
{
int width = 20; // 网格宽度
int height = 20; // 网格高度
// 创建初始细胞状态
bool[,] grid = new bool[width, height];
Random random = new Random();
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
grid[x, y] = random.Next(2) == 0;
}
}
// 运行生命游戏
while (true)
{
Console.Clear();
PrintGrid(grid);
// 计算下一代细胞状态
bool[,] nextGeneration = new bool[width, height];
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
int liveNeighbors = CountLiveNeighbors(grid, x, y);
if (grid[x, y])
{
// 当前细胞为生,根据规则判断是否存活
nextGeneration[x, y] = liveNeighbors == 2 || liveNeighbors == 3;
}
else
{
// 当前细胞为死,根据规则判断是否复活
nextGeneration[x, y] = liveNeighbors == 3;
}
}
}
// 更新细胞状态
grid = nextGeneration;
// 暂停一段时间
System.Threading.Thread.Sleep(1000);
}
}
// 统计细胞周围的活细胞数量
static int CountLiveNeighbors(bool[,] grid, int x, int y)
{
int count = 0;
int width = grid.GetLength(0);
int height = grid.GetLength(1);
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
int neighborX = (x + i + width) % width;
int neighborY = (y + j + height) % height;
if (grid[neighborX, neighborY])
{
count++;
}
}
}
// 排除自身细胞
if (grid[x, y])
{
count--;
}
return count;
}
// 打印细胞状态
static void PrintGrid(bool[,] grid)
{
int width = grid.GetLength(0);
int height = grid.GetLength(1);
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Console.Write(grid[x, y] ? "■" : " ");
}
Console.WriteLine();
}
}
}
}
此代码使用二维布尔数组表示细胞状态,其中 true 表示细胞存活,false 表示细胞死亡。通过随机生成初始细胞状态,并根据规则计算下一代细胞状态。在控制台上打印细胞状态,并通过暂停一段时间来模拟游戏的进行。
原文地址: https://www.cveoy.top/t/topic/fMrn 著作权归作者所有。请勿转载和采集!