欢迎大家进群一起学习,qq群3:646052087
网盘资料:链接:https://pan.baidu.com/s/1odgbx4gxSKqBkispTBxthg
提取码:vi74
对于一门计算机语言,掌握了它的基本语法、函数、用法,只能说了解这么语言;要想入门C语言,还需要我们在项目实践中多写、多改、多磨合。实践中,我们要多实用结构体、共用体、指针这些C语言中的精髓。
传统的单机小游戏,大家可以学习一下。不夸张的说,所有的游戏都可以用C语言实现,只不过没人这么做罢了,使用高级语言在游戏制作过程中可以事半功倍。早期大家所熟知的俄罗斯方块、推箱子、贪吃蛇这类单机小游戏,都是用C语言编写的。
为了更深入的学习C语言,达到学以致用的目的,本人编写了贪吃蛇的纯C小游戏,供大家学习。
贪吃蛇小游戏包含了:结构体,函数的定义及调用,指针变量,指针和数组,逻辑表达式,基本的选择和循环语句,头文件的编写等。
基本思想就是,先建立贪吃蛇背景,在背景里嵌入贪吃蛇,使贪吃蛇每一个周期行进一步,蛇没吃一个,身长加一,用WASD控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
在codeblocks中新建工程snake,要实现贪吃蛇游戏,第一步得有背景,我们这里定义长20宽60的背景:
#define HEIGHT 20//定义背景高度
#define WIDTH 60//定义背景宽度
char game_desk[HEIGHT][WIDTH];//背景变量
定义贪吃蛇身体的结构体,需包含蛇身的数量、蛇头的xy坐标,
struct snake
{
int number;//蛇身数量
int snake_x;//蛇头的x坐标
int snake_y;//蛇头的y坐标
};
将背景变量赋值,即实现背景,顶端和低端使用“-”,左右两端使用“|”,组成贪吃蛇可以行走的边界,同时将食物($)和蛇(@)赋值到显示背景变量中。
void newinterface(struct snake *snake, int fx, int fy,int s)
{
int x, y;
for (int i = 0; i < HEIGHT; i++)//赋值边框和食物
{
for (int j = 0; j < WIDTH; j++)
{
if (i == 0 || i == HEIGHT - 1)
game_desk[i][j] = '-';
else if (j == 0)
game_desk[i][j] = '|';
else if (j == WIDTH - 1)
game_desk[i][j] = '|';
else if (i == fy && j == fx)
game_desk[i][j] = '$';
else
game_desk[i][j] = ' ';
}
}
for (; s >= 0; s--)//赋值贪吃蛇
{
x = (snake + s)->snake_x;
y = (snake + s)->snake_y;
game_desk[y][x] = '@';
}
}
贪吃蛇是如何运动的,定义贪吃蛇的方向(上下左右),每一步,蛇头按方向移动到下一位置;后面的每一节身躯结构体赋值前一节身躯结构体:
void generate_snake(struct snake *snake,int s,int *sx,int *sy)
{
for (int i = s; i >= 0; i--)
{
if (i == 0)//蛇头按方向移动一格
{
(snake + i)->number = i;
(snake + i)->snake_x = *sx;
(snake + i)->snake_y = *sy;
}
else//身躯挪动一格
{
(snake + i)->number = i;
(snake + i)->snake_x = (snake + i - 1)->snake_x;
(snake + i)->snake_y &