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

本文讲述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 == ' ' && 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:
   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 个活细胞,则该位置的细胞生死状态保持不变;如果一个细胞周围的活\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
游戏源码
c语言easyx、c语言easyx小游戏代码、c语言 绘制时钟 easyx、easyx源代码、c语言贪吃蛇源代码,以便于您获取更多的相关知识。

时间: 2024-10-26 16:40:05

C语言借助EasyX实现的生命游戏源码_C 语言的相关文章

详细分析Android中实现Zygote的源码_C 语言

概述 在Android系统中,所有的应用程序进程,以及用来运行系统关键服务的System进程都是由zygote进程负责创建的.因此,我们将它称为进程孵化器.zygote进程是通过复制自身的方式来创建System进程和应用程序进程的.由于zygote进程在启动时会在内部创建一个虚拟机实例,因此,通过复制zygote进程而得到的System进程和应用程序进程可以快速地在内部获得一个虚拟机实例拷贝. zygote进程在启动完成之后,会马上将System进程启动起来,以便它可以将系统的关键服务启动起来.

C语言读取BMP图像数据的源码_C 语言

复制代码 代码如下: /* File name:   bmpTest.c   Author:      WanChuan XianSheng    Date:        Oct 01, 2011   Description: Show all Info a bmp file has. including    FileHeader Info, InfoHeader Info and Data Part.    Reference: BMP图像数据的C语言读取源码*/ #include <st

浅析C++标准库元组(tuple)源码_C 语言

一.什么是元组 元组不是什么新鲜东西,在数学.python语言还有我们今天要说的C++都有元组. 简单地说,元组就是一组东西,例如,在讲代数拓扑的时候,经常把拓扑空间X和其中一点x作为一个偶对(X, x),这其实就是个元组,点的坐标也可以看成一个元组.C++中的元组(tuple)是这个样子的: std::tuple<int, std::string> tu{ 2,"12iop" }; 一个tuple可以包含不同类型的成员,例如上面的tu包含一个int和一个字符串. 二.用法

C实现的非阻塞方式命令行端口扫描器源码_C 语言

该实例是一个C实现的基于命令行模式端口扫描代码,并且是以非阻塞方式来实现对IP和端口的连接测试.为了大家使用和学习方便,已在代码中尽可能多的地方加入了注释,相信对于帮助大家理解C端口扫描有很大帮助. 具体功能代码如下: #include <afxext.h> #include <winsock.h> // 编译时需使用的库 #pragma comment(lib,"wsock32.lib") // select()成员定义 #define ZERO (fd_se

jQuery网页版打砖块小游戏源码分享_jquery

这是一款基于jQuery实现网页版打砖块小游戏源码,满满的童年回忆. 为大家分享的jQuery实现网页版打砖块小游戏源码如下 效果演示 源码下载 <!DOCTYPE html> <html lang="en" > <head> <meta charset="gb2312" /> <title>jQuery网页版打砖块小游戏源码</title> <link href="css/ma

Android游戏源码分享之2048_Android

引言 程序猿们,是否还在为你的老板辛辛苦苦的打工而拿着微薄的薪水呢,还是不知道如何用自己的应用或游戏来赚钱呢! 在这里IQuick将教您如何同过自己的应用来赚取自己的第一桶金! 你是说自己的应用还没有做出来? 不,在這里已经为你提供好了一个完整的游戏应用了,在文章的下面有源码的地址哦.你只要稍做修改就可以变成一个完全属于自己的应用了,比如将4*4换成5*5,甚至是其它的.如果你实在是慵懒至极的话,你只要将本应用的包名及广告换成自己的,就可以上传到市场上轻轻松松赚取自己的第一桶金了. 如果你觉得本

C语言实现的猜拳游戏代码分享_C 语言

这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 下面的代码会实现一个猜拳游戏,让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 启动程序后,让用户出拳,截图: 用户出拳,显示对决结果:截图: 代码实现: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { char gamer; // 玩家出拳 int

C语言循环结构与时间函数用法实例教程_C 语言

本文实例展示了C语言循环结构与时间函数用法,对于C语言的学习来说是非常不错的参考借鉴材料.分享给大家供大家参考之用.具体如下: 完整实例代码如下: /********************************************** ** <Beginning C 4th Edition> Notes codes ** Created by Goopand ** Compiler: gcc 4.7.0 *****************************************

Javascript 坦克游戏源码分享

昨天无聊时,翻到一个 08 年 5 月用 javascript 写的坦克游戏,觉得蛮有意思,写篇博客纪念一下.当时写了一半就忙别的事去了,不过可以正常运行.  以下是截图: 类结构: 基于 MicrosoftAjax Client Library 构建,源码下载地址(下载后可直接运行,代码有点老,只能用 IE 打开): <源码下载地址>