//贪吃蛇
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#define SIZEMAX100
#define SNAKELEN10
#define SPEED100
typedef enum
{
left, right, up, down
}DIR;
typedef struct
{
int x;
int y;
}COOR;
struct FOOD
{
COOR crd;
int flag;
}food;
struct SNAKE
{
COOR crd[SIZEMAX];
int node;
DIR dir;
}snake;
int speed = SPEED;
void init();
void setfoodcrd();
void showfood();
void snakemove();
void judgeslod();
void judgesef();
void showsnake();
void changeskdir();
void gameover();
void main()
{
init();
while (1)
{
while (!_kbhit())
{
if (!food.flag)
{
setfoodcrd();
}
showfood();
judgeslod();
judgesef();
snakemove();
Sleep(speed);
}
changeskdir();
}
}
void init()
{
initgraph(640, 480);
srand(time(NULL));
food.flag = 0;
snake.crd[0].x = 0 + SNAKELEN;
snake.crd[0].y = 0;
snake.crd[1].x = 0;
snake.crd[1].y = 0;
snake.node = 2;
snake.dir = right;
}
void setfoodcrd()
{
food.crd.x = rand() % (600 / SNAKELEN) * SNAKELEN;
food.crd.y = rand() % (480 / SNAKELEN) * SNAKELEN;
food.flag = 1;
}
void showfood()
{
rectangle(food.crd.x, food.crd.y, food.crd.x + SNAKELEN, food.crd.y + SNAKELEN);
}
void snakemove()
{
int i; for (i = snake.node; i>0; i--)
{
snake.crd[i].x = snake.crd[i - 1].x;
snake.crd[i].y = snake.crd[i - 1].y;
}
switch (snake.dir)
{
case up:
snake.crd[0].y -= SNAKELEN;
break;
case down:
snake.crd[0].y += SNAKELEN;
break;
case left:
snake.crd[0].x -= SNAKELEN;
break;
case right:
snake.crd[0].x += SNAKELEN;
} showsnake();
}
void judgeslod()
{
int i;
if (snake.crd[0].x<0 || snake.crd[0].x >= 640 ||
snake.crd[0].y<0 || snake.crd[0].y >= 480)
{
gameover();
getchar();
exit(0);
}
for (i = snake.node - 1; i>0; i--)
{
if (snake.crd[0].x == snake.crd[i].x && snake.crd[0].y == snake.crd[i].y)
{
gameover();
getchar();
exit(0);
}
}
}
void judgesef()
{
if (snake.crd[0].x == food.crd.x && snake.crd[0].y == food.crd.y)
{
snake.node++;
setcolor(BLACK);
rectangle(food.crd.x, food.crd.y, food.crd.x + SNAKELEN, food.crd.y + SNAKELEN);
setcolor(WHITE);
food.flag = 0;
}
}
void showsnake()
{
int i;
for (i = snake.node - 1; i >= 0; i--)
{
rectangle(snake.crd[i].x, snake.crd[i].y, snake.crd[i].x + SNAKELEN, snake.crd[i].y + SNAKELEN);
}
setcolor(BLACK);
rectangle(snake.crd[snake.node].x, snake.crd[snake.node].y, snake.crd[snake.node].x + SNAKELEN, snake.crd[snake.node].y + SNAKELEN);
setcolor(WHITE);
rectangle(snake.crd[snake.node - 1].x, snake.crd[snake.node - 1].y, snake.crd[snake.node - 1].x + SNAKELEN, snake.crd[snake.node - 1].y + SNAKELEN);
}
void changeskdir()
{
char key;
key = _getch();
switch (key)
{
case 'w':
case 'W':
case 72:
if (snake.dir != down)
{
snake.dir = up;
}
break;
case 's':
case 'S':
case 80:
if (snake.dir != up)
{
snake.dir = down;
}
break;
case 'a':
case 'A':
case 75:
if (snake.dir != right)
{
snake.dir = left;
}
break;
case 'd':
case 'D':
case 77:
if (snake.dir != left)
{
snake.dir = right;
}
break;
}
}
void gameover()
{
closegraph();
printf("game over!\n");
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!