贪吃蛇课程设计2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
#define LEN 30
#define WID 25
int snake[LEN][WID]={0};
char snake_dir = 'a';//记录蛇头的移动方向
int snake_point_x,snake_point_y;//记录蛇头的位置
int snake_len=3;//记录蛇的长度
clock_t now_time;//记录当前时间
int waiting_time=300;//记录自动移动的时间间隔
int eat_apple = 1; //吃到苹果表示为0
int bake_raod = 0; //背景颜色
int level=1;
int score=-1;
int apple=-1;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
void Set_Color(int color) //设置颜色
{
SetConsoleTextAttribute(hConsole, color);
}
void hid_guanbiao()
{
//隐藏光标CONSOLE_CURSOR_INFO cursor_info={1 , 0};
SetConsoleCursorInfo(hConsole, &cursor_info);
}
void goto_point(int x,int y)
{
//设置光标位置COORD point;
point.X=x;
point.Y=y;
SetConsoleCursorPosition(hConsole , point);
}
void game_over() //蛇死了
{
goto_point(29,6);
printf("GRAM OVER!!");
Sleep(1000);
system("pause > nul");
exit(0);
}
void clear_snake()
{
//擦除贪吃蛇int x,y;
for(y = 0;y < WID; y++)
{
for(x = 0;x < LEN;x++)
{
goto_point(x*2 , y);
if(snake[x][y]==snake_len)
printf(" ");
}
}
}
void rand_apple()
{ //随机产生苹果int x,y;
do{
x=(rand()%(LEN-2))+1;
y=(rand()%(WID-2))+1;
}while(snake[x][y]);
snake[x][y]=-1;
goto_point(x*2,y);
Set_Color(rand()%8+1);
printf("●");
eat_apple=0;
}
void Pri_News() //打印信息{
Set_Color(0xe);
goto_point(73,4);
score += level;
printf("%3d", score);
goto_point(73, 6);
printf("%3d", level);
goto_point(73, 8);
printf("%3d",snake_len);
goto_point(73, 10);
printf("0.%dm/s", 100-waiting_time/10);
goto_point(75, 12);
printf("%d", apple);
}
void level_snake() //设置等级系统、速度
{
if((apple-1)/10==level)
{
++level;
if(waiting_time>50)
waiting_time-=50;
else if(waiting_time>20)
waiting_time-=20;
else if(waiting_time>10)
waiting_time-=10;
else
waiting_time-=1;
}
}
void move_snake()// 让蛇动起来
{
int x,y;
for(x=0;x { // 先标记蛇头 for(y=0;y { if(snake[x][y]==1) { switch(snake_dir) { // 根据新的蛇头方向标记蛇头 case 'w': if(y!=1) //snake_point_y=WID-2; //else snake_point_y=y-1; snake_point_x=x; break; case 's': if(y!=WID-2) //snake_point_y=1; // else snake_point_y=y+1; snake_point_x=x; break; case 'a': if(x!=1) //snake_point_x=LEN-2; //else