c++实践--cocos2dx, 2048v1.0

来源:互联网 发布:untitled软件汉化版 编辑:程序博客网 时间:2024/04/30 17:07

主要类的作用和关系:


Director: 导演,单例类Director::getInstance()
          设置游戏配置(OpenGL),推动游戏发展
 转场:runWithScene, replaceScene, pushScene, popScene


Scene:    场景,负责组织游戏元素
Layer:    层, 负责组织游戏元素
Sprite:   精灵,封装了一张图片,显示具体元素
          背景图片,主角,敌人,道具,头像。。。。


GLView:  舞台,OpenGL渲染的目标(窗口)

2048游戏逻辑

采用二维数组作为游戏界面的显示,

[objc] view plain copy 在CODE上查看代码片派生到我的代码片
  1. 2048游戏逻辑:  
  2. 1】生成游戏对象(2个数字)  
  3. CreatePerson()  
  4. CreatePerson()  
  5. 2】更新游戏视图界面  
  6. 如果胜利就不相应用户输入  
  7. if(isWin)  
  8. {  
  9.     return;  
  10. }  
  11. if(up)  
  12. {ctlfunc()}else if(down)  
  13. {ctlfunc()}else if(left)  
  14. {ctlfunc()}else if(right)  
  15. {ctlfunc()}  
  16.   
  17. ---------------------------  
  18. 随机生成位置CreatePerson()  
  19. {  
  20. 只要数组元素为空就生成,并记录当前坐标位置。  
  21. }  
  22. 移动控制ctlfunc()  
  23. {  
  24.     //对于第0行不需要移动,已经是最上行了  
  25.     for (int y = 1; y < 4; y++)  
  26.     {  
  27.         for (int x = 0; x < 4; x++)  
  28.         {  
  29.             person = PersonList[x, y];  
  30.             if (person == null)  
  31.             {  
  32.                 //如果当前位置没有对象,则不需要进行任何操作  
  33.                 continue;  
  34.             }  
  35.             //如果当前位置有对象,则执行以下代码  
  36.             //判断当前位置的前面所有位置是否有对象  
  37.             int destPos = -1;  
  38.             for (int y1 = y - 1; y1 >= 0; y1--)  
  39.             {  
  40.                 personBefore = PersonList[x, y1];  
  41.                 if (personBefore != null)  
  42.                 {  
  43.                     //如果有,则不再向前找  
  44.                     if (person.name.Equals(personBefore.name))  
  45.                     {  
  46.                         //如果是相同的对象则合并,不再需要移动当前对象  
  47.                         destPos = -1;  
  48.                         Destroy(person);  
  49.                         PersonList[x, y] = null;  
  50.                         //更新合并后的数字  
  51.                         personBefore.SendMessage("UpdateLevel");  
  52.                     }  
  53.                     break;  
  54.                 }  
  55.                 else  
  56.                 {  
  57.                     //如果没有,则继续向前找  
  58.                     destPos = y1;  
  59.                 }  
  60.             }  
  61.             if (destPos > -1)  
  62.             {  
  63.                 //完成移动  
  64.                 //1、更新位置矩阵信息  
  65.                 PersonList[x, y] = null;  
  66.                 PersonList[x, destPos] = person;  
  67.                 //2、更改当前游戏对象的位置  
  68.                 person.transform.position += new Vector3(0, (y - destPos) * ItCastHelper.YOffset0);  
  69.             }  
  70.         }  
  71.     }  
  72.     //新生成游戏对象  
  73.     CreatePerson();  
  74. }  

代码结构:

   使用mvc的软件模型,scene和layer的解耦和。



心得:

   Cocos引擎确实够强大,可以很好的练习c++,c代码将Linux的内核源代码写到了极致。c++代码将cocos同样写成了极品。仔细的拜读源代码,确实可以很优雅地将程序码出来。

结合网上的资源,加上自己的理解,算是自己也写出一个demo。


cmd进入到E:\BaiduYunDownload\6yue\cocos2dx_env\cocos2d-x-3.1\tools\cocos2d-console\bin目录中,
>python cocos.py new wuyq-2048  -p com.wuyq.cn -l cpp -d E:\

源代码, 新建一个项目,将Classes和Resources目录中的文件进行覆盖即可。


起初,打算在windows平台上面,利用语音控制键盘的输入,从而控制游戏的交互。百度了一下,cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持。然而响应键盘消息对于调试来说可以提供不少方便。下边就通过更改cocos2d-x的源码来添加键盘消息响应。感觉意义不大了。对于语音控制的demo,单独做一个demo进行练习。


后期:

   将windwos下面的代码移植到Android上面。


0 0
原创粉丝点击