1、概述
贪吃蛇是一个很经典的小游戏,这里介绍如何分离UI和逻辑来设计该游戏。
2、设计思路
整个游戏有三个组成部分:背景面板、食物、蛇。面板划分成不同的网格,食物和蛇都出现在网格中。
1)食物的随机生成要保证在网格内;
2)蛇的移动要保证按照格子大小进行。
3、类描述
1)属性
1 /**食物 2 * 1.位置 3 * 2.宽度 4 * 3.高度 5 */ 6 7 class CFood 8 { 9 private: 10 CPoint m_nPos; 11 int m_nWidth; 12 int m_nHeight; 13 }
1 /** 2 * 蛇身 3 * 1.位置 4 * 2.宽度 5 * 3.高度 6 */ 7 8 class CSection 9 { 10 private: 11 CPoint m_nPos; 12 int m_nWidth; 13 int m_nHeight; 14 }
1 /** 2 * 蛇 3 * 1.移动方向 4 * 2.蛇头位置 5 * 3.蛇身集合 6 */ 7 8 typedef enum 9 { 10 LEFT, RIGHT, TOP, BOTTOM 11 }DIRECTION; 12 13 class CSection 14 { 15 private: 16 DIRECTION m_way; 17 CPoint m_head; 18 CPtrList m_list; 19 }
2)行为
1 /** 2 * 1.形状展示 3 * 2.获取位置 4 * 3.设置位置 5 */ 6 7 class CFood 8 { 9 public: 10 void Draw(CDC *pDC); 11 CPoint& GetPosition(); 12 void SetPosition(CPoint &pos); 13 }
1 /** 2 * 1.形状展示 3 * 2.获取位置 4 * 3.设置位置 5 */ 6 7 class CSection 8 { 9 public: 10 void Draw(CDC *pDC); 11 CPoint& GetPosition(); 12 void SetPosition(CPoint &pos); 13 }
1 /** 2 * 1.形状展示 3 * 2.获取位置 4 * 3.设置位置 5 * 4. 移动 6 * 5. 移动方向的设置或获取 7 * 6. 吃食物 8 * 7. 是否结束(碰到墙或自身) 9 */ 10 11 class CSnake 12 { 13 public: 14 void Draw(CDC *pDC); 15 void EatFood(); 16 bool IsOver(); 17 void Move(); 18 void SetWay(DIRECTION dir); 19 DIRECTION GetWay; 20 }
4、运行结果
完整代码:
https://git.oschina.net/zhujf21st/Snake.git