117.info
人生若只如初见

C语言实现贪吃蛇代码怎么写

这是一个简单的C语言贪吃蛇游戏的代码示例:

#include 
#include 
#include 

#define WIDTH 20
#define HEIGHT 20

int snakeX[100], snakeY[100];
int snakeLength = 1;
int fruitX, fruitY;
int score = 0;
int gameover = 0;
char direction = 'r';

void setup() {
    snakeX[0] = WIDTH / 2;
    snakeY[0] = HEIGHT / 2;

    fruitX = rand() % WIDTH;
    fruitY = rand() % HEIGHT;
}

void draw() {
    system("cls");

    for (int i = 0; i < WIDTH + 2; i++)
        printf("#");
    printf("\n");

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            if (j == 0)
                printf("#");

            if (i == snakeY[0] && j == snakeX[0])
                printf("O");
            else if (i == fruitY && j == fruitX)
                printf("F");
            else {
                int printSnake = 0;
                for (int k = 1; k < snakeLength; k++) {
                    if (i == snakeY[k] && j == snakeX[k]) {
                        printf("o");
                        printSnake = 1;
                    }
                }
                if (!printSnake)
                    printf(" ");
            }

            if (j == WIDTH - 1)
                printf("#");
        }
        printf("\n");
    }

    for (int i = 0; i < WIDTH + 2; i++)
        printf("#");
    printf("\n");

    printf("Score: %d", score);
}

void input() {
    if (_kbhit()) {
        switch (_getch()) {
        case 'a':
            direction = 'l';
            break;
        case 'd':
            direction = 'r';
            break;
        case 'w':
            direction = 'u';
            break;
        case 's':
            direction = 'd';
            break;
        case 'x':
            gameover = 1;
            break;
        }
    }
}

void logic() {
    int prevX = snakeX[0];
    int prevY = snakeY[0];
    int prev2X, prev2Y;
    snakeX[0] = snakeX[0] + 1;
    snakeY[0] = snakeY[0] + 1;
    for (int i = 1; i < snakeLength; i++) {
        prev2X = snakeX[i];
        prev2Y = snakeY[i];
        snakeX[i] = prevX;
        snakeY[i] = prevY;
        prevX = prev2X;
        prevY = prev2Y;
    }

    switch (direction) {
    case 'l':
        snakeX[0]--;
        break;
    case 'r':
        snakeX[0]++;
        break;
    case 'u':
        snakeY[0]--;
        break;
    case 'd':
        snakeY[0]++;
        break;
    }

    if (snakeX[0] == fruitX && snakeY[0] == fruitY) {
        score += 10;
        snakeLength++;
        fruitX = rand() % WIDTH;
        fruitY = rand() % HEIGHT;
    }

    if (snakeX[0] >= WIDTH || snakeX[0] < 0 || snakeY[0] >= HEIGHT || snakeY[0] < 0)
        gameover = 1;

    for (int i = 1; i < snakeLength; i++) {
        if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i])
            gameover = 1;
    }
}

int main() {
    setup();
    while (!gameover) {
        draw();
        input();
        logic();
        Sleep(100);
    }

    return 0;
}

请注意,这只是一个简单版本的贪吃蛇游戏,可能还需要进一步优化和完善。您可以根据自己的需求进行修改和扩展。

未经允许不得转载 » 本文链接:https://www.117.info/ask/feab8AzsICA5QAF0.html

推荐文章

  • C语言实现radon变换

    C语言实现Radon变换的基本步骤如下: 定义输入图像的尺寸和投影角度的范围。
    为输入图像创建一个二维数组,并初始化为0。
    循环遍历每个投影角度,并相...

  • c语言之assert()函数用法总结

    assert()函数是C语言中的一个宏,用于在程序中插入调试断言。它的主要作用是在程序中检查一个条件是否为真,如果条件为假,则终止程序的执行,并在标准错误流中输...

  • ​c语言如何修改button的位置

    在C语言中,要修改按钮的位置,需要使用相应的库来绘制图形界面。常用的库包括Windows API、GTK+、Qt等。
    以使用Windows API为例,可以按照以下步骤来修改按...

  • c语言button的用法是什么

    在C语言中,button是指用于处理和控制用户界面的按钮。一个按钮可以被点击,以触发相关的操作或事件。
    要在C语言中使用按钮,需要以下步骤: 首先,需要导入...

  • Android动画之TranslateAnimation怎么使用

    TranslateAnimation是Android系统提供的一种平移动画效果,可以让View在屏幕上沿着指定的路径移动。下面是使用TranslateAnimation的步骤: 创建TranslateAnimati...

  • javascript中history.go()和History.back()有什么区别

    history.go()方法用于在浏览器历史记录中向前或向后跳转指定的步数。参数为正数时向前跳转,为负数时向后跳转。
    而History.back()方法则是用于返回到浏览器...

  • 批处理BAT脚本中set命令怎么使用

    在批处理BAT脚本中,set命令用于设置环境变量或者给变量赋值。下面是一些set命令的用法示例: 设置环境变量: set MYVAR=value 显示所有环境变量: set 显示指定...

  • C#中Write()和WriteLine()的区别是什么

    Write()和WriteLine()都是用于输出文本到控制台的方法,它们的区别在于: Write()方法在输出文本后不会自动换行,而是在同一行继续输出后续文本。
    WriteLin...