求解贪吃蛇如何动起来
程序代码:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #define LEFT L #define RIGHT R #define UP U #define DOWN D void init(); void show(); int start(); void creat(); void move(); void judge(); //蛇的初始坐标及食物的坐标,蛇的长度 int m=0,n=0,z,w,count=0; const char Shead='@'; const char Sbody='#'; const char Sfood='*'; int a[15][15]={0}; bool Food=true; char c; static int i; int main() { init(); start(); judge(); getch(); return 0; } void init() { printf("\t\t贪吃蛇游戏\n"); srand(time(0)); //蛇的初始坐标及食物的初始坐标, //随机产生蛇头 m=rand()%15; n=rand()%15; a[m][n]=Shead; //随机产生食物 z=rand()%15; w=rand()%15; if(m==z&&n==w) { z=rand()%15; w=rand()%15; } a[z][w]=Sfood; show(); printf("Press any button to start:\n"); Food=false; putchar('\n'); } //开始游戏 int start() { int count=0; if(m!=z&& n!=w) move(); else { Food=true; creat(); move(); } _sleep(500); system("CLS"); show(); return 0; } //游戏移动 void move() { getch(); if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 { while(kbhit() != 0) //可能存在多个按键,要全部取完,以最后一个为主 c= getch(); switch(c) { default:break; case 'R': m++; break; case 'L': m--; break; case 'U': n++; break; case 'D': n--; break; } } show(); } 显示游戏 void show() { for(i=0;i<15;i++) printf("_"); for( i=0;i<15;i++) { for(int j=0;j<15;j++) if(i==m&&j==n) { printf("%c",Shead); } else if(i==z&&j==w) { printf("%c",Sfood); } else if(i&&j==14) { printf("|"); } else if(i==14&&j>=0&&j<=14) printf("_"); else printf(" "); putchar('\n'); } } //游戏判断 void judge() { if(m!=z&&n!=w) { move(); judge(); } //吃到食物再创建 else if(m==z&&n==w) { a[m++][n++]=Sbody; a[m][n]=Shead; Food=true; creat(); count++; move(); judge(); } //自吃或撞墙则判断输了 else if(m>15||m<0||n>15||n<0||a[m][n]!=' ') printf("Game over!"); } //食物创建 void creat() { if(Food) { z=rand()%15;//随机产生食物 w=rand()%15; if(m==z&&n==w) { z=rand()%15; w=rand()%15; } a[z][w]=Sfood; Food=false; } }