- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <conio.h>
- #include <time.h>
- #include <windows.h>
- using namespace std;
- char a[20][21]={"####################",
- "# #",
- "# o #",
- "# o #",
- "# o #",
- "# #",
- "# # # #",
- "# # # #",
- "# # # #",
- "# # # #",
- "# # * # #",
- "# # # #",
- "# # # #",
- "# # # #",
- "# # # #",
- "# #",
- "# #",
- "# #",
- "# #",
- "####################"};
- int x[10001]={2,3,4},y[10001]={3,3,3},head=2,tail=0,gameover=0,score=0;
- int foodx=6,foody=6;
- char fx='s',t;
- void pmaze()
- {
- system("cls");
- printf("\nscore=%d\n",score);
- for(int i=0;i<=19;i++)
- {
- printf("%s\n",a[i]);
- }
-
- }
- void newfood()
- {
- srand(time(NULL));
- do
- {
- foodx=rand()%18+1;
- foody=rand()%18+1;
- }while(a[foodx][foody]!=' ');
- a[foodx][foody]='*';
- score += 10;
- }
- void move(){
- int newx,newy,hx,hy;//newx,newy为新的蛇头坐标
- hx = x[head]; hy = y[head];//hx,hy当前的蛇头坐标
- //根据运动的方向来计算新的蛇头坐标
- if(fx=='s') { newx = hx+1; newy = hy;}
- if(fx=='w') { newx = hx-1; newy = hy;}
- if(fx=='a') { newx = hx; newy = hy-1;}
- if(fx=='d') { newx = hx; newy = hy+1;}
- if(t=='s' && fx!='w') {fx=t;}
- if(t=='w' && fx!='s') {fx=t;}
- if(t=='a' && fx!='d') {fx=t;}
- if(t=='d' && fx!='a') {fx=t;}
- //将新的蛇头坐标 存储到数组中
- if(a[newx][newy]=='#' || a[newx][newy]=='o' ){
- gameover=1;
- }
- if(a[newx][newy]==' '){
- head++;
- x[head]=newx;
- y[head]=newy;
- a[newx][newy] = 'o';
- //删除蛇尾
- int tx,ty;//tx,ty为蛇尾坐标
- tx=x[tail];
- ty=y[tail];
- a[tx][ty]=' ';
- tail++;
- }
- if(a[newx][newy]=='*'){
- head++;
- x[head]=newx;
- y[head]=newy;
- a[newx][newy] = 'o';
- newfood();
- }
-
- }
- int main()
- {
- //a[foodx][foody]='*';
- while(1>0)//游戏主循环
- {
- pmaze();//打印游戏界面
- if(kbhit())//当键盘有敲击的时候
- {
- t=getch();//游戏读入
- }
- move();//
- if(gameover==1)
- {
- break;
- }
- Sleep(150);
- }
-
- printf("Game over");
- return 0;
- }
复制代码
|