这一行有错误SNAKE_LEN++;
时间: 2023-08-06 19:06:54 浏览: 93
非常抱歉,这是我的疏忽,确实有错误。在代码中,当蛇吃到食物时,应该将蛇的长度增加,而不是增加 `SNAKE_LEN` 这个宏定义的值。因此,应该将代码中的 `SNAKE_LEN++` 改为 `++SNAKE_LEN`,或者是在 `moveSnake()` 函数中增加一个变量来表示蛇的长度。
改正后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define WIDTH 50
#define HEIGHT 20
#define SNAKE_LEN 5
int score = 0; // 得分
int speed = 150; // 速度
int x, y; // 食物坐标
int gameOver = 0; // 游戏结束标志
int direction = 'd'; // 蛇的运动方向
// 定义蛇的结构体
struct Snake {
int x;
int y;
}snake[SNAKE_LEN];
// 初始化蛇
void initSnake() {
for (int i = 0; i < SNAKE_LEN; i++) {
snake[i].x = WIDTH / 2 + i;
snake[i].y = HEIGHT / 2;
}
}
// 画出游戏界面
void draw() {
// 清屏
system("cls");
// 画上边框
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
// 画中间部分
for (int i = 0; i < HEIGHT; i++) {
printf("#");
for (int j = 0; j < WIDTH; j++) {
if (i == snake[0].y && j == snake[0].x) {
printf("O");
} else if (i == y && j == x) {
printf("$");
} else {
int flag = 0;
for (int k = 1; k < SNAKE_LEN; k++) {
if (i == snake[k].y && j == snake[k].x) {
flag = 1;
printf("o");
break;
}
}
if (flag == 0) {
printf(" ");
}
}
}
printf("#\n");
}
// 画下边框
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
// 输出得分
printf("Score: %d\n", score);
}
// 生成食物
void generateFood() {
srand((unsigned)time(NULL));
x = rand() % (WIDTH - 2) + 1;
y = rand() % (HEIGHT - 2) + 1;
}
// 处理键盘输入
void processInput() {
if (kbhit()) {
char ch = getch();
if (ch == 'w' || ch == 'a' || ch == 's' || ch == 'd') {
if ((direction == 'w' && ch != 's') || (direction == 's' && ch != 'w') || (direction == 'a' && ch != 'd') || (direction == 'd' && ch != 'a')) {
direction = ch;
}
}
}
}
// 移动蛇
void moveSnake() {
int tailX = snake[SNAKE_LEN - 1].x;
int tailY = snake[SNAKE_LEN - 1].y;
for (int i = SNAKE_LEN - 1; i > 0; i--) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
switch (direction) {
case 'w':
snake[0].y--;
break;
case 's':
snake[0].y++;
break;
case 'a':
snake[0].x--;
break;
case 'd':
snake[0].x++;
break;
default:
break;
}
// 判断是否撞墙或撞自己
if (snake[0].x == 0 || snake[0].x == WIDTH - 1 || snake[0].y == 0 || snake[0].y == HEIGHT - 1) {
gameOver = 1;
}
for (int i = 1; i < SNAKE_LEN; i++) {
if (snake[0].x == snake[i].x && snake[0].y == snake[i].y) {
gameOver = 1;
}
}
// 判断是否吃到食物
if (snake[0].x == x && snake[0].y == y) {
score += 10;
snake[SNAKE_LEN].x = tailX;
snake[SNAKE_LEN].y = tailY;
++SNAKE_LEN;
generateFood();
}
}
// 主函数
int main() {
initSnake();
generateFood();
while (!gameOver) {
draw();
processInput();
moveSnake();
Sleep(speed);
}
printf("Game Over!\n");
system("pause");
return 0;
}
```
感谢您的指正!
阅读全文