C# 生命游戏代码实现 - 使用二维数组模拟生命演化
下面是一个简单的 C# 实现生命游戏的代码:
using System;
namespace GameOfLife
{
class Program
{
static void Main(string[] args)
{
int width = 10;
int height = 10;
bool[,] grid = new bool[width, height];
// 初始化格子
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(bool[,] 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(2) == 1;
}
}
}
// 更新格子状态
static void UpdateGrid(bool[,] grid)
{
int width = grid.GetLength(0);
int height = grid.GetLength(1);
bool[,] newGrid = new bool[width, height];
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
int liveNeighbors = CountLiveNeighbors(grid, i, j);
// 根据规则更新细胞状态
if (grid[i, j])
{
if (liveNeighbors < 2 || liveNeighbors > 3)
{
newGrid[i, j] = false;
}
else
{
newGrid[i, j] = true;
}
}
else
{
if (liveNeighbors == 3)
{
newGrid[i, j] = true;
}
else
{
newGrid[i, j] = false;
}
}
}
}
// 更新原格子
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
grid[i, j] = newGrid[i, j];
}
}
}
// 计算细胞周围活细胞数量
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;
int neighborY = y + j;
if (neighborX >= 0 && neighborX < width && neighborY >= 0 && neighborY < height)
{
if (i != 0 || j != 0)
{
if (grid[neighborX, neighborY])
{
count++;
}
}
}
}
}
return count;
}
// 打印格子
static void PrintGrid(bool[,] grid)
{
int width = grid.GetLength(0);
int height = grid.GetLength(1);
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
Console.Write(grid[i, j] ? '■' : '□');
}
Console.WriteLine();
}
}
}
}
这个代码使用二维布尔数组来表示格子,true表示细胞存活,false表示细胞死亡。InitializeGrid函数用于随机生成初始格子状态,UpdateGrid函数根据生命游戏的规则更新格子状态,CountLiveNeighbors函数用于计算细胞周围的活细胞数量,PrintGrid函数用于打印格子。在Main函数中,首先初始化格子,然后进入游戏循环,每次按下回车键更新格子状态并打印,按下'q'键退出游戏循环。
原文地址: https://www.cveoy.top/t/topic/fMuV 著作权归作者所有。请勿转载和采集!