贪吃蛇C语言游戏代码

上传人:灯火****19 文档编号:99434542 上传时间:2022-05-31 格式:DOCX 页数:34 大小:38.16KB
收藏 版权申诉 举报 下载
贪吃蛇C语言游戏代码_第1页
第1页 / 共34页
贪吃蛇C语言游戏代码_第2页
第2页 / 共34页
贪吃蛇C语言游戏代码_第3页
第3页 / 共34页
资源描述:

《贪吃蛇C语言游戏代码》由会员分享,可在线阅读,更多相关《贪吃蛇C语言游戏代码(34页珍藏版)》请在装配图网上搜索。

1、Illlllllllllllllllllllllllllllllllllllllllll开始编写游戏需要的类IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII#include /EasyX_2011 惊蛰版(绘图 库)#include #include #include #define UP1#define DOWN2#define LEFT 3#define RIGHT4llllllllllllllllllllllllllllllllllllllllllll格子类,定义一个格子的属性及行为IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

2、IIIIIIIIIIIclass Cell(public:friend class GameArea;设置友元函数void setxy(short x, short y)设置格子左上角坐标x = x, m_y = y;)void setfull(short full)设置格子属性,0 为空,1为障碍,2为食物(m_full = full;)void display(COLORREF color) 设置格子 颜色并显示m_color = color;setfillstyle(m_color);bar(m_x, m_y, m_x+7, m_y+7);)void LaserDisplay()显示镭射

3、状态的格子(IMAGE image(10,10);SetWorkinglmage(&image);pMemDWORD*GetlmageBuffer(&image);for(int i = 0; i 10 * 10; i+)pMemi = BGR(RGB(0, 0, i * 256 / (10*10);SetWorkinglmage(NULL);putimage(m_x,m_y,&image); ) short ReturnFull() 返回格子状态 (return m_full; ) Cell()构造函数(m_x = 0,m_y = 0,m_full = 0; m_color = BLACK;

4、)private:short m_x;格子的左上角 X坐标short m_y;格子的左上角 Y坐标short m_full; /0 为空,1 为阻挡,2 为 食物COLORREF m_color;格子颜色); IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 游戏区类,编写有关游戏区的一些操作 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII class GameArea 游戏区域public:Cell m_game6060;定义游戏区域(由360个格子组成)friend void MessageDispose()

5、;设置友元函数bool CreatFood()产生随机食物(srand(time(NULL);/ 初始化随机数种子m_random1 = rand()%58+1;随机生成一个0 - 58的整数m_random2 = rand()%58+1;随机一个0 - 58的整数if(m_gamem_random2m_random2.m_full=0)检查生成的食物坐标是否在障碍上m_gamem_random1m_random2.display(G REEN);m_gamem_random1m_random2.m_full 2;return true;)如果随机的食物正好出现在蛇身上,则进入下面的循环寻找可

6、以生成食物的地方for(m_random1 =1 ;m_random1 59;m_random1+)(for(m_random2 = 1 ;m_random2 59;m_random2+)if(m_gamem_random2m_random2.m_full =0)m_gamem_random1m_random2.display(G REEN);m_gamem_random1m_random2.m_full 2;return true;如果没有找到可以生成食物的地方, 则通关return false; 返回false即表示通关 ) void DelFoodQ 删除食物m_gamem_random

7、1m_random2.m_full = 0; 设置为0即代表格子属性为空)void ChangeColor(int flag1,int flag2,COLORREF color) 设置指定格子的颜色(m_gameflag1flag2.display(color);)void lnit()初始化GAME区域(int flag1,flag2;标识变量BeginBatchDraw();开始批量绘图setfillstyle(BLACK);设置当前颜色bar(0,0,600,600);画无边框填充矩形(在这里的用途是用黑色清空游戏区域)for(flag1 = 0;flag1 60;flag1+)for(

8、flag2 = 0;flag2 next;now-next != NULL;now = now-next)(free(now-prior);)head = (struct node*)malloc(sizeof(struct node); 为蛇头分配内存head-prior = NULL;head-m_x = 300;head-m_y = 300;now = (struct node*)malloc(sizeof(struct node);head-next = now;now-prior = head;now-next = NULL;now-m_x = 300;now-m_y = 290;l

9、ast = now;toward = DOWN;void SnakeAddQnow = head; now-prior当前指向蛇头(structnode*)malloc(sizeof(struct node); 为新增的结点分配内存now = now-prior; 让当前指向新分配的结点now-prior = NULL;置空当前结点的前趋now-next = head; 让当前结点的后继指向蛇头根据当前蛇头switch(toward)方向确定新增部分的坐标case UP:now-m_x = head-m_x;now-m_y = head-m_y -10;break;case DOWN:now-

10、m_x = head-m_x;now-m_y = head-m_y + 10; break;case LEFT:now-m_x = head-m_x -10;now-m_y = head-m_y;break;case RIGHT:now-m_x = head-m_x + 10; now-m_y = head-m_y;break;)head = now; 设置当前结点为蛇头)void SnakeDelQ释放蛇尾结点(删 除蛇尾)last = last-prior;free(last-next);last-next = NULL;)void SnakeMove() 蛇身移动一格 (SnakeAdd

11、();增加蛇头SnakeDelQ;删除蛇尾private:struct node蛇身链表int m_x;int m_y;struct node *next; 下个结点struct node *prior; II 上个结点);struct node *head;struct node *last;struct node *now;);llllllllllllllllllllllllllllllllllllllllllll游戏类,用来初始化游戏的参数,及实现其他 游戏操作IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIclass Game(public:vo

12、id lnit()(closegraph();initgraph(800,600);setbkmode(TRANSPARENT);设置输出文字背景为透明LOGFONT f;getfont(&f);/获取当前字体设置f.lfHeight = 50;/设置字体高度为48 (包含行距)_tcscpy(f.lfFaceName, _T(黑体);/设置字体为“黑体”f.lfQuality = ANTIALIASED_QUALITY;/设置输出效果为抗锯齿setfont(&f);/设置字体样式)void FailGame()游戏失败显示的画面(setcolor(RED);setfont(70, 0, _T

13、(微软雅黑);outtextxy(150, 265, _T(YOU LOSE!);)void WinGame() /游戏胜利时显示的画面(setcolor(RED);setfont(70, 0, _T(微软雅黑);outtextxy(150, 265, _T(YOU WIN!);FlushBatchDraw();Sleep(10000);exit(O););Illlllllllllllllllllllllllllllllllllllllllll管理区类,定义管理区域的相关操作IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIclass ManageArea

14、 (public:friend void MessageDispose();void TimeAdd(double add) 增加时间(可 在类外直接调用实现动态刷新时间)(m_time += add;DisplayTime();)void ScoreAdd(short add) 增加分数(可 在类外直接调用实现动态刷新分数)(m_score += add;DisplayScore();)void DisplayPause()显示暂停或者开始BeginBatchDraw();_stprintf(m_str_score,m_score);setfont(25, 0, _T(微软雅黑);setfi

15、llstyle(m_bgcolor);bar(625,490,800,515);setcolor(BLUE);if(m_pause)outtextxy(625, 490, _T(开始(P 键);elseouttextxy(625, 490, _T(暂停(P 键);End Batch Draw();)void lnit()初始化管理界面(m_time = 0.0;m_score = 0;mjeave = 1;m_pause = false;_stprintf(m_str_score,_T(%d),m_score); 格式化转换类型_stprintf(m_str_time,_T(%.1lf),m_

16、bgcolor = BLACK;BeginBatchDraw();setfillstyle(BLACK);bar(601,0,800,600);setfont(60, 0, _T(微软雅黑);setcolor(GREEN);outtextxy(625, 30, _T(贪吃蛇);setfont(30, 0, _T(微软雅黑);setcolor(RGB(128,0,255);outtextxy(625, 140, _T(制作:轻雨漫步);setfont(25, 0, _T(微软雅黑);setcolor(BLUE);outtextxy(625, 430, _T(时间:);outtextxy(625,

17、 460, _T(分数:);outtextxy(625, 490, _T(暂停(P 键);outtextxy(625, 520, _T(重新游戏(R 键) );setcolor(RED);outtextxy(720, 400, m_str_leave);outtextxy(680, 460, m_str_score);outtextxy(680, 430, m_str_time);End Batch Draw();)private:double m_time;shortm_score;shortm_leave;bool m_pause;TCHAR m_str_leave2, m_str_tim

18、e33, m_str_score5;COLORREF m_bgcolor;void DisplayTime()显示当前耗时(BeginBatchDraw();_stprintf(m_str_time, _T(%.1lf),setfont(25, 0, _T(微软雅黑); setfillstyle(m_bgcolor); bar(680,430,800,455);setcolor(RED);outtextxy(680,430,m_str_time);End Batch Draw();)void DisplayScore()显示当前分数(BeginBatchDraw();_stprintf(m_s

19、tr_score,_T(%d),m_score);setfont(25, 0, _T(微软雅黑);setfillstyle(m_bgcolor);bar(680,460,800,485); setcolor(RED); outtextxy(680,460,m_str_score);End Batch Draw(););llllllllllllllllllllllllllllllllllllllllllll声明游戏需要的类llllllllllllllllllllllllllllllllllllllllllllGamegame;用于初始化游戏、设置游戏相关参数GameAreaa;用于初始化游戏区域

20、,设置,改变游戏区域相关参数ManageArea manager; 用于初始化管理区域,设置管理区相关参数Snake s;用于初始化蛇,数据化蛇,操作蛇IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII游戏的消息控制,流程控制函数IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIvoid MessageDisposeQ消息处理函数char c;s.now = NULL;bool Keepdown = false;while(true)Keepdown = false;是否持续按 WASD中的一个按键if(kbhit()

21、(switch (c = getch() 处理按键消 息(WASD)(case W:case W:if(s. toward = UP)Keepdown = true;elseif(s. toward!=DOWN&S.toward != UP)s.toward = UP;break;case s:case S:if(s. toward=DOWN)Keepdown = true;elseif(s. toward!=UP&S.toward != DOWN)s.toward = DOWN;break;case a:case A:if(s. toward=LEFT)Keepdown = true;els

22、e if(s. toward != RIGHT&s.toward != LEFT)s.toward = LEFT;break;cased:case D:if(s. toward=RIGHT)Keepdown = true;else if(s. toward != LEFT&s.toward != RIGHT)s.toward = RIGHT;break;case p: case P:manager.m_pause =!manager.m_pause;设置暂停或开始manager. DisplayPause(); /显示暂停或开始break;case T:case R:Relnit();brea

23、k;)停,直接进行下次循环continue;)BeginBatchDraw();switch(a.m_games.head-m_x/10s.head-m_y/1O.ReturnFull()检测蛇头遇到的情况(case 2:遇到食物,蛇身加长a.ChangeColor(s.head-m_x/10,s.head-m_y/ 10,BLUE);s.SnakeAdd。; 蛇增长a.ChangeColor(s.head-m_x/10,s.head-m_y/ 10,BLUE);a.DelFood(); 删除食物if(a.CreatFood() = false) / 创 建 新食物,并检查是否通关(game.

24、WinGame();/游戏通关(当地图没地方创建食物时)break;case 0:a.m_games.last-m_x/10s.last-m_y/10.set full(0);设置蛇尾经过处无障碍a.ChangeColor(s.last-m_x/10,s.last-m_y/10, BLACK); s.SnakeMove(); 蛇移动一次a.ChangeColor(s.head-m_x/10,s.head-m_y/ 10,BLUE);a.m_games.head-next-m_x/10s.head-ne xt-m_y/10.setfull(1);设置蛇头经过处有障碍break; case 1:遇

25、到障碍物game.FailGame();a.ChangeColor(s.head-m_x/10,s.head-m_y/ 10,RGB(255,127,39);FlushBatchDrawQ;char c =while(c != T & c != R) 当游戏失败时,按 R键可重新进行游戏if(kbhit()(c = getch();)Sleep(10);)Relnit(); II重新开始游戏 break;)End Batch Draw();if(Keepdown=false)(Sleep(100);manager.TimeAdd(O.I); / 增加时间)else当持续按下按方向键时(Slee

26、p(4O);适当休眠可以增加游戏流畅性manager.TimeAdd(0.04);增加时)llllllllllllllllllllllllllllllllllllllllllll游戏初始化函数IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIvoid Relnit()(a.lnit(); /初始化游戏区s.lnit();初始化蛇manager.lnit(); 初始化管理区绘制蛇的开始状态s.now = s.head;a.ChangeColor(s.now-m_x/10,s.now-m_y/1 O.BLUE);s.now = s.last;a.ChangeColor(s.now-m_x/10,s.now-m_y/1 O.BLUE);)llllllllllllllllllllllllllllllllllllllllllll/main函数,程序入口llllllllllllllllllllllllllllllllllllllllllll int main(void)(game.lnit();初始化游戏参数、设置Relnit();初始化其他MessageDispose(); 消息处理函数return 0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!