代码拉取完成,页面将自动刷新
同步操作将从 Anbang24/cgames 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//https://gitee.com/devcpp/cgames anbangli@foxmail.com GNU GPL v3
//cgame3(life)v1 康威生命游戏第1版:实现游戏程序基本功能
#include <iostream>
#include <cstdlib>
#include <Windows.h>
#include <conio.h>
using namespace std;
int main() {
const int HT = 20, WD = 39;
bool map[HT][WD];
bool bak[HT + 1][WD + 1] = {0}; //更新前用于备份当前地图数据
bool periodic = true; //是否使用周期性边界条件
int ix, iy, up, dn, lft, rht, cnt;
char key;
cout << "约翰·康威生命游戏" << endl;
cout << "初始随机分布:30% 存活 " << endl;
for (iy = 0; iy < HT; iy++) //行循环
for (ix = 0; ix < WD; ix++) //列循环
map[iy][ix] = ((rand() % 10) < 3) ? true : false;
cout << "按回车键开始" ;
getch();
int round = 0; //更新轮数
while (true) {
//绘制地图
for (iy = 0; iy < HT; iy++) { //行循环
for (ix = 0; ix < WD; ix++) //列循环
cout << (map[iy][ix] ? "█" : "□");
cout << endl;
}
cout << "生命游戏。更新轮数:" << ++round << endl;
cout << "空格键-暂停,ESC-退出" << endl;
Sleep(800);
if (kbhit()) { //检测用户是否按键
key = getch(); //获取字符用作判断
if (key == ' ') { //空格键
cout << "已暂停。按任意键继续。" << endl;
getch();
continue;
}
if (key == 27) { //ESC键
cout << "是否真的要结束游戏并退出?(y/n)";
key = getch();
if (tolower(key) == 'y')
break;
}
}
//备份当前地图数据用于更新
for (iy = 0; iy < HT; iy++)
for (ix = 0; ix < WD; ix++)
bak[iy][ix] = map[iy][ix];
//计算每个格点周围的生命体个数并据此更新其生死状态
for (iy = 0; iy < HT; iy++) {
for (ix = 0; ix < WD; ix++) {
lft = (ix + WD - 1) % WD;
rht = (ix + WD + 1) % WD;
up = (iy + HT - 1) % HT; //屏幕上绘出的地图的Y值为上小下大
dn = (iy + HT + 1) % HT;
if (!periodic) { //非周期性边界条件下,必要时调整上下行数或左右列数
lft = (lft == WD - 1 ? WD : lft);
rht = (rht == 0 ? WD : rht);
up = (up == HT - 1 ? HT : up);
dn = (dn == 0 ? HT : dn);
}
cnt = bak[up][lft] + bak[up][ix] + bak[up][rht]
+ bak[iy][lft] + bak[iy][rht]
+ bak[dn][lft] + bak[dn][ix] + bak[dn][rht];
if (!map[iy][ix] ) //若当前为死亡
map [iy][ix] = (cnt == 3 ? true : false); //转换为存活
else if (cnt == 2 || cnt == 3) //当前为存活且周围的存活生命数为2或3
map[iy][ix] = true; //保持存活
else //当前为存活且周围有的生命数小于2或大于3
map[iy][ix] = false; //存活转为死亡
}
}
}
cout << "\n游戏结束。谢谢使用。" << endl;
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。