MFC实现贪吃蛇小游戏


  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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM