使用c语言写一个贪吃蛇大作战
时间: 2023-09-04 11:07:23 浏览: 112
基于C语言的贪吃蛇大作战游戏源码.zip
写一个完整的贪吃蛇大作战游戏需要大量的代码和图形界面的支持,如果你想要学习的话,可以先从简单的贪吃蛇游戏开始入手。
以下是一个简单的贪吃蛇游戏的代码示例,可以作为参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define ROW 20 // 地图行数
#define COL 30 // 地图列数
int map[ROW][COL]; // 地图数组,存储各个位置的状态
int snake[ROW*COL][2]; // 贪吃蛇数组,存储各个结点的位置
int length = 3; // 贪吃蛇的长度
int direction = 3; // 贪吃蛇的方向,1表示上,2表示下,3表示左,4表示右
int food_x, food_y; // 食物的位置
void init_map() // 初始化地图
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1)
{
map[i][j] = -1; // 边界
}
else
{
map[i][j] = 0; // 空白区域
}
}
}
}
void init_snake() // 初始化贪吃蛇
{
int x = ROW / 2, y = COL / 2;
snake[0][0] = x, snake[0][1] = y;
map[x][y] = 1; // 贪吃蛇的头部
for (int i = 1; i < length; i++)
{
snake[i][0] = x, snake[i][1] = ++y;
map[x][y] = 2; // 贪吃蛇的身体
}
}
void create_food() // 随机生成食物
{
srand(time(NULL));
do
{
food_x = rand() % (ROW - 2) + 1;
food_y = rand() % (COL - 2) + 1;
} while (map[food_x][food_y] != 0);
map[food_x][food_y] = -2; // 食物
}
void show() // 显示地图和贪吃蛇
{
system("cls"); // 清屏
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
switch (map[i][j])
{
case -1:
printf("#"); // 边界
break;
case 0:
printf(" "); // 空白区域
break;
case 1:
printf("O"); // 贪吃蛇的头部
break;
case 2:
printf("o"); // 贪吃蛇的身体
break;
case -2:
printf("*"); // 食物
break;
}
}
printf("\n");
}
}
void move() // 移动贪吃蛇
{
int x = snake[0][0], y = snake[0][1];
map[x][y] = 0; // 去掉原来的头部
switch (direction)
{
case 1:
x--;
break;
case 2:
x++;
break;
case 3:
y--;
break;
case 4:
y++;
break;
}
if (map[x][y] == -2) // 吃到食物
{
length++;
snake[length - 1][0] = x, snake[length - 1][1] = y;
map[x][y] = 1;
create_food();
}
else if (map[x][y] == 0) // 移动到空白区域
{
for (int i = length - 1; i > 0; i--)
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
snake[0][0] = x, snake[0][1] = y;
map[x][y] = 1;
}
else // 撞到边界或自己的身体
{
printf("Game Over!\n");
exit(0);
}
}
void control() // 控制贪吃蛇的方向
{
if (_kbhit())
{
int key = _getch();
switch (key)
{
case 72:
if (direction != 2)
direction = 1;
break;
case 80:
if (direction != 1)
direction = 2;
break;
case 75:
if (direction != 4)
direction = 3;
break;
case 77:
if (direction != 3)
direction = 4;
break;
}
}
}
int main()
{
init_map();
init_snake();
create_food();
while (1)
{
show();
move();
control();
Sleep(100); // 控制游戏速度
}
return 0;
}
```
这个代码示例使用了 Windows.h 头文件中的 Sleep 函数来控制游戏速度,需要在 Windows 环境下运行。代码中使用了 map 数组来存储地图,snake 数组来存储贪吃蛇,length 变量来存储贪吃蛇的长度,direction 变量来存储贪吃蛇的方向,food_x 和 food_y 变量来存储食物的位置。在 main 函数中,先进行初始化,然后进入游戏循环,每次循环先显示地图和贪吃蛇,然后移动贪吃蛇,接着根据键盘输入来控制贪吃蛇的方向,最后控制游戏速度并进入下一轮循环。
阅读全文