ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.71KB ,
资源ID:3758943      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3758943.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇C语言图形化编程.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇C语言图形化编程.docx

1、贪吃蛇C语言图形化编程/ 程序名称:贪吃蛇/ 编译环境:Visual C+ 6.0 / 2010,EasyX_2011惊蛰版/ 程序编写:轻雨漫步 / 最后更新:2011-3-11/开始编写游戏需要的类/#include /EasyX_2011惊蛰版(绘图库)#include #include #include #define UP 1#define DOWN 2#define LEFT 3#define RIGHT 4/格子类,定义一个格子的属性及行为/class Cellpublic: friend class GameArea; /设置友元函数 void setxy(short x, s

2、hort y) /设置格子左上角坐标 m_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() /显示镭射状态的格子 IMAGE image(10,10); SetWorkingImage(&image); DWORD* pMem = Ge

3、tImageBuffer(&image); for(int i = 0; i 10 * 10; i+) pMemi = BGR(RGB(0, 0, i * 256 / (10*10) ); SetWorkingImage(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; private: short m_x; /格子的左上角X坐标 short m_y; /格子的左上角Y坐标 sho

4、rt m_full; /0为空,1为阻挡,2为食物 COLORREF m_color; /格子颜色;/游戏区类,编写有关游戏区的一些操作/class GameArea /游戏区域public: Cell m_game6060; /定义游戏区域(由360个格子组成) friend void MessageDispose(); /设置友元函数 bool CreatFood() /产生随机食物 srand(time(NULL); /初始化随机数种子 m_random1 = rand()%58+1; /随机生成一个0 - 58的整数 m_random2 = rand()%58+1; /随机一个0 -

5、58的整数 if(m_gamem_random2m_random2.m_full = 0) /检查生成的食物坐标是否在障碍上 m_gamem_random1m_random2.display(GREEN); m_gamem_random1m_random2.m_full = 2; return true; /如果随机的食物正好出现在蛇身上,则进入下面的循环寻找可以生成食物的地方 for(m_random1 = 1;m_random1 59;m_random1+) for(m_random2 = 1;m_random2 59;m_random2+) if(m_gamem_random2m_ran

6、dom2.m_full = 0) m_gamem_random1m_random2.display(GREEN); m_gamem_random1m_random2.m_full = 2; return true; /如果没有找到可以生成食物的地方,则通关 return false; /返回false即表示通关 void DelFood() /删除食物 m_gamem_random1m_random2.m_full = 0; /设置为0即代表格子属性为空 void ChangeColor(int flag1,int flag2,COLORREF color) /设置指定格子的颜色 m_game

7、flag1flag2.display(color); void Init() /初始化GAME区域 int flag1,flag2; /标识变量 BeginBatchDraw(); /开始批量绘图 setfillstyle(BLACK); /设置当前颜色 bar(0,0,600,600); /画无边框填充矩形(在这里的用途是用黑色清空游戏区域) for(flag1 = 0;flag1 60;flag1+) for(flag2 = 0;flag2 next;now-next != NULL;now = now-next) free(now-prior); head = (struct node*

8、)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; last = now; toward = DOWN; void SnakeAdd() now = head; /当前指向蛇头 now-prior = (struc

9、t node*)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-m_x = head-m_x; now-m_y = head-m_y + 10; break; case

10、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 SnakeDel() /释放蛇尾结点(删除蛇尾) last = last-prior; free(last-next); last-next = NULL; void SnakeMove() /蛇身移动一格 SnakeAdd(); /增加蛇头 SnakeDel(); /删除蛇尾 private: s

11、truct node /蛇身链表 int m_x; int m_y; struct node *next; /下个结点 struct node *prior; /上个结点 ; struct node *head; struct node *last; struct node *now;/游戏类,用来初始化游戏的参数,及实现其他游戏操作/class Gamepublic: void Init() closegraph(); initgraph(800,600); setbkmode(TRANSPARENT); /设置输出文字背景为透明 LOGFONT f; getfont(&f); / 获取当前

12、字体设置 f.lfHeight = 50; / 设置字体高度为 48(包含行距) _tcscpy(f.lfFaceName, _T(黑体); / 设置字体为“黑体” f.lfQuality = ANTIALIASED_QUALITY; / 设置输出效果为抗锯齿 setfont(&f); / 设置字体样式 void FailGame() /游戏失败显示的画面 setcolor(RED); setfont(70, 0, _T(微软雅黑); outtextxy(150, 265, _T(YOU LOSE!); void WinGame() /游戏胜利时显示的画面 setcolor(RED); set

13、font(70, 0, _T(微软雅黑); outtextxy(150, 265, _T(YOU WIN!); FlushBatchDraw(); Sleep(10000); exit(0); ;/管理区类,定义管理区域的相关操作/class ManageArea public: friend void MessageDispose(); void TimeAdd(double add) /增加时间(可在类外直接调用实现动态刷新时间) m_time += add; DisplayTime(); void ScoreAdd(short add) /增加分数(可在类外直接调用实现动态刷新分数) m

14、_score += add; DisplayScore(); void DisplayPause() /显示暂停或者开始 BeginBatchDraw(); _stprintf(m_str_score, _T(%d), m_score); setfont(25, 0, _T(微软雅黑); setcolor(BLUE); if(m_pause) outtextxy(625, 490, _T(开始(P键)); else outtextxy(625, 490, _T(暂停(P键)); EndBatchDraw(); void Init() /初始化管理界面 m_time = 0.0; m_score

15、 = 0; m_pause = false; _stprintf(m_str_score, _T(%d), m_score); /格式化转换类型 _stprintf(m_str_time, _T(%.1lf), m_time); m_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

16、(128,0,255); outtextxy(625, 140, _T(制作:初恋年代); setfont(25, 0, _T(微软雅黑); setcolor(BLUE); outtextxy(625, 390, _T(时间:); outtextxy(625, 420, _T(分数:); outtextxy(625, 460, _T(暂停(P键)); outtextxy(625, 490, _T(重新游戏(R键)); outtextxy(625, 520, _T(直接退出(ESC键)); setcolor(RED); outtextxy(680, 420, m_str_score); outt

17、extxy(680, 390, m_str_time); EndBatchDraw(); void DisplayTime() /显示当前耗时 BeginBatchDraw(); _stprintf(m_str_time, _T(%.1lf), m_time); setfont(25, 0, _T(微软雅黑); setfillstyle(m_bgcolor); bar(680,390,800,415); setcolor(RED); outtextxy(680,390,m_str_time); EndBatchDraw(); void DisplayScore() /显示当前分数 BeginB

18、atchDraw(); _stprintf(m_str_score, _T(%d), m_score); setfont(25, 0, _T(微软雅黑); setfillstyle(m_bgcolor); bar(680,420,800,445); setcolor(RED); outtextxy(680,420,m_str_score); EndBatchDraw(); private: double m_time; short m_score; bool m_pause; TCHAR m_str_leave2, m_str_time33, m_str_score5; COLORREF m_

19、bgcolor;/声明游戏需要的类/Game game; /用于初始化游戏、设置游戏相关参数GameArea a; /用于初始化游戏区域,设置,改变游戏区域相关参数ManageArea manager; /用于初始化管理区域,设置管理区相关参数Snake s; /用于初始化蛇,数据化蛇,操作蛇/游戏的消息控制,流程控制函数/void MessageDispose() /消息处理函数 char c; s.now = NULL; bool Keepdown = false; while(true) Keepdown = false; /是否持续按W A S D 中的一个按键 if(kbhit()

20、switch(c = getch() /处理按键消息(W A S D) case w: case W: if(s.toward = UP)Keepdown = true; else if(s.toward != DOWN&s.toward != UP)s.toward = UP; break; case s: case S: if(s.toward = DOWN)Keepdown = true; else if(s.toward != UP&s.toward != DOWN)s.toward = DOWN; break; case a: case A: if(s.toward = LEFT)K

21、eepdown = true; else if(s.toward != RIGHT&s.toward != LEFT)s.toward = LEFT; break; case d: case D: if(s.toward = RIGHT)Keepdown = true; else if(s.toward != LEFT&s.toward != RIGHT)s.toward = RIGHT; break; case 27: closegraph(); exit(0); case p: case P: manager.m_pause = !manager.m_pause; /设置暂停或开始 man

22、ager.DisplayPause(); /显示暂停或开始 break; case r: case R: ReInit(); break; if(true = manager.m_pause) /如果暂停,直接进行下次循环 continue; BeginBatchDraw(); switch(a.m_games.head-m_x/10s.head-m_y/10.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.WinGame(); /游戏通关(当地图没地方创建食物时) manager.ScoreA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1