c语言贪吃蛇最简单代码?
发布于 2021-05-18 07:36:48
浏览 178
详情:
1、
#include <stdio.h>
2、
#include <windows.h>
3、
#include <time.h>
4、
#include <conio.h>
5、
#define frame_height 20 //define map size
6、
#define frame_width 40垍
7、
#define UP 'w' //define operate key垍
8、
#define DOWN 's'
9、
#define LEFT 'a'
10、
#define RIGHT 'd'
11、
int i,j,k;
12、
char ch=UP; //initial direction垍
13、
int grow=0; //flag: if snake grow垍
14、
struct Food{
15、
int x;
16、
int y;
17、
}food;垍
18、
struct Snake{
19、
int x[50];
20、
int y[50];
21、
int len;
22、
int speed;
23、
}snake; //snake[0] is head
24、
void init_map(void);
25、
void update_food(void);
26、
void move_snake(void);垍
27、
int is_alive(void);
28、
void get_speed(void);
29、
void gotoxy(int x, int y);
30、
int main()垍
31、
{
32、
init_map(); //初始化地图垍
33、
while(1)垍
34、
{
35、
update_food(); //是否产生食物垍
36、
get_speed(); //获取速度垍
37、
move_snake(); //移动蛇身
38、
Sleep(snake.speed); //移动速度
39、
if(!(is_alive())) //蛇的死活(撞墙或自食)
40、
break;
41、
}
42、
printf("Game Over!");垍
43、
getch();
44、
return 0;
45、
}
46、
//initialize垍
47、
void init_map(void)
48、
{
49、
//initial food
50、
srand(time(NULL));
51、
food.x=rand()%(frame_height-2)+1;
52、
food.y=rand()%(frame_width-2)+1;垍
53、
gotoxy(food.x, food.y);垍
54、
printf("!");
55、
//initial snake
56、
snake.x[0]=frame_height/2;垍
57、
snake.y[0]=frame_width/2;
58、
gotoxy(snake.x[0], snake.y[0]);垍
59、
printf("@");垍
60、
snake.len=3;
61、
snake.speed=200;
62、
for(k=1;k<snake.len;k++)垍
63、
{垍
64、
snake.x[k]=snake.x[k-1]+1;
65、
snake.y[k]=snake.y[k-1];
66、
gotoxy(snake.x[k], snake.y[k]);
67、
printf("@");
68、
}
69、
//initial bar
70、
for(j=0;j<frame_width;j++)
71、
{
72、
gotoxy(0, j);
73、
printf("#");
74、
gotoxy(frame_height-1, j);
75、
printf("#");
76、
}垍
77、
for(i=1;i<frame_height-1;i++)
78、
{垍
79、
gotoxy(i, 0);
80、
printf("#");
81、
gotoxy(i, frame_width-1);
82、
printf("#");垍
83、
}
84、
}
85、
//generate food
86、
void update_food()
87、
{
88、
if(snake.x[0]==food.x&&snake.y[0]==food.y)
89、
{
90、
srand(time(NULL));
91、
food.x=rand()%(frame_height-2)+1;
92、
food.y=rand()%(frame_width-2)+1;垍
93、
gotoxy(food.x, food.y);
94、
printf("!");
95、
snake.len++;
96、
grow=1;
97、
}
98、
}
99、
//move snake
100、
void move_snake()
101、
{
102、
if(kbhit())
103、
ch=getch();
104、
if(!grow)
105、
{垍
106、
gotoxy(snake.x[snake.len-1], snake.y[snake.len-1]);
107、
printf(" ");
108、
}
109、
for(k=snake.len-1;k>0;k)
110、
{
111、
snake.x[k]=snake.x[k-1];
112、
snake.y[k]=snake.y[k-1];
113、
}垍
114、
switch(ch)
115、
{垍
116、
case UP: snake.x[0];break;
117、
case DOWN: snake.x[0]++;break;
118、
case LEFT: snake.y[0];break;
119、
case RIGHT: snake.y[0]++;break;
120、
default: break;
121、
}
122、
gotoxy(snake.x[0], snake.y[0]);
123、
printf("@");
124、
grow=0;
125、
gotoxy(frame_height, 0);
126、
}
127、
//is alive
128、
int is_alive(void)
129、
{
130、
if(snake.x[0]==0||snake.x[0]==frame_height-1||snake.y[0]==frame_width-1||snake.y[0]==0)
131、
return 0;
132、
for(k=1;k<snake.len;k++)
133、
if(snake.x[k]==snake.x[0]&&snake.y[k]==snake.y[0])
134、
return 0;
135、
return 1;
136、
}垍
137、
//speed up垍
138、
void get_speed(void)
139、
{
140、
if(snake.len<=6) snake.speed=200;
141、
else if(snake.len<=10) snake.speed=100;
142、
else if(snake.len<=20) snake.speed=50;垍
143、
else if(snake.len<=30) snake.speed=30;
144、
else snake.speed=20;
145、
}垍
146、
//move cursor
147、
void gotoxy(int x, int y)垍
148、
{
149、
HANDLE hout;垍
150、
COORD cor;
151、
hout=GetStdHandle(STD_OUTPUT_HANDLE);
152、
cor.X=y;
153、
cor.Y=x;
154、
SetConsoleCursorPosition(hout,cor);垍
155、
}垍
上一篇:愤世疾俗是什么意思?
下一篇:门禁原理及系统结构?