基于C语言实现创意多彩贪吃蛇游戏
游戏规则
贪吃蛇游戏是一款经典的益智游戏,其规则如下:
- 蛇开始时只有一个身体,每当蛇吃到食物时,就会在尾部增加一个身体,同时加分。
- 蛇每格时间会自动向前移动一格,如果碰到边缘或者碰到自己的身体,则游戏结束。
- 为了避免蛇一直沿着一条直线前进导致游戏时间过短,游戏中会随机生成食物,蛇需要不断吃食物才能继续游戏。
游戏实现
在C语言中,可以通过控制台进行游戏实现。你可以借助Windows.h头文件中的ANSI控制台文本属性来实现控制台界面的美化,并使用conio.h头文件中的_getch()来实现键盘输入监听。
以下是一份基于C语言的贪吃蛇游戏实现的代码,供你参考。
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
// 定义控制台窗口大小以及游戏区域的宽高
#define WIDTH 20
#define HEIGHT 20
// 定义全局变量
int snake[500][2], food[2], score, end, direction;
// 初始化程序
void start() {
// 改变控制台窗口大小
system("mode con cols=40 lines=22");
// 隐藏光标
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);
CursorInfo.dwSize = 1;
CursorInfo.bVisible = FALSE;
SetConsoleCursorInfo(handle, &CursorInfo);
// 初始化游戏摆设
int i;
for(i = 0; i < 500; i++){
snake[i][0] = -1;
snake[i][1] = -1;
}
snake[0][0] = 10;
snake[0][1] = 10;
food[0] = -1;
food[1] = -1;
score = 0;
end = 0;
direction = 1;
}
// 在控制台窗口上打印游戏数据
void draw() {
int x, y;
printf("score:%d\n", score);
printf("===================================\n");
for(y = 0; y < HEIGHT; y++) {
printf("|");
for(x = 0; x < WIDTH; x++){
if(snake[0][0] == x && snake[0][1] == y) {
printf("❤");
} else if(snake[y*WIDTH + x][0] != -1) {
printf("()");
} else if(food[0] == x && food[1] == y) {
printf("★");
} else {
printf(" ");
}
}
printf("|\n");
}
printf("===================================\n");
}
// 生成食物
void gen_food() {
if(food[0] == -1) {
int x = rand() % WIDTH;
int y = rand() % HEIGHT;
if(snake[y*WIDTH + x][0] != -1) {
gen_food();
} else {
food[0] = x;
food[1] = y;
}
}
}
// 蛇的移动
void move() {
int x = snake[0][0], y = snake[0][1];
switch(direction) {
case 0://向上
y--;
break;
case 1://向右
x++;
break;
case 2://向下
y++;
break;
case 3://向左
x--;
break;
default:
break;
}
// 判断蛇是否碰到自己的身体
int i;
for(i = 1; i < 500; i++) {
if(snake[i][0] == -1) {
break;
}
if(x == snake[i][0] && y == snake[i][1]) {
end = 1;
return;
}
}
// 判断蛇是否碰到边缘
if(x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) {
end = 1;
return;
}
// 判断蛇是否吃到了食物
if(x == food[0] && y == food[1]) {
score++;
food[0] = -1;
food[1] = -1;
for(i = 1; i < WIDTH*HEIGHT; i++){
if(snake[i][0] == -1){
snake[i][0] = x;
snake[i][1] = y;
return;
}
}
}
// 移动蛇的身体
for(i = 499; i > 0; i--){
if(snake[i][0] != -1){
snake[i][0] = snake[i-1][0];
snake[i][1] = snake[i-1][1];
}
}
// 移动蛇的头部
snake[0][0] = x;
snake[0][1] = y;
}
// 处理键盘事件
void input(){
if(_kbhit()){
switch(_getch()){
case 72://↑
if(direction != 2){
direction = 0;
}
break;
case 77://→
if(direction != 3){
direction = 1;
}
break;
case 80://↓
if(direction != 0){
direction = 2;
}
break;
case 75://←
if(direction != 1){
direction = 3;
}
break;
default:
break;
}
}
}
// 游戏结束
void gameover(){
system("cls");
printf("游戏结束!\n");
printf("score:%d\n", score);
}
int main(){
srand((unsigned)(time(NULL)));
start();
while(!end) {
system("cls");//清除控制台界面
input();
gen_food();
move();
draw();
Sleep(100);
}
gameover();
return 0;
}
示例说明
- 示例1:修改控制台窗口大小
system("mode con cols=40 lines=22");
这条代码可以修改控制台的宽度和高度,使其符合游戏界面的需求。
- 示例2:打印游戏数据
int x, y;
printf("score:%d\n", score);
printf("===================================\n");
for(y = 0; y < HEIGHT; y++) {
printf("|");
for(x = 0; x < WIDTH; x++){
if(snake[0][0] == x && snake[0][1] == y) {
printf("❤");
} else if(snake[y*WIDTH + x][0] != -1) {
printf("()");
} else if(food[0] == x && food[1] == y) {
printf("★");
} else {
printf(" ");
}
}
printf("|\n");
}
printf("===================================\n");
这段代码可以打印出游戏界面的状态,包括贪吃蛇的状态、食物的位置和分数的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C语言实现创意多彩贪吃蛇游戏 - Python技术站