贪吃蛇C语言代码,目前能选择蛇的三种速度,随机产生三种不同的食物,但是不会添加一个计算分数的功能三种食物对应不同的分数,还能计算出最佳分数的,求解答,急用
输入2 2回车即可运行
我的代码如下:
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
typedef struct point {
int x, y;
}MYPOINT;
struct Snake
{
MYPOINT xy[50];
int position;
int num;
}snake;
struct Food
{
MYPOINT fdxy;
int flag;
int grade;
}food;
enum position { up, down, left, right };
void initSnake()
{
snake.xy[0].x = 0;
snake.xy[0].y = 0;
snake.xy[1].x = 10;
snake.xy[1].y = 0;
snake.xy[2].x = 20;
snake.xy[2].y = 0;
snake.position = right;
snake.num = 3;
}
void drawsnake()
{
for (int i = 0; i < snake.num; i++)
{
setlinecolor(BLACK);
setfillcolor(RGB(190, 200, 230));
fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);
}
}
void moveSnake()
{
for (int i = snake.num; i > 0; i--)
{
snake.xy[i].x = snake.xy[i - 1].x;
snake.xy[i].y = snake.xy[i - 1].y;
}
switch (snake.position)
{
case up:snake.xy[0].y = snake.xy[0].y - 10; break;
case down:snake.xy[0].y = snake.xy[0].y + 10; break;
case left:snake.xy[0].x = snake.xy[0].x - 10; break;
case right:snake.xy[0].x = snake.xy[0].x + 10; break;
}
}
void keydown()
{
char key = _getch();
switch (key)
{
case 'w':
if (snake.position != down)
snake.position = up; break;
case 'W': if (snake.position != down)
snake.position = up; break;
case 's':
if (snake.position != up)
snake.position = down; break;
case 'S':
if (snake.position != up)
snake.position = down; break;
case 'a':if (snake.position != right)
snake.position = left; break;
case 'A':if (snake.position != right)
snake.position = left; break;
case 'd':if (snake.position != left)
snake.position = right; break;
case 'D':if (snake.position != left)
snake.position = right; break;
default:
break;
}
}
void initFood(int a, int b)
{
food.fdxy.x = rand() % a * 10;
food.fdxy.y = rand() % b * 10;
food.flag = 1;
for (int i = 0; i < snake.num; i++)
{
if (food.fdxy.x == snake.xy[i].x && food.fdxy.y == snake.xy[i].y)
{
food.fdxy.x = rand() % a * 10;
food.fdxy.y = rand() % b * 10;
}
}
}
void drawfood(int b)
{
setlinecolor(RED);
setfillcolor(RGB(0, 0, 0));
fillrectangle(food.fdxy.x, food.fdxy.y, food.fdxy.x + b * 10, food.fdxy.y + b * 10);
}
void eatfood()
{
if (snake.xy[0].x == food.fdxy.x && snake.xy[0].y == food.fdxy.y)
{
snake.num++;
food.flag = 0;
food.grade += 10;
}
}
int die(int x, int y)
{
if (snake.xy[0].x > x * 10 || snake.xy[0].x<0 || snake.xy[0].y > y * 10 || snake.xy[0].y < 0)
{
return 1;
}
}
int main()
{
srand((unsigned int)time(NULL));
printf("请选择边框大小\n");
printf("请选择速度\n");
int a, s, x, y;
scanf_s("%d %d", &a, &s);
switch (a)
{
case 1:x = 60; y = 40; initgraph(400, 300); setbkcolor(RGB(110, 120, 130)); cleardevice(); break;
case 2:x = 80; y = 60; initgraph(800, 600); setbkcolor(RGB(110, 120, 130)); cleardevice(); break;
case 3:x = 100; y = 80; initgraph(1000, 800); setbkcolor(RGB(110, 120, 130)); cleardevice(); break;
default:
break;
}
switch (s)
{
case 1:s = 50; break;
case 2:s = 100; break;
case 3:s = 200; break;
default:
break;
}
int i = 0;
initSnake();
drawsnake();
int b = 1;
while (1)
{
cleardevice();
moveSnake();
drawsnake();
if (food.flag == 0)
{
initFood(x, y);
}
if (_kbhit())
{
keydown();
}
int k = die(x, y);
if (k)
{
printf("游戏结束");
break;
}
drawfood(b);
eatfood();
if (food.flag == 0)
{
b = rand() % 3 + 1;
}
Sleep(s);
}
_getch();
closegraph();
return 0;
}