上一周博主痴迷于贪吃蛇游戏的制作。
虽说这是一项软导作业,而且只让简单写出操作思想就好
但博主死性不改非要做到最好。
简单地从网上大神的作品中学习到了轮廓,然后自己动手打了一遍码,学到了不少代码黑科技,可惜用C/C++要想实现kbhit()函数(无等待键盘输入)只找到了windows的解决方案,并没有找到mac OS X系统下的类似函数。
传统贪吃蛇的原理是通过系统刷屏system(”clr”)和kbhit()、_getch()两个函数的配合实现的,具有人为操作功能。
另外新用到的windows坐标打印函数COORD还有延迟函数Sleep()。
void sleep(){
for (int i=1;i<=100000;i++){
for (int n=1;n<=1000000;n++);
}
在mac环境下可用这个套用循环来实现延迟功能,刷屏函数为system(”clear”)
在《Coder.@的奇幻冒险》中允许穿墙,蛇的速度会随着游戏吃的食物的增多而不断加快,另外设置了11个等级供玩家选择,其中游戏难度设置的函数代码如下:
//初始化x为难度等级
snake->speed=560-x*50;
//进程中的游戏难度增加count为吃的$数
if (snake->count % 10 == 0) {
if (snake->speed<20)
snake->speed/=2;
else{
if(x<=5)
snake->speed -= 50;
if(x>5)
snake->speed-=(60-(x-5)*10);
}
}
贪吃蛇游戏可以分为以下必要几个部分:
- 框架制作
- 游戏结束收尾工作
- 初始化定义一条蛇
- 蛇的移动
- 把蛇打印出来
- 放置食物
- 蛇吃食物(变长机制)
- 蛇的生死(判定是否gameover)
用户操作输入实现
特别是在打印蛇和蛇吃食物方面可能比较懵b:
void PrintSnake(HANDLE hOut, struct Snake *snake) {
for (i = 0; i < snake->length; i++) {
gotoxy(hOut, snake->x[i], snake->y[i]);
if (i == 0) {
printf("°§"); //Œ≤≤ø
}
else if (i == snake->length - 1) {
printf("@");
}
else {
printf("*");
}
}
}
void eat_food(HANDLE hOut, struct Snake *snake, struct Food *food) {
if (snake->x[snake->length - 1] == food->x&&snake->y[snake->length - 1] == food->y) {
snake->length++; //≥§¥Û¡À£°£°
for (i = snake->length - 1; i >= 1; i--) {
snake->x[i] = snake->x[i - 1];
snake->y[i] = snake->y[i - 1];
}
snake->x[0] = a[0];
snake->y[0] = a[1];
put_food(hOut, snake, food);
snake->count++;
if (snake->count % 5 == 0) {
snake->speed -= 50;
}
}
}
可以通过坐标法实现,在蛇吃到食物后,蛇尾的部分本为空格,变为不动就好。
贪吃蛇总体不算太难,这次就分享到这,智能蛇分享见!!