以下是一个 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 函数打印网格。

C# 生命游戏代码示例:实现经典细胞自动机

原文地址: https://www.cveoy.top/t/topic/fMJV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录