#include <stdio.h>
#include <conio.h> // 用于_getch()
#include <windows.h> // 用于Sleep()
#define WIDTH 30
#define HEIGHT 20
#define SNAKE_START_X 5
#define SNAKE_START_Y 5
char board[HEIGHT][WIDTH];
int snakeX[100], snakeY[100]; // 蛇的位置
int foodX, foodY; // 食物的位置
int snakeLength = 1; // 初始蛇长度
int direction = 0; // 初始方向(0=右)
void placeFood() {
do {
foodX = rand() % (WIDTH - 2) + 1;
foodY = rand() % (HEIGHT - 2) + 1;
} while (board[foodY][foodX] != ' ');
board[foodY][foodX] = '.';
}
void setup() {
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
board[i][j] = ' ';
}
}
board[0][0] = '*';
board[HEIGHT - 1][0] = '*';
board[0][WIDTH - 1] = '*';
board[HEIGHT - 1][WIDTH - 1] = '*';
snakeX[0] = SNAKE_START_X;
snakeY[0] = SNAKE_START_Y;
placeFood();
}
void draw() {
system("cls"); // 清屏
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
printf("%c", board[i][j]);
}
printf("\n");
}
}
void moveSnake() {
for (int i = snakeLength; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
switch (direction) {
case 0:
snakeX[0]++;
break;
case 1:
snakeY[0]--;
break;
case 2:
snakeX[0]--;
break;
case 3:
snakeY[0]++;
break;
}
if (snakeX[0] >= WIDTH) snakeX[0] = 1;
if (snakeX[0] < 1) snakeX[0] = WIDTH - 2;
if (snakeY[0] >= HEIGHT) snakeY[0] = 1;
if (snakeY[0] < 1) snakeY[0] = HEIGHT - 2;
}
void updateBoard() {
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
board[i][j] = ' ';
}
}
for (int i = 0; i < snakeLength; i++) {
board[snakeY[i]][snakeX[i]] = '#';
}
board[foodY][foodX] = '.';
}
void checkCollision() {
for (int i = snakeLength; i > 0; i--) {
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
exit(0); // 碰到自己,游戏结束
}
}
}
void checkFood() {
if (snakeX[0] == foodX && snakeY[0] == foodY) {
snakeLength++;
placeFood();
}
}
int main() {
setup();
while (1) {
draw();
moveSnake();
updateBoard();
checkCollision();
checkFood();
Sleep(100); // 控制游戏速度
if (_kbhit()) { // 检查是否有按键按下
switch (_getch()) {
case 'w': direction = 1; break;
case 's': direction = 3; break;
case 'a': direction = 2; break;
case 'd': direction = 0; break;
}
}
}
return 0;
}
04-17
9万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-31
2万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-11
984
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)