实例分析一、贪吃蛇
阶段一:贪吃蛇程序整体类结构
贪吃蛇游戏介绍
一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
贪吃蛇游戏示意图:
贪吃蛇游戏类设计
贪吃蛇游戏需要设计两个类:
蛇类:蛇自身的属性包括蛇头、蛇尾、蛇的位置等等;蛇的方法包括出生、移动、吃食等等,CSnake类结构下图所示:
CSnake类属性成员变量名数据类型意 义m_lengthint蛇的长度m_newSnakeSnake_Struct蛇的新态的所有节点运动状态m_oldSnakeSnake_Struct蛇的旧态的所有节点运动状态m_pStateArrayBitmapState*蛇的所有节点显示位图的状态m_pPosSPoint*蛇体坐标方法成员函数名属 性函数功能GetRightState()private返回当前应当显示的身体状态Move()public蛇移动ChangeDirect()public改变移动方向AddBody()public蛇的身体增长SetHeadPos()public设置蛇头的坐标GetStateArray()public取蛇的状态标识数组GetPos()public取蛇的位置数组IsHeadTouchBody()public检测蛇头是否触碰到其身体GetLength()public获取蛇身的长度Initial()public游戏初始化CSnake()public构造函数~CSnake()public析构函数 注:
Snake_Struct为结构体类型,定义为:
struct Snake_Struct//定义蛇体状态
{
MoveState head; //头部
MoveState *body; //身体
MoveState tail; //尾部
};
MoveState为枚举类型,定义为:
//节点运动状态(方向),4个成员分别对应4个方向
enum MoveState{S_NONE,S_UP,S_DOWN,S_LEFT,S_RIGHT};
BitmapState为枚举类型,定义为:
//节点图像显示运动状态(方向),第一个成员代表无方向,后12个成员之分别对应12个方向
EnumBitmapState{M_NONE,M_UP_UP,M_DOWN_DOWN,M_LEFT_LEFT,M_RIGHT_RIGHT,M_UP_LEFT,M_UP_RIGHT,M_LEFT_UP,M_LEFT_DOWN,M_RIGHT_UP,
M_RIGHT_DOWN,M_DOWN_RIGHT,M_DOWN_LEFT}
SPoint为结构体类型,定义为:
struct SPoint{
int x,y;// 横、纵坐标
};
桌面类:桌面类的属性包括桌子的宽度、高度、食物、蛇等等;方法包括设置桌面环境,获取食物等等,CTable类结构下图所示:
CTable类属性成员变量名数据类型意 义m_widthint桌子的宽度m_heightint桌子的高度m_foodNumberint水果的数目m_blockNumberint障碍物(毒果)的数目m_snakeCSnake桌子上的蛇m_boardint**桌子面板(二维数组)方法成员函数名属 性函数功能InitialTable()public初始化桌面AddBlock()public在某个位置放置毒果AddFood()public在某个位置放置食物ClearFood()public清除某个位置的果实GetSnake()public获取蛇对象GetBoard()public取桌子对象GetData()public取桌子某个位置数据SnakeMove()public检测蛇头是否触碰到其身体ChangeSnakeDirect()public改变蛇的方向CTable()public构造函数~CTable()public析构函数阶段二:贪吃蛇程序整体类间调用关系
阶段三:Win32 SDK程序消息机制分析
阶段四:游戏控制的实现
因为有定时器,所以蛇会定时自动移动,为了蛇能继续长大、不碰壁和碰到毒果,必