C#生命游戏:探索细胞自动机奥秘
C#生命游戏:探索细胞自动机奥秘
本文将带您使用C#编写代码,实现一个简单的生命游戏,并深入探讨细胞自动机原理、代码解析以及实验心得。
一、生命游戏简介
生命游戏,又称康威生命游戏(Conway's Game of Life),是由英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它具有简单的规则,但可以展现出复杂多变的演化过程,体现了简单的规则可以产生复杂的行为。
二、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(); } } }}
三、代码解析
-
初始化: 创建一个二维布尔数组
grid表示细胞状态,使用随机数初始化每个细胞的生死。 -
主循环: - 清空控制台,打印当前细胞状态。 - 创建新数组
nextGeneration存储下一代细胞状态。 - 遍历每个细胞,根据规则计算其下一代状态: - 活细胞:周围存活细胞数为2或3,则存活,否则死亡。 - 死细胞:周围存活细胞数为3,则复活,否则保持死亡。 - 更新grid为nextGeneration,完成一代演化。 - 暂停一段时间,控制游戏速度。 -
辅助函数: -
CountLiveNeighbors: 计算指定细胞周围的活细胞数量,用于判断细胞生死。 -PrintGrid: 将细胞状态打印到控制台,使用 '■' 表示活细胞,' ' 表示死细胞。
四、实验心得
通过代码实现生命游戏,可以更直观地理解细胞自动机的原理和规则。简单的规则可以演化出复杂多变的模式,令人惊叹。
您可以尝试修改代码中的参数,例如网格大小、初始细胞状态、演化规则等,观察生命游戏会呈现出怎样的变化。生命游戏的魅力在于其无限的可能性,等待您去探索和发现。
原文地址: https://www.cveoy.top/t/topic/fMsu 著作权归作者所有。请勿转载和采集!