生命游戏(Game of Life)是一种由英国数学家约翰·霍顿·康威在1970年发明的细胞自动机。这个游戏的规则非常简单,但是它可以形成出复杂的结构和行为,甚至可以模拟生物的进化和群体行为。

在生命游戏中,存在一个无限的二维网格,每个格子可以是“活”或“死”状态。每个格子的状态由它周围八个格子的状态决定,具体规则如下:

  • 如果一个格子是“活”的状态,当它周围的“活”格子数量不为2或3时,它就会变成“死”的状态;
  • 如果一个格子是“死”的状态,当它周围的“活”格子数量为3时,它就会变成“活”的状态。

可以用C++语言来实现生命游戏代码。下面是一个简单的实现:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

using namespace std;

const int ROWS = 20;
const int COLS = 20;

void initBoard(vector<vector<int>>& board) {
    srand(time(NULL));
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            board[i][j] = rand() % 2;
        }
    }
}

void printBoard(vector<vector<int>>& board) {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (board[i][j] == 1) {
                cout << "* ";
            }
            else {
                cout << ". ";
            }
        }
        cout << endl;
    }
    cout << endl;
}

int countLiveNeighbors(vector<vector<int>>& board, int row, int col) {
    int count = 0;
    for (int i = row - 1; i <= row + 1; i++) {
        for (int j = col - 1; j <= col + 1; j++) {
            if (i >= 0 && i < ROWS && j >= 0 && j < COLS && !(i == row && j == col)) {
                count += board[i][j];
            }
        }
    }
    return count;
}

void updateBoard(vector<vector<int>>& board) {
    vector<vector<int>> newBoard(ROWS, vector<int>(COLS, 0));
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            int count = countLiveNeighbors(board, i, j);
            if (board[i][j] == 1) {
                if (count == 2 || count == 3) {
                    newBoard[i][j] = 1;
                }
            }
            else {
                if (count == 3) {
                    newBoard[i][j] = 1;
                }
            }
        }
    }
    board = newBoard;
}

int main() {
    vector<vector<int>> board(ROWS, vector<int>(COLS, 0));
    initBoard(board);
    for (int i = 0; i < 100; i++) {
        printBoard(board);
        updateBoard(board);
    }
    return 0;
}

这个代码包含了四个函数:

  • initBoard:用随机数初始化二维网格;
  • printBoard:打印当前二维网格的状态;
  • countLiveNeighbors:计算某个格子周围的“活”格子数量;
  • updateBoard:根据规则更新二维网格的状态。

main函数中,我们先用initBoard初始化二维网格,然后用printBoard打印出来。接着,我们循环100次,每次循环都用updateBoard更新二维网格的状态,并用printBoard打印出来。这样就可以模拟出生命游戏的演化过程了

使用C++语言生成一个生命游戏代码

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

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