贪吃蛇游戏c源代码
时间: 2023-09-09 20:06:27 浏览: 79
贪吃蛇游戏C语言源代码
以下是一个简单的贪吃蛇游戏的 C 语言源代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define SNAKE_MAX_LENGTH 100 // 贪吃蛇最大长度
#define GAME_AREA_WIDTH 80 // 游戏区域宽度
#define GAME_AREA_HEIGHT 25 // 游戏区域高度
#define GAME_AREA_LEFT 0 // 游戏区域左边界
#define GAME_AREA_RIGHT (GAME_AREA_WIDTH - 1) // 游戏区域右边界
#define GAME_AREA_TOP 0 // 游戏区域上边界
#define GAME_AREA_BOTTOM (GAME_AREA_HEIGHT - 1) // 游戏区域下边界
#define SNAKE_INIT_LENGTH 3 // 贪吃蛇初始长度
#define FOOD_MAX_NUM 5 // 食物最大数量
// 游戏区域
char game_area[GAME_AREA_HEIGHT][GAME_AREA_WIDTH];
// 贪吃蛇
int snake_x[SNAKE_MAX_LENGTH], snake_y[SNAKE_MAX_LENGTH];
int snake_length;
// 食物
int food_x[FOOD_MAX_NUM], food_y[FOOD_MAX_NUM];
int food_num;
// 隐藏光标
void hide_cursor() {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
// 设置光标位置
void set_cursor_pos(int x, int y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
// 获得随机数
int get_random(int min, int max) {
return min + rand() % (max - min + 1);
}
// 初始化游戏区域
void init_game_area() {
int i, j;
// 初始化游戏区域
for (i = 0; i < GAME_AREA_HEIGHT; i++) {
for (j = 0; j < GAME_AREA_WIDTH; j++) {
if (i == GAME_AREA_TOP || i == GAME_AREA_BOTTOM || j == GAME_AREA_LEFT || j == GAME_AREA_RIGHT) {
game_area[i][j] = '#';
} else {
game_area[i][j] = ' ';
}
}
}
}
// 初始化贪吃蛇
void init_snake() {
int i;
// 初始化贪吃蛇
snake_length = SNAKE_INIT_LENGTH;
for (i = 0; i < snake_length; i++) {
snake_x[i] = GAME_AREA_LEFT + snake_length - i - 1;
snake_y[i] = GAME_AREA_TOP + 1;
game_area[snake_y[i]][snake_x[i]] = '*';
}
}
// 初始化食物
void init_food() {
int i;
// 初始化食物
food_num = 0;
for (i = 0; i < FOOD_MAX_NUM; i++) {
food_x[i] = get_random(GAME_AREA_LEFT + 1, GAME_AREA_RIGHT - 1);
food_y[i] = get_random(GAME_AREA_TOP + 1, GAME_AREA_BOTTOM - 1);
game_area[food_y[i]][food_x[i]] = '@';
food_num++;
}
}
// 显示游戏区域
void show_game_area() {
int i, j;
// 显示游戏区域
for (i = 0; i < GAME_AREA_HEIGHT; i++) {
set_cursor_pos(GAME_AREA_LEFT, i);
for (j = 0; j < GAME_AREA_WIDTH; j++) {
printf("%c", game_area[i][j]);
}
}
}
// 移动贪吃蛇
void move_snake(int dx, int dy) {
int i;
// 移动贪吃蛇
for (i = snake_length - 1; i > 0; i--) {
snake_x[i] = snake_x[i - 1];
snake_y[i] = snake_y[i - 1];
}
snake_x[0] += dx;
snake_y[0] += dy;
// 判断是否吃到食物
for (i = 0; i < food_num; i++) {
if (snake_x[0] == food_x[i] && snake_y[0] == food_y[i]) {
food_x[i] = get_random(GAME_AREA_LEFT + 1, GAME_AREA_RIGHT - 1);
food_y[i] = get_random(GAME_AREA_TOP + 1, GAME_AREA_BOTTOM - 1);
game_area[food_y[i]][food_x[i]] = '@';
snake_length++;
}
}
// 判断是否撞到边界或自身
if (snake_x[0] == GAME_AREA_LEFT || snake_x[0] == GAME_AREA_RIGHT || snake_y[0] == GAME_AREA_TOP || snake_y[0] == GAME_AREA_BOTTOM) {
exit(0);
}
for (i = 1; i < snake_length; i++) {
if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {
exit(0);
}
}
// 更新游戏区域
for (i = 0; i < GAME_AREA_HEIGHT; i++) {
memset(game_area[i], ' ', GAME_AREA_WIDTH);
}
for (i = 0; i < snake_length; i++) {
game_area[snake_y[i]][snake_x[i]] = '*';
}
for (i = 0; i < food_num; i++) {
game_area[food_y[i]][food_x[i]] = '@';
}
}
// 主函数
int main() {
int dx, dy;
hide_cursor();
srand((unsigned)time(NULL));
init_game_area();
init_snake();
init_food();
show_game_area();
while (1) {
if (_kbhit()) {
switch (_getch()) {
case 'a': dx = -1; dy = 0; break;
case 'd': dx = 1; dy = 0; break;
case 'w': dx = 0; dy = -1; break;
case 's': dx = 0; dy = 1; break;
}
} else {
dx = 0; dy = 0;
}
move_snake(dx, dy);
show_game_area();
Sleep(100);
}
return 0;
}
```
注意,这个源代码不是完整的程序,只是一个简单的代码示例,需要自己根据需求进行修改和完善。
阅读全文