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头文件。这使得代码更加兼容,并能在更多的编译器环境中运行。