简易版贪吃蛇
#include <stdio.h>
#include <string.h>
#include <Windows.h>
#include <time.h>
#include <conio.h>
#define MAPLENGTH 40
#define MAPWIDTH 20
#define MAXSIAE 50
void gotoxy (int x,int y);
void drawmap ();
void createvenom();
void clickcontrol();
void recreatefood();
void recreatevenom();
int snakestatus();
int key = 'w';
int changeflag = 1;
int score = 000;
struct SNAKE
{
int x[MAXSIAE];
int y[MAXSIAE];
int length;
int speed;
}snake;
struct FOOD
{
int x;
int y;
}food;
struct VENOM
{
int a;
int b;
}venom;
int main ()
{
drawmap();
createvenom();
gotoxy(MAPLENGTH + 1,MAPWIDTH + 1);
printf("你的得分:%d",score);
while(1)
{
clickcontrol();
recreatefood();
recreatevenom();
if(!snakestatus())
{
break;
}
}
gotoxy(MAPLENGTH/2,MAPWIDTH/2);
printf("Game Over!\n");
system("pause");
return 0;
}
void drawmap()
{
int i;
for(i = 0;i <= MAPLENGTH;i += 2)
{
gotoxy(i,0);
printf("■");
gotoxy(i,MAPWIDTH);
printf("■");
}
for(i = 0;i <= MAPWIDTH;i++)
{
gotoxy(0,i);
printf("■");
gotoxy(MAPLENGTH,i);
printf("■");
}
srand((unsigned)time(NULL));
food.x = rand()%(MAPLENGTH-2)+1;
food.y = rand()%(MAPWIDTH-2)+1;
gotoxy(food.x,food.y);
printf("$");
snake.length = 5;
snake.speed = 200;
snake.x[0] = MAPLENGTH/2;
snake.y[0] = MAPWIDTH/2;
gotoxy(snake.x[0],snake.y[0]);
printf("@");
for(int j = 1;j <= snake.length - 1;j++)
{
snake.x[j] = snake.x[j-1];
snake.y[j] = snake.y[j-1] + 1;
gotoxy(snake.x[j],snake.y[j]);
printf("@");
}
}
void createvenom()
{
venom.a = rand()%(MAPLENGTH-2)+1;
venom.b = rand()%(MAPWIDTH-2)+1;
gotoxy(venom.a,venom.b);
printf("*");
}
void clickcontrol()
{
if(_kbhit())
{
fflush(stdin);
key = _getch();
}
if(changeflag)
{
gotoxy(snake.x[snake.length - 1],snake.y[snake.length - 1]);
printf(" ");
}
for(int i = snake.length -1;i > 0;i--)
{
snake.x[i] = snake.x[i-1];
snake.y[i] = snake.y[i-1];
}
switch(key)
{
case 'w':
case 'W':
snake.y[0]--;
break;
case 's':
case 'S':
snake.y[0]++;
break;
case 'a':
case 'A':
snake.x[0]--;
break;
case 'd':
case 'D':
snake.x[0]++;
break;
}
gotoxy(snake.x[0],snake.y[0]);
Sleep(snake.speed);
printf("@");
gotoxy(4,4);
}
void recreatefood()
{
if(snake.x[0] == food.x && snake.y[0] == food.y)
{
while(1)
{
int flag = 1;
srand((unsigned)time(NULL));
food.x = rand()%(MAPLENGTH-2) + 1;
food.y = rand()%(MAPWIDTH-2) + 1;
for(int k = 0;k < snake.length;k++)
{
if(snake.x[k] == food.x && snake.y[k] == food.y)
{
flag = 0;
break;
}
}
if(flag)
{
break;
}
}
gotoxy(food.x,food.y);
printf("$");
snake.length++;
score++;
gotoxy(MAPLENGTH + 1,MAPWIDTH + 1);
printf("你的得分:%d",score);
}
}
void recreatevenom()
{
if(snake.x[0] == venom.a && snake.y[0] == venom.b)
{
while(1)
{
int flag = 1;
venom.a = rand()%(MAPLENGTH-2) + 1;
venom.b = rand()%(MAPWIDTH-2) + 1;
for(int k = 0;k < snake.length;k++)
{
if(snake.x[k] == venom.a && snake.y[k] == venom.b)
{
flag = 0;
break;
}
}
if(flag)
{
break;
}
}
gotoxy(venom.a,venom.b);
printf("*");
gotoxy(snake.x[snake.length - 1],snake.y[snake.length - 1]);
snake.length--;
printf(" ");
score--;
gotoxy(MAPLENGTH + 1,MAPWIDTH + 1);
printf("你的得分:%d",score);
}
}
int snakestatus()
{
if(snake.x[0] == 0 || snake.x[0] == MAPLENGTH || snake.y[0] == 0 || snake.y[0] == MAPWIDTH)
return 0;
for(int k = 1;k < snake.length;k++)
{
if(snake.x[0] == snake.x[k] && snake.y[0] == snake.y[k])
return 0;
}
return 1;
}
void gotoxy (int x,int y)
{
COORD pos;
HANDLE handle;
pos.X = x;
pos.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle,pos);
}