C++暑假实习的前三天的任务就是用C语言做一个贪吃蛇的小游戏,然后开始跟着老师一起做核心功能板块,最后由我们自己去改善和美化我们的程序。下面就介绍一下这个简单的贪吃蛇游戏的实现过程。
虽然是个小程序,但是其代码也有一定长度,并且其逻辑性很强,要实现程序的逻辑,必须要模块化地进行编写。以下叙述一下鄙人的思想
1、如何产生一条蛇?
首先用一个符号来作为我们的蛇身,并确定我们蛇的起始位置,规定我们蛇的起始长度,即可,蛇的身体可以用一个数组来存储,而蛇的初始位置可由我们的系统函数确定:
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,temp);
2、蛇如何进行运动?
蛇的移动即是我们数组的移动,而根据蛇的运动规律,点的移动新坐标即是前面一个点的旧坐标,因此,点的移动很简单。
3、运动的方向我们如何去控制?
方向的控制和我们蛇的移动息息相关,我们通过得到键盘的输入来控制相应的蛇的移动方向,这里用到了一个按键响应函数:
kbhit();
4、运动的范围该如何设置?
所谓运动的范围,不过是我们给蛇画的一个牢笼,任意在屏幕上用光标设置函数即可确定,就像打印蛇身一样来打印我们的地图。
5、蛇要吃的食物如何产生?
蛇的食物肯定是由随机数产生,然后我们要控制这个随机数在我们画的地图里面产生。
6、蛇如何吃食物?以及设置吃食物后的效果?
吃食物,即是蛇头和食物的坐标一致,然后食物的位置由蛇身代替,我们将蛇走过的轨迹置空,即可屏蔽蛇身的路径。然后当蛇头与食物相遇,我们即可将蛇的长度加1或其他效果
7、蛇要死亡,怎么个死法?
蛇的死法千种万种,可以吃毒食物而死,可以撞到我们的地图框而死,也可以吃到自己而死………………………….
如果能把上面的思路理清,那么写一个贪吃蛇的小游戏也就不难了,下面是我的具体实现代码:
// myproject.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h >
#include <time.h>
#define InitLEN 10 //蛇初始长度
#define MAXLEN 100 //蛇最大长度
#define HIGH 20 //地图高
#define WIDTH 40 //地图宽
int SnakeLEN=0; //蛇的长度
int score=0; //得分
int barrier_num =0; //所有障碍物组成点的个数
int half;
//#define HPRIZON 1
//#define VERTICAL 2
COORD arr[MAXLEN];
COORD tmp_arr[50];
COORD food_pos;
COORD map_pos;
COORD tmp_wall;
COORD tmp_barrier;
#define RIGHT 39
#define LEFT 37
#define UP 38
#define DOWN 40
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); //坐标
void clearSnake();