c语言贪吃蛇最简单代码

以下是一个简单的C语言贪吃蛇游戏的代码示例。

c
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define WIDTH 20 #define HEIGHT 10 int gameOver; int score; int snakeLength; int snakeX[100], snakeY[100]; int fruitX, fruitY; enum Direction { UP, DOWN, LEFT, RIGHT }; enum Direction direction; void setup() { gameOver = 0; score = 0; snakeLength = 1; snakeX[0] = WIDTH / 2; snakeY[0] = HEIGHT / 2; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; direction = RIGHT; } 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 isBodyPart = 0; for (int k = 1; k < snakeLength; k++) { if (snakeX[k] == j && snakeY[k] == i) { printf("o"); isBodyPart = 1; } } if (!isBodyPart) printf(" "); } if (j == WIDTH - 1) printf("#"); } printf("\n"); } for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); printf("Score: %d\n", score); } void input() { if (_kbhit()) { switch (_getch()) { case 'w': direction = UP; break; case 's': direction = DOWN; break; case 'a': direction = LEFT; break; case 'd': direction = RIGHT; break; case 'x': gameOver = 1; break; } } } void algorithm() { int prevX = snakeX[0]; int prevY = snakeY[0]; int prev2X, prev2Y; snakeX[0] = (snakeX[0] + WIDTH) % WIDTH; snakeY[0] = (snakeY[0] + HEIGHT) % HEIGHT; 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 UP: snakeY[0]--; break; case DOWN: snakeY[0]++; break; case LEFT: snakeX[0]--; break; case RIGHT: snakeX[0]++; break; } if (snakeX[0] == fruitX && snakeY[0] == fruitY) { score += 10; snakeLength++; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; } } int main() { setup(); while (!gameOver) { draw(); input(); algorithm(); } return 0; }

这个代码使用了conio.h头文件,这在某些编译器上可能不受支持。如果无法使用conio.h,你可能需要考虑其他方法来获取键盘输入。此外,

在上面的代码中,使用了conio.h头文件中的_kbhit_getch函数来检测键盘输入,以及获取按键值。由于conio.h不是标准C头文件,因此在一些编译器中可能无法使用。

如果你遇到了编译器不支持conio.h的问题,可以考虑使用其他方法来处理键盘输入,例如使用标准的stdio.h头文件中的getchar函数。

c
#include <stdio.h> #include <stdlib.h> #define WIDTH 20 #define HEIGHT 10 int gameOver; int score; int snakeLength; int snakeX[100], snakeY[100]; int fruitX, fruitY; enum Direction { UP, DOWN, LEFT, RIGHT }; enum Direction direction; void setup() { gameOver = 0; score = 0; snakeLength = 1; snakeX[0] = WIDTH / 2; snakeY[0] = HEIGHT / 2; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; direction = RIGHT; } 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 isBodyPart = 0; for (int k = 1; k < snakeLength; k++) { if (snakeX[k] == j && snakeY[k] == i) { printf("o"); isBodyPart = 1; } } if (!isBodyPart) printf(" "); } if (j == WIDTH - 1) printf("#"); } printf("\n"); } for (int i = 0; i < WIDTH + 2; i++) printf("#"); printf("\n"); printf("Score: %d\n", score); } void input() { char c = getchar(); switch (c) { case 'w': direction = UP; break; case 's': direction = DOWN; break; case 'a': direction = LEFT; break; case 'd': direction = RIGHT; break; case 'x': gameOver = 1; break; } } void algorithm() { int prevX = snakeX[0]; int prevY = snakeY[0]; int prev2X, prev2Y; snakeX[0] = (snakeX[0] + WIDTH) % WIDTH; snakeY[0] = (snakeY[0] + HEIGHT) % HEIGHT; 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 UP: snakeY[0]--; break; case DOWN: snakeY[0]++; break; case LEFT: snakeX[0]--; break; case RIGHT: snakeX[0]++; break; } if (snakeX[0] == fruitX && snakeY[0] == fruitY) { score += 10; snakeLength++; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; } } int main() { setup(); while (!gameOver) { draw(); input(); algorithm(); } return 0; }

此版本使用getchar函数来获取用户输入,从而避免了使用conio.h头文件。这使得代码更加兼容,并能在更多的编译器环境中运行。