#include<easyx.h> #include<stdio.h> #include<time.h> #include<conio.h> #define width 20 #define height 20 #define unit 20 enum draw { tou, sheng, shi, clear }; enum cmd { up, left, right, down, quit }; struct block { char x,y; }g_curblock,g_nextblock; struct node { char x,y; struct node *next; }; struct node n1,n2,m1; struct node *p,*q,*k,*t,*h; struct node f[500]; byte g_world[width][height]={0}; int zuobiao[1000]; int wei[2]; DWORD oldtime,newtime; bool checkblock(int x,int y); void dispatchcmd(cmd _cmd); void Down(); void drawblock(block _block,draw _draw); void eat(); void g_worbian(node _node); cmd getcmd(); void init(); void Left(); void newblock(); void newgame(); cmd qiangetcmd(); void qianQuit(); void Quit(); void Right(); void shengbian(node _node); void Up(); void weizuo(node _node); void gameover(); void clearqian(node _node); void drawhou(node _node); void kong(); void main() { init(); while(true) { if(kbhit()) { switch(getch()) { case 'w': case 'W': Up(); goto qfy; case 'a': case 'A': Left(); goto qfy; case 'd': case 'D': Right(); goto qfy; case 27: qianQuit(); } } } qfy: cmd e; while(true) { e=getcmd(); dispatchcmd(e); if(n1.x==g_nextblock.x&&n1.y==g_nextblock.y) eat(); } } void init() { initgraph(640,480); setbkcolor(WHITE); cleardevice(); setorigin(120,40); setlinecolor(LIGHTGREEN); setfillstyle(BS_HATCHED,HS_DIAGCROSS); setfillcolor(LIGHTGREEN); fillrectangle(-1*unit,-1*unit,(width+1)*unit,(height+1)*unit); setfillcolor(WHITE); setfillstyle(BS_SOLID); fillrectangle(-1,-1,width*unit,height*unit); newgame(); } void newgame() { ZeroMemory(g_world,width*height); setfillcolor(WHITE); solidrectangle(0,0,width*unit-1,height*unit-1); n1.x=width/2; n1.y=height/2; n1.next=&n2; g_world[n1.x][n1.y]=1; n2.x=width/2; n2.y=height/2-1; n2.next=NULL; g_world[n2.x][n2.y]=1; g_curblock.x=n1.x; g_curblock.y=n1.y; drawblock(g_curblock,tou); g_curblock.x=n2.x; g_curblock.y=n2.y; drawblock(g_curblock,sheng); newblock(); } void newblock() { srand((unsigned) time(NULL)); while(true) { g_nextblock.x=rand()%40; g_nextblock.y=rand()%40; if(checkblock(g_nextblock.x,g_nextblock.y)) { drawblock(g_nextblock,shi); break; } } oldtime=GetTickCount(); } cmd getcmd() { while(true) { newtime=GetTickCount(); if(kbhit()) { switch(getch()) { case 'w': case 'W': return up; case 's': case 'S': return down; case 'a': case 'A': return left; case 'd': case 'D': return right; case 27: return quit; } } if(newtime-oldtime>=200) { if(n1.x==n2.x+1) return right; else if(n1.x==n2.x-1) return left; else if(n1.y==n2.y+1) return up; else if(n1.y==n2.y-1) return down; } } } void dispatchcmd(cmd _cmd) { switch(_cmd) { case up: Up(); break; case down: Down(); break; case left: Left(); break; case right: Right(); break; case quit: Quit(); break; } } void drawblock(block _block,draw _draw) { int left=_block.x*unit; int top=(height-_block.y-1)*unit; int right=(_block.x+1)*unit-1; int buttom=(height-_block.y)*unit-1; switch(_draw) { case sheng: setfillcolor(DARKGRAY); solidrectangle(left+1,top+1,right-1,buttom-1); break; case clear: setfillcolor(WHITE); solidrectangle(left,top,right,buttom); break; case shi: setfillcolor(LIGHTRED); solidrectangle(left+1,top+1,right-1,buttom-1); break; case tou: if(n1.x==n2.x+1) { setfillcolor(BLACK); solidrectangle(left+1,top+1,right-1,buttom-1); setfillcolor(WHITE); solidrectangle(right-1-8,top+1+3,right-1-5,top+1+6); solidrectangle(right-1-8,buttom-1-3,right-1-5,buttom-1-6); } else if(n1.y==n2.y+1) { setfillcolor(BLACK); solidrectangle(left+1,top+1,right-1,buttom-1); setfillcolor(WHITE); solidrectangle(left+1+3,top+1+5,left+1+6,top+1+8); solidrectangle(right-1-3,top+1+5,right-1-6,top+1+8); } else if(n1.x==n2.x-1) { setfillcolor(BLACK); solidrectangle(left+1,top+1,right-1,buttom-1); setfillcolor(WHITE); solidrectangle(left+1+5,top+1+3,left+1+8,top+1+6); solidrectangle(left+1+5,buttom-1-3,left+1+8,buttom-1-6); } else if(n1.y==n2.y-1) { setfillcolor(BLACK); solidrectangle(left+1,top+1,right-1,buttom-1); setfillcolor(WHITE); solidrectangle(left+1+3,buttom-1-5,left+1+6,buttom-1-8); solidrectangle(right-1-3,buttom-1-5,right-1-6,buttom-1-8); } break; } } bool checkblock(int x,int y) { if(x<0||x>=width||y<0||y>=height) return false; else if(g_world[x][y]==1) return false; else return true; } void qianQuit() { HWND wnd=GetHWnd(); if(MessageBox(wnd,"您要退出游戏吗?","退出游戏",MB_YESNO|MB_ICONQUESTION)==IDYES) Quit(); } void Quit() { closegraph(); exit(0); } void Up() { if(checkblock(n1.x,n1.y+1)) { clearqian(n1); weizuo(n1); shengbian(n1); n1.y++; g_worbian(n1); drawhou(n1); } else if(n1.y+1==n2.y) return; else gameover(); oldtime=GetTickCount(); } void Down() { if(checkblock(n1.x,n1.y-1)) { clearqian(n1); weizuo(n1); shengbian(n1); n1.y--; g_worbian(n1); drawhou(n1); } else if(n1.y-1==n2.y) return; else gameover(); oldtime=GetTickCount(); } void Left() { if(checkblock(n1.x-1,n1.y)) { clearqian(n1); weizuo(n1); shengbian(n1); n1.x--; g_worbian(n1); drawhou(n1); } else if(n1.x-1==n2.x) return; else gameover(); oldtime=GetTickCount(); } void Right() { if(checkblock(n1.x+1,n1.y)) { clearqian(n1); weizuo(n1); shengbian(n1); n1.x++; g_worbian(n1); drawhou(n1); } else if(n1.x+1==n2.x) return; else gameover(); oldtime=GetTickCount(); } cmd qiangetcmd() { if(kbhit()) { switch(getch()) { case 'w': case 'W': return up; case 'a': case 'A': return left; case 's': case 'S': return down; case 'd': case 'D': return right; case 27: return quit; } } } void shengbian(node _node) { ZeroMemory(zuobiao,1000); int i=0; p=&_node; while(p->next!=NULL) { zuobiao[i++]=p->x; zuobiao[i++]=p->y; p=p->next; } i=0; p=_node.next; while(p->next!=NULL) { p->x=zuobiao[i++]; p->y=zuobiao[i++]; p=p->next; } p->x=zuobiao[i++]; p->y=zuobiao[i]; } void g_worbian(node _node) { ZeroMemory(g_world,width*height); p=&_node; while(p->next!=NULL) { g_world[p->x][p->y]=1; p=p->next; } g_world[p->x][p->y]=1; } void xiaowei(node _node) { p=&_node; g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,clear); drawblock(g_curblock,sheng); p=p->next; while(p->next!=NULL) { p=p->next; } g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,clear); } void toubian(node _node) { p=&_node; g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,clear); drawblock(g_curblock,sheng); } void weizuo(node _node) { k=&_node; while(k->next!=NULL) { k=k->next; } wei[0]=k->x; wei[1]=k->y; } int w=0; void eat() { drawblock(g_nextblock,clear); printf("\a"); f[w].x=wei[0]; f[w].y=wei[1]; f[w].next=NULL; t=&n1; while(t->next!=NULL) { t=t->next; } t->next=&f[w++]; ZeroMemory(g_world,width*height); t=&n1; while(t->next!=NULL) { g_world[t->x][t->y]=1; t=t->next; } g_world[t->x][t->y]=1; t=&n1; g_curblock.x=t->x; g_curblock.y=t->y; drawblock(g_curblock,tou); t=t->next; while(t->next!=NULL) { g_curblock.x=t->x; g_curblock.y=t->y; drawblock(g_curblock,sheng); t=t->next; } g_curblock.x=t->x; g_curblock.y=t->y; drawblock(g_curblock,sheng); newblock(); } void gameover() { HWND wnd=GetHWnd(); if(MessageBox(wnd,"游戏结束,还要来一局吗?","游戏结束",MB_YESNO|MB_ICONQUESTION)==IDYES) kong(); else Quit(); } void clearqian(node _node) { p=&_node; while(p->next!=NULL) { g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,clear); p=p->next; } g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,clear); } void drawhou(node _node) { p=&_node; g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,tou); p=p->next; while(p->next!=NULL) { g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,sheng); p=p->next; } g_curblock.x=p->x; g_curblock.y=p->y; drawblock(g_curblock,sheng); } void kong() { newgame(); while(true) { if(kbhit()) { switch(getch()) { case 'w': case 'W': Up(); goto qfy; case 'a': case 'A': Left(); goto qfy; case 'd': case 'D': Right(); goto qfy; case 27: qianQuit(); } } } qfy: cmd e; while(true) { e=getcmd(); dispatchcmd(e); if(n1.x==g_nextblock.x&&n1.y==g_nextblock.y) eat(); } }
0.0分
0 人评分
简单的a+b (C语言代码)浏览:713 |
A+B for Input-Output Practice (III) (C语言代码)浏览:589 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:793 |
1118(求助_已解决)浏览:349 |
前10名 (C语言代码)浏览:770 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:492 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:866 |
马拦过河卒 (C语言代码)浏览:1201 |
众数问题 (C语言代码)浏览:656 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:444 |
2300159616 2018-09-04 15:44:08 |
可以解释一下吗?我换不了狂里面的背景图,改了之后,虽然会有,单是一玩之后图片就不见了,然后又是白色的