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