C语言零基础项目:生命游戏!详细思路+源码分享

2022-12-28 0 306

每晚两个C词汇小工程项目,提高你的程式设计潜能!

C语言零基础项目:生命游戏!详细思路+源码分享

流程概要

心灵格斗游戏也叫米切尔心灵格斗游戏、细胞核镜像、最优化镜像等。

心灵格斗游戏不须要任何人玩者,它是两个二维正方形当今世界,那个当今世界中的每一格子定居着两个活细胞核或为空。

两个细胞核在下两个关键时刻的生与死依赖于交界处七个格子中的活细胞核数目,使整座心灵当今世界不致太过荒芜或挤迫,达成一致一类静态的均衡。

当两个格子没活细胞核时:

若周遭有 3 个活细胞核,则该格子造成两个活细胞核(演示产卵)。

当两个格子存有活细胞核时:

若周遭少于 2 个活细胞核,则该格子的细胞核死亡(演示人口数浓密)。

若周遭有 2 个或 3 个活细胞核,维持原貌。

若周遭少于 3 个活细胞核,则该格子的细胞核死亡(演示极其挤迫)。

流程代码效用

C语言零基础项目:生命游戏!详细思路+源码分享

多的也不说啦!聪明的人已经动手实践去了~

本工程项目编译环境:Visual Studio 2019/2022,EasyX插件

代码展示:

#include <stdio.h> #include <graphics.h> #include <conio.h> #include <time.h> // 定义全局变量 __int8 world[102][102] = {0}; // 定义二维当今世界IMAGE imgLive, imgEmpty;// 定义活细胞核和无细胞核区域的图案 // 函数声明 void Init(); // 初始化 void SquareWorld(); // 创建两个细胞核以方形分布的当今世界 void RandWorld(); // 创建一个细胞核随机分布的当今世界 void PaintWorld(); // 绘制当今世界 void Evolution(); // 进化 // 主函数 int main() { Init(); int Speed = 500; // 格斗游戏速度(毫秒) while(true) { if (kbhit() || Speed == 900) { char c = getch(); if (c == && Speed != 900) c = getch();if (c >= 0 && c <= 9) Speed = (9 – c) * 100; switch(c) { case s: case S: SquareWorld();// 造成默认的细胞核以方形分布的当今世界 break; case r: case R: RandWorld(); // 造成默认的细胞核以方形分布的当今世界 break; case VK_ESCAPE: gotoEND; } } Evolution();// 进化 PaintWorld(); // 绘制当今世界 if (Speed != 900) // 速度为 900 时,为按任意键单步执行Sleep(Speed); } END: closegraph();return 0; } /////////////////////////////////////////////////// // 函数定义 // 初始化 void Init() { // 创建绘图窗口 initgraph(640,480); // 设置随机种子 srand((unsigned)time(NULL)); // 调整当今世界图案的大小 Resize(&imgLive, 4, 4); Resize(&imgEmpty, 4, 4); // 绘制有心灵当今世界的图案SetWorkingImage(&imgLive); setcolor(GREEN); setfillstyle(GREEN); fillellipse(0, 0, 3, 3); // 绘制无心灵当今世界的图案SetWorkingImage(&imgEmpty); setcolor(DARKGRAY); rectangle(1, 1, 2, 2); // 恢复对默认窗口的绘图 SetWorkingImage(NULL); // 输出简单说明setfont(24, 0, “黑体”); outtextxy(254, 18, “生 命 游 戏”); RECT r = {440, 60, 620, 460}; setfont(12, 0, “宋体”); drawtext(“心灵格斗游戏概要:\n  心灵格斗游戏包括两个二维正方形当今世界,那个当今世界中的每一格子定居 着两个活着的或死了的细胞核。两个细胞核在下两个关键时刻生与死依赖于交界处七个格子中活着的细胞核 的数量。如果两个细胞核周遭的活细胞核数目少于 3 个,那个细胞核会因为资源匮乏而在下两个时 刻死去;如果两个位置周遭有 3 个活细胞核,则该位置在下两个关键时刻将诞生两个新的细胞核;如 果两个位置周遭有 2 个活细胞核,则该位置的细胞核生与死状态维持不变;如果两个细胞核周遭的活 细胞核少于 2 个,那么那个细胞核会因太孤单而死去。这样整座心灵当今世界才不致太过荒芜或拥 挤,而是一类静态的均衡。\n\n格斗游戏控制:\n 0-9: 调节速度(慢–快)\n ESC: 退出\n空格: 暂停|继续\n S: 创建细胞核以方形分布的当今世界\n R: 创建细胞核随机分布的当今世界”, &r, DT_WORDBREAK); // 造成默认的细胞核以方形分布的当今世界 SquareWorld(); } // 创建两个细胞核以方形分布的当今世界 void SquareWorld() { memset(world, 0, 102 * 102 * sizeof(__int8));for(int x = 1; x <= 100; x++) world[x][1] = world[x][100] = 1; for(int y = 1; y <= 100; y++) world[1][y] = world[100][y] = 1; } // 创建两个细胞核随机分布的当今世界 void RandWorld() { for(int x = 1; x <= 100; x++) for(inty =1; y <= 100; y++) world[x][y] = rand() % 2; } // 绘制当今世界 void PaintWorld() { for(int x = 1; x <= 100; x++)for(int y = 1; y <= 100; y++) putimage(16 + x * 4, 56 + y * 4, world[x][y] ? &imgLive : &imgEmpty); }// 进化 void Evolution() { __int8 tmp[102][102] = {0}; // 临时数组 int sum; for(int x = 1; x <= 100; x++) {for(int y = 1; y <= 100; y++) { // 计算周遭活着的心灵数目 sum = world[x+1][y] + world[x+1][y-1] + world[x][y-1] + world[x-1][y-1] + world[x-1][y] + world[x-1][y+1] + world[x][y+1] + world[x+1][y+1]; // 计算当前位置的心灵状态 switch(sum) { case 3: tmp[x][y] = 1; break; case 2: tmp[x][y] = world[x][y]; break; default: tmp[x][y] =0; break; } } } // 将临时数组恢复为当今世界 memcpy(world, tmp, 102 * 102 * sizeof(__int8)); }

大家赶紧去动手试试吧!

此外,我也给大家撷取我收集的其他资源,从最零此基础开始的教程到C词汇C++工程项目案例,帮助大家在学习C词汇的道路上披荆斩棘!

程式设计学习书籍撷取:

C语言零基础项目:生命游戏!详细思路+源码分享

程式设计学习视频撷取:

C语言零基础项目:生命游戏!详细思路+源码分享

整理撷取(多年学习的源代码、工程项目实战视频、工程项目笔记,此基础入门教程)最重要的是你可以在群里面交流提问程式设计问题哦!

对于C/C++感兴趣可以关注小编在后台私信我:【程式设计交流】一起来学习哦!可以领取一些C/C++的工程项目学习视频资料哦!已经设置好了关

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务