热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言借助EasyX实现的生命游戏源码

这篇文章主要介绍了C语言借助EasyX实现的生命游戏的方法,需要的朋友可以参考下本文讲述C语言借助EasyX实现的生命游戏,具体操作流程如下:1.生命游戏内容:该游戏包括一个二维矩

这篇文章主要介绍了C语言借助EasyX实现的生命游戏的方法,需要的朋友可以参考下

本文讲述C语言借助EasyX实现的生命游戏,具体操作流程如下:

1.生命游戏内容:

该游戏包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的细胞的数量。如果一个细胞周围的活细胞数量多于 3 个,这个细胞会因为资源匮乏而在下一个时刻死去;如果一个位置周围有 3 个活细胞,则该位置在下一个时刻将诞生一个新的细胞;如果一个位置周围有 2 个活细胞,则该位置的细胞生死状态保持不变;如果一个细胞周围的活细胞少于 2 个,那么这个细胞会因太孤单而死去。这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。

2.实现代码如下:

 /////////////////////////////////////////////////// // 程序名称:生命游戏 // 编译环境:Visual C++ 6.0,EasyX // #include #include #include // 定义全局变量 __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 == &#039; &#039; && Speed != 900) c = getch(); if (c >= &#039;0&#039; && c <= &#039;9&#039;) Speed = (&#039;9&#039; - c) * 100; switch(c) { case &#039;s&#039;: case &#039;S&#039;: SquareWorld(); // 产生默认的细胞以方形分布的世界 break; case &#039;r&#039;: case &#039;R&#039;: RandWorld(); // 产生默认的细胞以方形分布的世界 break; case VK_ESCAPE: goto END; } } 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  生命游戏包括一个二维矩形世界,这个世界中的每个方格居住\n着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的细胞\n的数量。如果一个细胞周围的活细胞数量多于 3 个,这个细胞会因为资源匮乏而在下一个时\n刻死去;如果一个位置周围有 3 个活细胞,则该位置在下一个时刻将诞生一个新的细胞;如\n果一个位置周围有 2 个活细胞,则该位置的细胞生死状[email protected]#码网态保持不变;如果一个细胞周围的活\n细胞少于 2 个,那么这个细胞会因太孤单而死去。这样整个生命世界才不至于太过荒凉或拥\n挤,而是一种动态的平衡。\n\n游戏控制:\n 0-9: 调节速度(慢--快)\n ESC: 退出\n空格: \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(int y = 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)); }

3.效果如下图所示:

以上就是C语言借助EasyX实现的生命游戏源码的详细内容,更多请关注gaodaima编程笔记其它相关文章!



推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
author-avatar
yeyeye
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有