C++ 生命游戏

C++ 生命游戏自创题目游戏 c 生命游戏

生命游戏

题目

一个二维方格世界,每个方格只能存活一个细胞。每个细胞在下一个时刻是否存活取决于这一个时刻相邻八个方格中细胞的总数量,每个空格在下一个时刻是否产生细胞也取决于这一个时刻相邻八个方格中细胞的总数量,规则如下:

  1. 如果一个空格周围有且只有3个活着的细胞,则该空格产生一个细胞。
  2. 如果一个细胞周围有且只有2个或3个活着的细胞,则该细胞继续存活。
  3. 在其它情况下,细胞要么拥挤而死,要么孤独而死。

样例

输入

49 20
.................................................
.................................................
.................................................
.......................OOO.......................
.................................................
........................O........................
........................O........................
........................O........................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
.................................................
 

提示

编译前下载头文件util.h

#include <bits/stdc++.h> #include "util.h" using namespace std; int main() { /* TODO */ clear(); for (int i = 0; true; i++) { pause(100); recursor(); for (int y = 0; y < CELLS_HEIGHT; y++) { for (int x = 0; x < CELLS_WIDTH; x++) { if (cells[y][x]) cout << 'O'; else cout << ' '; } cout << '\n'; } /* TODO */ } return 0; } 

答案

#include <bits/stdc++.h> #include "util.h" using namespace std; int main() { freopen("in.txt", "r", stdin); int CELLS_WIDTH, CELLS_HEIGHT; cin >> CELLS_WIDTH >> CELLS_HEIGHT; auto cells = vector<vector<bool>>(CELLS_HEIGHT, vector<bool>(CELLS_WIDTH, false)); for (int y = 0; y < CELLS_HEIGHT; y++) { for (int x = 0; x < CELLS_WIDTH; x++) { char c; cin >> c; if (c == 'O') cells[y][x] = true; } } clear(); for (int i = 0; true; i++) { pause(100); recursor(); for (int y = 0; y < CELLS_HEIGHT; y++) { for (int x = 0; x < CELLS_WIDTH; x++) { if (cells[y][x]) cout << 'O'; else cout << ' '; } cout << '\n'; } auto next_cells = vector<vector<bool>>(CELLS_HEIGHT, vector<bool>(CELLS_WIDTH, false)); for (int y = 0; y < CELLS_HEIGHT; y++) { for (int x = 0; x < CELLS_WIDTH; x++) { int count = 0; if (y == 0 && x == 0) { if (cells[y][x + 1]) count++; if (cells[y + 1][x]) count++; if (cells[y + 1][x + 1])count++; } else if (y == 0 && x != 0 && x != CELLS_WIDTH - 1) { if (cells[y][x - 1]) count++; if (cells[y][x + 1]) count++; if (cells[y + 1][x - 1]) count++; if (cells[y + 1][x]) count++; if (cells[y + 1][x + 1]) count++; } else if (y == 0 && x == CELLS_WIDTH - 1) { if (cells[y][x - 1]) count++; if (cells[y + 1][x - 1]) count++; if (cells[y + 1][x]) count++; } else if (y != 0 && y != CELLS_HEIGHT - 1 && x == 0) { if (cells[y - 1][x]) count++; if (cells[y - 1][x + 1]) count++; if (cells[y][x + 1]) count++; if (cells[y + 1][x]) count++; if (cells[y + 1][x + 1]) count++; } else if (y == CELLS_HEIGHT - 1 && x == 0) { if (cells[y - 1][x]) count++; if (cells[y - 1][x + 1]) count++; if (cells[y][x + 1]) count++; } else if (y == CELLS_HEIGHT - 1 && x != 0 && x != CELLS_WIDTH - 1) { if (cells[y - 1][x - 1]) count++; if (cells[y - 1][x]) count++; if (cells[y - 1][x + 1]) count++; if (cells[y][x - 1]) count++; if (cells[y][x + 1]) count++; } else if (x == CELLS_WIDTH - 1 && y != 0 && y != CELLS_HEIGHT - 1) { if (cells[y - 1][x - 1]) count++; if (cells[y - 1][x]) count++; if (cells[y][x - 1]) count++; if (cells[y + 1][x - 1]) count++; if (cells[y + 1][x]) count++; } else if (y == CELLS_HEIGHT - 1 && x == CELLS_WIDTH - 1) { if (cells[y - 1][x - 1]) count++; if (cells[y - 1][x]) count++; if (cells[y][x - 1]) count++; } else if (y != 0 && x != 0 && y != CELLS_HEIGHT - 1 && x != CELLS_WIDTH - 1) { if (cells[y - 1][x - 1]) count++; if (cells[y - 1][x]) count++; if (cells[y - 1][x + 1]) count++; if (cells[y][x - 1]) count++; if (cells[y][x + 1]) count++; if (cells[y + 1][x - 1]) count++; if (cells[y + 1][x]) count++; if (cells[y + 1][x + 1]) count++; } if (count <= 1 || count >= 4) next_cells[y][x] = false; else if (count == 3) next_cells[y][x] = true; else next_cells[y][x] = cells[y][x]; } } cells = next_cells; } return 0; } 

今天的文章 C++ 生命游戏分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-05 09:30
下一篇 2025-01-05 09:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/102585.html