c语言贪吃蛇最简单代码
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#define frame_height 20 //define map size
#define frame_width 40
#define UP w //define operate key
#define DOWN s
#define LEFT a
#define RIGHT d
int i,j,k
char ch=UP //initial direction
int grow=0 //flag: if snake grow
struct Food{
int x
int y
}food
struct Snake{
int x[50]
int y[50]
int len
int speed
}snake //snake[0] is head
void init_map(void)
void update_food(void)
void move_snake(void)
int is_alive(void)
void get_speed(void)
void gotoxy(int x, int y)
int main()
{
init_map() //初始化地图
while(1)
{
update_food() //是否产生食物
get_speed() //获取速度
move_snake() //移动蛇身
Sleep(snake.speed) //移动速度
if(!(is_alive())) //蛇的死活(撞墙或自食)
break
}
printf("Game Over!")
getch()
return 0
}
//initialize
void init_map(void)
{
//initial food
srand(time(NULL))
food.x=rand()%(frame_height-2)+1
food.y=rand()%(frame_width-2)+1
gotoxy(food.x, food.y)
printf("!")
//initial snake
snake.x[0]=frame_height/2
snake.y[0]=frame_width/2
gotoxy(snake.x[0], snake.y[0])
printf("@")
snake.len=3
snake.speed=200
for(k=1k<snake.lenk++)
{
snake.x[k]=snake.x[k-1]+1
snake.y[k]=snake.y[k-1]
gotoxy(snake.x[k], snake.y[k])
printf("@")
}
//initial bar
for(j=0j<frame_widthj++)
{
gotoxy(0, j)
printf("#")
gotoxy(frame_height-1, j)
printf("#")
}
for(i=1i<frame_height-1i++)
{
gotoxy(i, 0)
printf("#")
gotoxy(i, frame_width-1)
printf("#")
}
}
//generate food
void update_food()
{
if(snake.x[0]==food.x&&snake.y[0]==food.y)
{
srand(time(NULL))
food.x=rand()%(frame_height-2)+1
food.y=rand()%(frame_width-2)+1
gotoxy(food.x, food.y)
printf("!")
snake.len++
grow=1
}
}
//move snake
void move_snake()
{
if(kbhit())
ch=getch()
if(!grow)
{
gotoxy(snake.x[snake.len-1], snake.y[snake.len-1])
printf(" ")
}
for(k=snake.len-1k>0k--)
{
snake.x[k]=snake.x[k-1]
snake.y[k]=snake.y[k-1]
}
switch(ch)
{
case UP: snake.x[0]--break
case DOWN: snake.x[0]++break
case LEFT: snake.y[0]--break
case RIGHT: snake.y[0]++break
default: break
}
gotoxy(snake.x[0], snake.y[0])
printf("@")
grow=0
gotoxy(frame_height, 0)
}
//is alive
int is_alive(void)
{
if(snake.x[0]==0||snake.x[0]==frame_height-1||snake.y[0]==frame_width-1||snake.y[0]==0)
return 0
for(k=1k<snake.lenk++)
if(snake.x[k]==snake.x[0]&&snake.y[k]==snake.y[0])
return 0
return 1
}
//speed up
void get_speed(void)
{
if(snake.len<=6) snake.speed=200
else if(snake.len<=10) snake.speed=100
else if(snake.len<=20) snake.speed=50
else if(snake.len<=30) snake.speed=30
else snake.speed=20
}
//move cursor
void gotoxy(int x, int y)
{
HANDLE hout
COORD cor
hout=GetStdHandle(STD_OUTPUT_HANDLE)
cor.X=y
cor.Y=x
SetConsoleCursorPosition(hout,cor)
}