1、image); DWORD* pMem=GetImageBuffer(& for(int i=0;i10*10;i+) pMemi=BGR(RGB(0,0,i*156/(10*10); SetWorkingImage(NULL); putimage(m_x,m_y,& short ReturnFull() /返回格子状态 return m_full; Cell() m_x=0,m_y=0,m_full=0; m_color=BLACK;/游戏区类class GameArea int m_random1,m_random2; Cell m_game6060; friend void Messag
2、eDispose(); bool CreatFood() /随机产生食物 srand(time(NULL); m_random1=rand()%58+1; m_random2=rand()%58+1; if(m_gamem_random1m_random2.m_full=0) /检查生成的食物坐标是否在障碍上 m_gamem_random1m_random2.display(GREEN); m_gamem_random1m_random2.m_full=2; return true; /如果随机的食物正好出现在蛇身上,则进入下面的循环寻找可以生成食物的地方 for(m_random1=1;m_
3、random159;m_random1+) for(m_random2=1;m_random2m_random2+) if(m_gamem_random2m_random2.m_full=0) m_gamem_random1m_random2.m_full=2; /如果没有找到可以生成食物的地方,则通关 return false; void DelFood() /删除食物 m_gamem_random1m_random2.m_full=0; void ChangeColor(int flag1,int flag2,COLORREF color)/设置指定格子的颜色 m_gameflag1fla
4、g2.display(color); void Init() int flag1,flag2; BeginBatchDraw(); setfillstyle(BLACK); bar(0,0,600,600); for(flag1=0;flag160;flag1+) for(flag2=0;flag2next;now-next != NULL;now = now-next) free(now-prior); head = (struct node*)malloc(sizeof(struct node); /为蛇头分配内存 head-prior = NULL;m_x = 300;m_y = 300
5、; now = (struct node*)malloc(sizeof(struct node);next = now; now-prior = head;next = NULL;m_y = 290; last = now; toward = DOWN; void SnakeAdd() now=head;prior=(struct node*)malloc(sizeof(struct node); now=now-prior;prior=NULL;next=head; switch(toward) case UP: now-m_x=head-m_x;m_y=head-m_y-10; break
6、; case DOWN:m_x = head-m_y = head-m_y + 10; case LEFT:m_x - 10;m_y; case RIGHT:m_x + 10; head=now; /设置当前结点为蛇头 void SnakeDel() /释放蛇尾结点(删除蛇尾) last=last- free(last-next); last-next=NULL; void SnakeMove() SnakeAdd(); /增加蛇头 SnakeDel(); /删除蛇尾/游戏类,用来初始化游戏的参数,及实现其他游戏操作class Game int d; Game() d=1; closegrap
7、h(); initgraph(800,600); setbkmode(TRANSPARENT); /使用透明的输出背景 LOGFONT f; getfont(&f); f.lfHeight=50; _tcscpy(f.lfFaceName,_T(黑体); f.lfQuality=ANTIALIASED_QUALITY; setfont(& void FailGame() /游戏失败显示的画面 setcolor(RED); setfont(70,0,_T(微软雅黑 outtextxy(150,265,_T(游 戏 失 败 setcolor(WHITE); setfont(40,0,_T( out
8、textxy(160,365,_T(退出按O,重玩按R void WinGame() /游戏胜利时显示的画面 setfont(70, 0, _T( outtextxy(150, 265, _T(胜 利! FlushBatchDraw(); Sleep(10000); exit(0); void ExitGame() /游戏中途退出 BeginBatchDraw(); if(d=1) setfont(25,0,_T( bar(15,200,500,450); setfont(45, 0, _T( outtextxy(130, 220, _T( EXIT THE GAME? setfont(40,
9、 0, _T( outtextxy(150, 300,_T(YES(Y) or NO(N) else if(d=2) setcolor(BLACK);EXIT THE GAME?/管理区类,定义管理区域的相关操作class ManageArea double m_time; short m_score; short m_leave; bool m_pause; TCHAR m_str_leave2, m_str_time33, m_str_score5; COLORREF m_bgcolor; void DisplayTime() /显示当前耗时 _stprintf(m_str_time, _
10、T(%.1lf), m_time); setfont(25, 0, _T( /设置字体(nHeight 指定高度 nWidth 字符的平均宽度(0为自适应) lpszFace 字体名称) setfillstyle(m_bgcolor); bar(680,430,800,455); /bar(int left,int top,int right,int bottom) 是画二维条形图的函数 outtextxy(680,430,m_str_time); void DisplayScore() /显示当前分数 _stprintf(m_str_score, _T(%d), m_score); bar(
11、680,460,800,485); outtextxy(680,460,m_str_score); void TimeAdd(double add) /增加时间(可在类外直接调用实现动态刷新时间) m_time += add; DisplayTime(); void ScoreAdd(short add) /增加分数(可在类外直接调用实现动态刷新分数) m_score += add; DisplayScore(); void DisplayPause() /显示暂停或者开始 /setfont(25, 0, _T( bar(625,200,800,300); setcolor(RGB(12,45
12、,19); if(!m_pause) outtextxy(630, 250, _T(进行中. else setcolor(RED); outtextxy(630, 250, _T(暂 停 EndBatchDraw(); void Init() /初始化管理界面 m_time = 0.0; m_score = 0; m_leave = 1; m_pause = false; /格式化转换类型,将m_score输出到m_str_score m_bgcolor = BLACK; bar(601,0,800,600); setfont(40, 0, _T( setcolor(YELLOW); outt
13、extxy(625, 30, _T(贪 吃 蛇 setfont(20, 0, _T( setfillstyle(BLUE); fillcircle(640,140,25); outtextxy(670, 140, _T(制作:软五 莫智豪 setcolor(WHITE); outtextxy(625, 340, _T(退出 (O键) line(620,330,780,330); line(620,490,780,490); outtextxy(625, 430, _T(时间: outtextxy(625, 460, _T(分数: outtextxy(625, 400, _T(暂停/开始(P键)
14、 outtextxy(625, 370, _T(重新游戏 (R键) outtextxy(720, 400, m_str_leave); outtextxy(680, 460, m_str_score); outtextxy(680, 430, m_str_time); DisplayPause(); /声明游戏需要的类Game game; /用于初始化游戏、设置游戏相关参数GameArea a; /用于初始化游戏区域,设置,改变游戏区域相关参数ManageArea manager; /用于初始化管理区域,设置管理区相关参数Snake s; /用于初始化蛇,数据化蛇,操作蛇/游戏的消息控制,流程
15、控制函数void MessageDispose() /消息处理函数 char c; /- char t= ; int d=0; /我添加的 int f=0; s.now = NULL; bool Keepdown = false; while(true) Keepdown = false; /是否持续按W A S D 中的一个按键 if(kbhit() switch(c = getch() /处理按键消息(W A S D) case o: f=1; break;wW if(s.toward = UP)Keepdown = true; else if(s.toward != DOWN&s.tow
16、ard != UP)s.toward = UP; break;sS if(s.toward = DOWN)Keepdown = true;= UP&= DOWN)s.toward = DOWN;aA if(s.toward = LEFT)Keepdown = true;= RIGHT&= LEFT)s.toward = LEFT;dD if(s.toward = RIGHT)Keepdown = true;= LEFT&= RIGHT)s.toward = RIGHT;pP manager.m_pause = !manager.m_pause; /设置暂停或开始 manager.DisplayPause(); /显示暂停或开始r ReInit(); /- if(f=1) game.d=1; f=0; game.ExitGame(); while(t!=y)&(t!Yn(N) t=getch(); if(t=)|(t= t= else if(t= game.d=2; game.ExitGame(); t= /-
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2