基于cocos2dx引擎开发的大富翁游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/85603162
资源下载地址:https://download.csdn.net/download/sheziqiong/85603162
项目信息介绍
1. 项目名称
大富翁(Monopoly)
2. 项目进度时间线
第一周 学习知识
建立仓库
完成基本界面和类框架
学习cocos2dx相关知识
第二周 收集素材
实现各种地图交互
完成素材收集和地图绘制
完成类框架设计
学习cocos2dx相关知识
第三周 肝肝肝!!!
实现回合制
实现部分触发事件
实现部分地产
学习cocos2dx相关知识
第四周 肝肝肝!!!
+Debug
实现股票功能
实现信息栏功能
实现了大部分触发事件
实现了基本的游戏房产机制
完成地产和特殊地点触发功能
第五周 肝肝肝!!!
+Debug
实现大量道具及卡片机制
实现神灵
完成了所有触发事件
第六周 收尾
+Debug
实现AI功能
添加背景音乐及音效
撰写设计文档及游戏说明
撰写答辩幻灯片
项目开发文档
整体架构设计与小组分工
整体构架设计
小组分工
地图绘制 菜单 交互 地产内容 部分道具
角色动画 回合制实现 事件 神灵 AI
股市内容 道具部分内容 角色信息显示栏 音效与音乐
功能点与实现思路
- 游戏开始界面、选择界面、设置界面、背景音乐、退出功能
- 游戏回合制
通过回调函数的不断嵌套调用实现 - 人物行走动画
使用TexturePacker
将人物动作打包生成图集与plist
文件
将图集全部加载到SpriteFrameCache
中
创建动画时直接读取SpriteFrameCache
- 人物沿路行走
在地图类中增加储存路径坐标的vector,人物沿着路径坐标的位置行走。 - 地图拖拽、地图选点、视角跟随、小地图选点定位
- AI玩家混合功能
为角色类添加成员变量标记该角色是否为AI。
在与玩家可能产生交互的部分判断该角色是否为AI并单独加上AI决策的代码。 - 旅店房产、街道机制
- 特殊房产:公园、度假村、购物中心、研发中心。
- 实体公司:航空公司、石油公司、保险公司、科技公司。
- 特定位置触发随机事件(命运与机会)
- 29种道具(包括卡片)
每个道具为道具基类的派生类,通过调用各个类的虚函数完成相应效果 - 股市功能
每只股票为一个类,通过调用成员函数改变信息,更新时刷新显示效果 - 角色信息显示栏
与角色等类相关,当状态信息改变时,刷新显示内容 - 房屋建造、升级功能
- 特殊房产(银行,医院)
- 神灵
在地图中储存神灵的位置,在人物类中增加成员变量判断人物是否以及被什么神灵附身。
被附身的人着陆后会先判断地产再发动神灵功能。
技术难点与其解决方案
1. 回合制
技术难点
最初认为for循环轮流遍历所有人物即可实现回合制,后来发现不是这样。
for循环的执行是程序开始执行后瞬间完成的,无法与用户在任何时刻都有可能进行的操作产生交互。
解决方案
使用回调函数的不断嵌套调用。
调用层次为:
等待用户按下Go->按下Go->掷骰子->人物行走->判断神灵->判断地产-
->下一个人的回合开始,等待用户按下Go->按下Go->…
从而实现人物根据用户按下Go的时机轮流行走。
2. 坐标
技术难点
cocos2dx的坐标系统非常复杂,涉及到两套方向,不同参考系,不同量纲。
在程序设计的过程中,会涉及到大量的鼠标选点,地图定位,位置识别等等问题,就非常的让人头疼。
解决方案
通过对地图的封装,在地图类外的所有地方使用位置的数组索引作为位置编号,创建自然坐标系。在地图类里,经过绞尽脑汁的计算整出来一套坐标变换方法。
3. 内存管理
难点
cocos2dx的类都使用单独实现的引用计数,为了风格统一,游戏设计中的类多继承自cocos2dx使用其自动内存管理,导致类内部无法定义静态变量。早期调试过程中也因为对cocos2dx内存管理理解不够透彻,导致了很多很严重的bug,变量经常会被释放掉。
4. 字符编码
技术难点
不知道为什么VS使用的MSVC编译器对UTF8编码格式的源代码支持不够完善,整个项目的源代码文件编码格式最后使用了GB2312,而cocos2dx默认解码导致输出中文会乱码。
解决方案
无奈之下只能使用windows头文件中的相关函数硬性转码,但是这就带来了跨平台移植的困难。Android平台使用的Clang编译器没有windows头文件,而且对GB2312的支持不够完善。考虑以后可以使用plist配置文件的字符串映射解决中文问题。
项目亮点
图集的使用
使用TexturePacker将人物的4向行走图片打包生成图集与.plist文件
并将图集全部加载到精灵帧缓存中
创建动画时读取精灵帧缓存即可,提高了性能
character_frame_cache_ = SpriteFrameCache::getInstance();
character_frame_cache_->addSpriteFramesWithFile
(StringUtils::format("%s.plist", name_.c_str()), StringUtils::format("%s.png", name_.c_str()));
常量与全局常用方法
将项目中的常量定义于CommonConstant.h中,方便增删调整。
constexpr int hotel_land_value = 300;
constexpr int hotel_sell_value[5] = { 500,1000,2000,4000,0 };
constexpr int hotel_rent_value[5] = { 100,400,1200,3000,7000 };
将项目中的一些常见代码段包装成函数声明于CommonMethod.h中。
void SendMsg(int msg)
{auto dispatcher = Director::getInstance()->getEventDispatcher();char* buf = new char[10];sprintf(buf, "%d", msg);log("message sending : %s", buf);EventCustom event = EventCustom("monopoly_msg");event.setUserData(buf);dispatcher->dispatchEvent(&event);CC_SAFE_DELETE_ARRAY(buf);
}
丰富的地图交互
实现了小地图定位、视角跟随、位置信息显示、地图拖拽、地图选点等交互,提高了游戏可玩性。
大量道具、地产、事件的实现
本项目共实现近30款道具,10余种地产,大量相关的事件,游戏内容非常丰富,机制复杂,可玩性极高。
使用的c++特性
包括单不限于:
Lambda表达式
STL容器
类和多态
函数重载
类型判断
范围for语句
类内初始值
常量表达式constexpr
代码规范
遵循C++风格类型转换
贯彻落实Google风格的命名
尽量使用Cocos2dx风格的类设计与内存管理
www.biyezuopin.vip
版本控制与团队协作
全程使用GitHub和Git进行版本控制
尽量做到了符合GoogleAngularJS规范的commit记录
项目运行效果(超过4张)
资源下载地址:https://download.csdn.net/download/sheziqiong/85603162
资源下载地址:https://download.csdn.net/download/sheziqiong/85603162
基于cocos2dx引擎开发的大富翁游戏相关推荐
- 基于cocos2d-x引擎的游戏框架设计【转载】
http://www.cnblogs.com/lancidie/archive/2013/03/18/2965564.html 基于cocos2d-x引擎的游戏框架设计 移动互联网浪潮正在彻底改变人们 ...
- 使用《红孩儿工具箱》开发基于Cocos2d-x的《打地鼠》游戏
使用<红孩儿工具箱>开发基于Cocos2d-x的<打地鼠>游戏 大家好,我是红孩儿.经过一年左右业余时间的持续开发,<红孩儿工具箱>已经初步完成了一些不错的功能,大 ...
- 分享个手机棋牌游戏源码 欢乐麻将2.0 使用cocos2d-x引擎开发
分享个手机棋牌游戏源码 欢乐麻将2.0 使用cocos2d-x引擎开发 https://bbs.wxrym.com/thread-90094-1-1.html (出处: 外星人源码论坛) 不知不觉已 ...
- 【HIMI转载推荐之三】基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
[前言点评] 此篇主要作者:jason-lee-lijunlin 基于Cocos2d-x引擎进行封装的UI框架的扩展包. 此文章Himi已经仔细看过,总体来说是篇很好的文章,是给使用-x引擎的童鞋们 ...
- Kinect结合Unity3D引擎开发体感游戏(二)
这篇接着<Kinect结合Unity3D引擎开发体感游戏(一)>,时隔3个月才出这篇,在此期间还有不少机油们,要求出续集,期间在公司那边事情太多,一直帮公司前人做的项目擦屁股,到目前为止, ...
- [Kinect]Kinect结合Unity3D引擎开发体感游戏
最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验也是 ...
- 基于cocos2dx的横版动作游戏制作(二)
基于cocos2dx的横版动作游戏制作(二) 如果你看过第一部分介绍,你应该大体知道一个横版游戏该怎么样去做,需要什么东西了....本部分介绍一些细节设计... 第一个:单例对象我们应该怎么设计才比较 ...
- 基于cocos2dx的横版动作游戏制作(一)
基于cocos2dx的横版动作游戏制作(一) 本人最近几个月在工作之余,都有断断续续地去学习cocos2dx的一些东西,在一些论坛上参考有关资料,源码,比如www.9miao.com,泰然网等等,毕竟 ...
- Layabox引擎开发H5打地鼠游戏(一)
第一节 构造打地鼠界面 创建项目并导入资源: 制作打地鼠界面: 加载资源并显示界面: 代码及相关资源下载 创建项目并导入资源 创建项目 本项目没有用到下图文件夹原有的组件,将图片全部删除 导入图片 制 ...
最新文章
- percona-5.7二进制多实例安装
- 设置Exchange 2010附件大小限制原则
- 百度高德位置定位服务器,调用百度、高德地图App,百度地图网页版,App定位
- virt-v2v 使用指南
- ASP.Net缓存 1
- 多个线程访问统一对象的不同方法_C#多线程读写同一文件处理
- roll() java_Java Calendar roll()用法及代码示例
- LeCun:放弃深度学习吧,AI的未来是能量学习
- Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
- struts2+json(3)
- eclipse上安装并配置tomcat
- 左耳朵耗子:云原生的正确打开方式
- 【MyBatis笔记-09】MyBatis-Plus的使用
- gps串口通信程序c语言,stm32单片机串口接收GPS数据并解析NMEA之GPRMC
- 【Python】Jupyter Notebook介绍、安装及使用教程
- 揭秘 typedef四用途与两陷阱
- 飞凌嵌入式FETMX6Q-C
- 用Java写一个五子棋小游戏
- 【javascript】class的继承之super的使用
- 百度传课html,百度传课电脑版
热门文章
- 迅雷服务器响应超时无法加速,迅雷无法加速敏感资源怎么办?迅雷解除无法加速敏感资源限制教程...
- 如何使用 Zend Expressive 建立 NASA 图片库? 1
- php条件查询,PHP-----多条件查询(示例代码)
- Linux学习(三):管道相关命令
- 【Lintcode】444. Graph Valid Tree II
- 计算机三级网络技术过几条件,2017计算机三级网络技术十大必记语句
- 【C++·峰顶计划】引用操作及底层原理深析
- 知乎引流、知乎带货工具、知乎选品、数据分析、带货软件(1)
- python资讯_python学习-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
- 淘宝(SpringBoot自动装配原理)