21xrx.com
2024-12-27 20:23:11 Friday
登录
文章检索 我的文章 写文章
多线程实现的C++生命游戏代码
2023-07-02 19:48:18 深夜i     --     --
多线程 C++ 生命游戏 代码

C++生命游戏是一种经典的细胞自动机模拟游戏,通过演化生成不同形态的生命。在实现该游戏时,通过使用多线程技术,可以有效地提高游戏运行的效率。

下面是一个使用多线程技术实现C++生命游戏的示例代码:


#include <iostream>

#include <thread>

#include <mutex>

#include <chrono>

#include <vector>

using namespace std;

const int width = 50, height = 20;

bool board[height][width];

bool new_board[height][width];

mutex mtx;

void print_board() {

  for (int i = 0; i < height; i++) {

    for (int j = 0; j < width; j++) {

      if (board[i][j])

        cout << "O";

       else

        cout << "-";

      

    }

    cout << endl;

  }

  cout << endl;

}

bool is_alive(int row, int col) {

  int alive_neighbors = 0;

  int row_above = (row - 1 + height) % height;

  int row_below = (row + 1) % height;

  int col_left = (col - 1 + width) % width;

  int col_right = (col + 1) % width;

  if (board[row_above][col_left]) {

    alive_neighbors++;

  }

  if (board[row_above][col]) {

    alive_neighbors++;

  }

  if (board[row_above][col_right]) {

    alive_neighbors++;

  }

  if (board[row][col_left]) {

    alive_neighbors++;

  }

  if (board[row][col_right]) {

    alive_neighbors++;

  }

  if (board[row_below][col_left]) {

    alive_neighbors++;

  }

  if (board[row_below][col]) {

    alive_neighbors++;

  }

  if (board[row_below][col_right]) {

    alive_neighbors++;

  }

  if (board[row][col]) {

    if (alive_neighbors == 2 || alive_neighbors == 3)

      return true;

     else

      return false;

    

  } else {

    if (alive_neighbors == 3)

      return true;

     else

      return false;

    

  }

}

void update_board(int start_row, int end_row) {

  for (int i = start_row; i < end_row; i++) {

    for (int j = 0; j < width; j++) {

      new_board[i][j] = is_alive(i, j);

    }

  }

}

int main() {

  board[3][11] = true;

  board[3][12] = true;

  board[3][13] = true;

  board[10][5] = true;

  board[10][6] = true;

  board[11][5] = true;

  board[11][6] = true;

  board[9][5] = true;

  board[9][6] = true;

  board[8][5] = true;

  board[8][6] = true;

  board[8][15] = true;

  board[8][16] = true;

  board[8][17] = true;

  board[9][14] = true;

  board[10][13] = true;

  board[11][13] = true;

  board[12][14] = true;

  board[13][15] = true;

  board[13][16] = true;

  board[13][17] = true;

  

  print_board();

  for (int g = 0; g < 100; g++) {

    vector<thread> threads;

    for (int i = 0; i < 4; i++) {

      threads.emplace_back(update_board, i * height / 4, (i + 1) * height / 4);

    }

    for (auto &t : threads) {

      t.join();

    }

    for (int i = 0; i < height; i++) {

      for (int j = 0; j < width; j++) {

        board[i][j] = new_board[i][j];

      }

    }

    print_board();

    this_thread::sleep_for(chrono::milliseconds(200));

  }

  return 0;

}

在该示例代码中,使用了一个名为 `update_board` 的函数,并通过 `vector ` 类型的 `threads` 容器保存了 4 个线程对象。 在主函数中,循环 100 次,每次执行一个 `update_board` 调用,该函数会被 4 个线程并行执行。 执行完成后,更新板上的状态,并使用 `print_board` 函数打印出当前的生命游戏状态。

由于多线程并行执行,可以有效地提高游戏运行的效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复