C语言实现贪吃蛇游戏代码
简介
贪吃蛇是一种经典的游戏,我们可以使用C语言来实现这个游戏。在这个游戏中,蛇在一个二维平面上移动,吃掉食物来增加长度,如果蛇触碰到了自己或者墙壁,那么游戏就结束了。
实现过程
下面是用C语言实现贪吃蛇游戏的步骤:
-
定义游戏中的基本元素,如蛇、食物、地图等。
-
初始化游戏元素,包括蛇的初始位置、长度和方向,食物的随机位置。
-
创建游戏主循环,通过循环检测用户输入来改变蛇的方向和位置,同时判断蛇是否吃到了食物或者碰到了自己或者墙壁,如果碰到则游戏结束。
-
在蛇移动的过程中,需要更新蛇的位置,同时维护蛇的长度和方向。
-
当蛇吃到了食物时,需要增加蛇的长度,同时重新生成食物的位置。
-
将游戏画面渲染到屏幕上。
-
在游戏结束时,显示得分并询问是否重新开始游戏。
代码示例
下面是一个简单的C语言贪吃蛇游戏代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define SIZE_X 20 // 地图宽度
#define SIZE_Y 20 // 地图高度
int map[SIZE_X][SIZE_Y]; // 地图
int snake_x[SIZE_X * SIZE_Y]; // 蛇的X坐标
int snake_y[SIZE_X * SIZE_Y]; // 蛇的Y坐标
int snake_len; // 蛇的长度
int direction; // 蛇头方向
int food_x, food_y; // 食物位置
// 初始化地图
void initMap() {
for (int i = 0; i < SIZE_X; i++) {
for (int j = 0; j < SIZE_Y; j++) {
if (i == 0 || i == SIZE_X - 1 ||
j == 0 || j == SIZE_Y - 1) {
map[i][j] = -1; // 地图边界
}
else {
map[i][j] = 0; // 空白区域
}
}
}
}
// 输出地图
void showMap() {
for (int i = 0; i < SIZE_X; i++) {
for (int j = 0; j < SIZE_Y; j++) {
if (map[i][j] == -1) {
printf("#"); // 边界
}
else if (map[i][j] == 0) {
printf(" "); // 空白
}
else if (map[i][j] == 1) {
printf("*"); // 蛇身
}
else if (map[i][j] == 2) {
printf("@"); // 食物
}
}
printf("\n");
}
}
// 初始化蛇
void initSnake() {
snake_len = 3;
snake_x[0] = 3;
snake_y[0] = 1;
snake_x[1] = 2;
snake_y[1] = 1;
snake_x[2] = 1;
snake_y[2] = 1;
direction = 3;
}
// 生成食物
void createFood() {
int x, y;
do {
x = rand() % (SIZE_X - 2) + 1;
y = rand() % (SIZE_Y - 2) + 1;
} while (map[x][y] != 0);
food_x = x;
food_y = y;
map[food_x][food_y] = 2;
}
// 主函数
int main() {
srand((unsigned)time(NULL)); // 随机数种子
initMap();
initSnake();
createFood();
map[snake_x[0]][snake_y[0]] = 1;
while (1) {
// 显示游戏画面
system("cls");
showMap();
// 检测用户输入
if (_kbhit()) {
int ch = _getch();
if (ch == 75) { // 左箭头键
if (direction != 2) {
direction = 1;
}
}
else if (ch == 77) { // 右箭头键
if (direction != 1) {
direction = 2;
}
}
else if (ch == 72) { // 上箭头键
if (direction != 4) {
direction = 3;
}
}
else if (ch == 80) { // 下箭头键
if (direction != 3) {
direction = 4;
}
}
}
// 更新蛇的位置
int new_x = snake_x[0], new_y = snake_y[0];
if (direction == 1) { // 左
new_y--;
}
else if (direction == 2) { // 右
new_y++;
}
else if (direction == 3) { // 上
new_x--;
}
else if (direction == 4) { // 下
new_x++;
}
// 检测是否吃到食物
if (new_x == food_x && new_y == food_y) {
snake_len++;
createFood();
}
// 绘制蛇身
for (int i = snake_len - 1; i > 0; i--) {
snake_x[i] = snake_x[i - 1];
snake_y[i] = snake_y[i - 1];
}
// 更新蛇头位置
snake_x[0] = new_x;
snake_y[0] = new_y;
// 检测是否碰到自己或墙壁
if (map[new_x][new_y] == -1 || map[new_x][new_y] == 1) {
printf("GAME OVER.\n");
break;
}
// 绘制蛇头
map[new_x][new_y] = 1;
// 清除蛇尾
map[snake_x[snake_len - 1]][snake_y[snake_len - 1]] = 0;
}
return 0;
}
代码中使用了一个二维数组代表地图,数组的值表示地图上的元素,如-1表示墙壁,0表示空白区域,1表示蛇身,2表示食物。在主函数中,使用了_kbhit
和_getch
函数来获取用户的键盘输入,并通过改变direction
变量来改变蛇的方向。在游戏循环中,每次更新蛇的位置后,需要重新绘制地图上的元素,并且需要检测是否吃到了食物或者碰到了自己或者墙壁。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现贪吃蛇游戏代码 - Python技术站