yy_final yy_final
关注数: 6 粉丝数: 2 发帖数: 335 关注贴吧数: 9
求帮忙看看哪出问题了,一运行就直接结束了? 我自己估计是SetTimer那出问题了 #include <stdlib.h> #include <dos.h> #include <windows.h> #include <conio.h> #define N 21 int i; char key; int score = 0; int gamespeed=500; struct Food { int x; int y; int yes; }food; struct snake { int x[100]; int y[100]; int node; int direction;//1:右;2:左;3:上;4:下; int life; }snake; void Close(void); void Drewk(void); void GameOver(void); void GamePlay(void); void PrScore(void); void setcolor(int color); void dreaw(int x,int y,int color,char style); void main(void) { score=0; Drewk(); GamePlay(); Close(); } void setcolor(int color)//改变颜色函数 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color); } void drew(int x,int y,int color,char* Text)//输出函数 { COORD pos; pos.X=x*2; pos.Y=y; setcolor(color); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); printf("%s\n",Text); } void Drewk()//显示墙 { int i,j; int wall[N+2][N+2]={{0}}; for(i=1;i<=N;i++) for(j=1;j<=N;j++) wall[i][j]=1; for(i=0;i<=N+1;i++) { for(j=0;j<=N+1;j++) { if(wall[i][j]) { drew(i,j,11,"■"); } else { drew(i,j,11,"□"); } } } } void GamePlay(void)//游戏过程 { srand((unsigned)time(NULL)); food.yes=1; snake.life=1; snake.direction=1; snake.x[0]=N/2; snake.y[0]=N/2; snake.node=3; PrScore(); while(1) { if(food.yes==1)//判断是否需要食物 { food.x=rand()%N+1; food.y=rand()%N+1; drew(food.x,food.y,12,"●"); food.yes=0; } for(i=snake.node-1;i>0;i--)//显示蛇 { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } switch(snake.direction)//移动蛇 { case 1:snake.x[0]++;break; case 2:snake.x[0]--;break; case 3:snake.y[0]++;break; case 4:snake.y[0]--;break; } if(snake.node>=4)//判断是否咬到自己 { for(i=3;i<snake.node;i++) { if(snake.x[i]==snake.x[0] && snake.y[i]==snake.y[0]) { GameOver(); snake.life=0; break; } } } if(snake.x[0]==0 || snake.x[0]==N+1 || snake.y[0]==0 || snake.y[0]==N+1)//判断是否撞墙 { GameOver(); snake.life=0; } if(snake.life==0) //死了就跳出while(1) break; if(snake.x[0]==food.x && snake.y[0]==food.y)//判断是否吃了苹果 { snake.node++; food.yes=1; score+=10; PrScore(); } for(i=0;i<snake.node;i++)//显示出蛇 drew(snake.x[i],snake.y[i],14,"★"); SetTimer(GetStdHandle(STD_OUTPUT_HANDLE),1,gamespeed,NULL);//延时,控制程序速度 if(snake.life==0)//判断是不是死了,死了就跳出循环 return; if(kbhit())//判断是否改变了方向 { drew(0,N+2,0,""); key=getche(); if(key=='w' && snake.direction!=4) snake.direction=3; else if(key=='d' && snake.direction!=2) snake.direction=1; else if(key=='a' && snake.direction!=1) snake.direction=2; else if(key=='s' && snake.direction!=3) snake.direction=4; } } } void GameOver(void)//显示结束游戏 { PrScore(); drew(N/2,N/2,7,"GAME OVER"); } void PrScore(void)//显示分数 { char str[128]; sprintf(str,"%s%d","score:",score); drew(N+2,1,14,str); } void Close(void)//退出程序 { getche(); exit(0); }
1 下一页