dfsljkjafdsk; 2022-05-16 23:21 采纳率: 100%
浏览 109
已结题

(编译器vs,基于easyx库)自己写的贪吃蛇C语言代码,能产生三种大小的食物对应1,2,3分,不知道咋添加一个计算分数的功能,计算分数并选出最佳成绩

贪吃蛇C语言代码,目前能选择蛇的三种速度,随机产生三种不同的食物,但是不会添加一个计算分数的功能三种食物对应不同的分数,还能计算出最佳分数的,求解答,急用

img

img

输入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;
}

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2022-05-26 14:13
    关注

    有个类似的,发给你看看。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 修改了问题 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统