C语言实现贪吃蛇游戏

贪吃蛇是一款经典的电子游戏,它的目标是控制一条蛇吃掉屏幕上出现的食物,每吃掉一个食物,蛇的长度就会增加,当蛇碰到自己的身体或者屏幕边缘时,游戏结束,在这篇文章中,我们将使用C语言来实现一个简单的贪吃蛇游戏。

我们需要了解贪吃蛇游戏的基本组成部分:

1、蛇:由一系列的方块组成,每个方块代表蛇的一个身体部分,蛇会不断地前进,玩家可以通过键盘控制蛇的方向。

2、食物:随机出现在屏幕上的方块,蛇吃到食物后会变长。

3、地图:游戏的舞台,可以是矩形或者其他形状。

接下来,我们来设计贪吃蛇游戏的算法:

1、初始化:设置蛇的初始位置、长度和方向,生成一个食物并放置在地图上。

2、绘制:根据蛇的位置和方向,绘制蛇的身体和食物。

3、更新:根据玩家的输入,更新蛇的方向,如果蛇头指向食物,那么蛇变长,食物重新生成;否则,蛇继续前进。

4、碰撞检测:检查蛇是否碰到自己的身体或者屏幕边缘,如果是,则游戏结束。

贪吃蛇代码c语言 贪吃蛇代码c语言简单

5、延时:为了控制游戏的帧率,每次更新后需要延时一段时间。

下面是一个简单的贪吃蛇游戏实现:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define WIDTH 20
#define HEIGHT 20
int gameover;
int x, y, fruitx, fruity, score;
int sx[100], sy[100]; // 蛇的身体坐标数组
int ntail; // 蛇的长度
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
enum eDirection dir;
void Setup() {
    gameover = 0;
    dir = STOP;
    x = WIDTH / 2;
    y = HEIGHT / 2;
    fruitx = rand() % WIDTH;
    fruity = rand() % HEIGHT;
    score = 0;
}
void Draw() {
    system("cls"); // 清屏
    for (int i = 0; i < WIDTH + 2; i++) {
        printf("#"); // 绘制地图边界
    }
    printf("
");
    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            if (j == 0) {
                printf("#"); // 绘制地图边界
            } else if (i == y && j == x) { // 绘制蛇头(用@表示)
                printf("@");
            } else if (i == fruity && j == fruitx) { // 绘制食物(用*表示)
                printf("*");
            } else { // 绘制空白格子(用空格表示)
                printf(" ");
            }
        }
        printf("#
"); // 绘制地图边界
    }
    for (int i = 0; i < WIDTH + 2; i++) { // 绘制地图边界下方的分数和信息栏
        printf("#");
    }
    printf("Score: %d", score); // 显示分数
    printf(" Game Over! Press any key to continue..."); // 显示游戏结束信息和提示按键继续的文本框(用空格填充)
}
void Input() {
    if (_kbhit()) { // 如果检测到按键按下事件(非阻塞)
        switch (_getch()) { // 根据按键值改变方向(_getch()函数返回的是按键的ASCII码)
            case 'a': // A键向左移动(LEFT)
                dir = LEFT; break;
            case 'd': // D键向右移动(RIGHT)
                dir = RIGHT; break;
            case 'w': // W键向上移动(UP)
                dir = UP; break;
            case 's': // S键向下移动(DOWN)
                dir = DOWN; break;
            case 'x': // X键退出游戏(STOP)
                gameover = 1; break; // gameover变量为1表示游戏结束(退出循环)
        }
    } else { // 如果未检测到按键按下事件(阻塞),则保持当前方向不变(STOP)