# 黄金矿工
## 关于项目
**项目说明:**采用 cocos2d-X3.12 游戏引擎,基于 C++ 开发,支持 Android,iOS 以及 wp 系统
**开发工具:** 支持 Xcode,eclipse,visual studio 都可以,提前在机器上创建一个 cocos2d-x 的空工程,将 Class 文件删除,把下载好的代码 Class 文件拖入到工程,把 res 文件放入到项目的 Resoures 目录下运行就 OK 了~
**辅助工具:`Cocostudio`**
项目比较简单,适合有一定编程经验对游戏有兴趣想入门的同学.
![](https://www.writebug.com/myres/static/uploads/2021/11/4/6d9da2b244952b2d8b9b9c29012d9251.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/4/0ffa352fc5f08baec2a791a8b796a6d7.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/4/f4fd6ad401b36c7cbc80082898003b05.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/4/0309187e85274d4269901e9470360b7e.writebug)
**首页场景**
本游戏的布局基本都是 cocostudio 布局的,放一张在 cocostudio 中布局的样式图
![](https://www.writebug.com/myres/static/uploads/2021/11/4/5a1c049a38191809709a00a732eecaf4.writebug)
通过 CSLoder 加载 csb 文件添加到对应的场景中展示,具体代码如下
```cpp
auto mainCsb = CSLoader::createNode("csb文件名");
this->addChild(mainCsb);
```
Logo 放大出现动画也在 cocostudio 中创建,通过 CSLoader 获取 Timeline 对象,播放指定的帧动画
```cpp
animation = CSLoader::createTimeline("Layer.csb");
mainCsb->runAction(animation);
// 播放指定的动画
animation->gotoFrameAndPlay(0, 25, false);
```
云飘动动画以及人物吹口哨抖腿的动画都是通过代码实现的,当然也可以在 cocostudio 中制作骨骼动画,通过在工程中加载导出的 js 文件播放动画也可以,这里的动画比较简单,就直接通过代码实现了,如果项目中用到比较复杂的动画推荐采用加载 js 动画的方式.这里由于没有用到骨骼动画,就不做相应的介绍了,有兴趣的同学可以自己研究下~
由于游戏需要用到存储的数据比较小,这里对用户游戏数据持久化存储是采用 `UserDefault` 来进行.如果项目中需要存储的数据量比较庞大,建议使用数据库建表来进行存储,这样更方便数据的查询与管理.
在工程中通过一个单例 `UserDataManager` 来管理用户的数据,提供背景音乐是否静音,音效是否静音,用户账户金币以及当前游戏的关数四个成员变量.
```c++
UserDataManager *UserDataManager::getInstance()
{
if (s_SharedUserDataManager == nullptr) {
s_SharedUserDataManager = new UserDataManager();
s_SharedUserDataManager->_musicMute = UserDefault::getInstance()->getBoolForKey(musicMuteKey, false);
s_SharedUserDataManager->_soundMute = UserDefault::getInstance()->getBoolForKey(soundMuteKey, false);
s_SharedUserDataManager->_allMoney = UserDefault::getInstance()->getIntegerForKey(userAllMoneyKey, 0);
s_SharedUserDataManager->_stageNum = UserDefault::getInstance()->getIntegerForKey(userStageNumKey, 1);
}
return s_SharedUserDataManager;
}
```
监听按钮的点击事件,可以在 cocostudio 中对节点进行命名,然后在代码中通过下面方法获取对应 name 的节点
```c++
// 获取startButton节点
auto startBtn = static_cast<Button *>(Helper::seekWidgetByName(static_cast<Widget *>(mainCsb), "startButton"));
```
需要注意的是,按钮点击回调函数需要在.h 文件提前声明,或者可以采用 lambda 表达式也可
- 采用函数的回调写法
// 添加按钮的事件
```c++
tartBtn->addTouchEventListener(CC_CALLBACK_2(MainLayer::startButtonTouch, this));
```
```
- 采用lambda表达式写法
```c++
startBtn->addTouchEventListener([=](Ref *sender, Widget::TouchEventType touchType){
// button click callBack
});
```
StartButton 点击后会有两个逻辑:通过 `UserDataManager` 获取用户游戏关数
- 用户没有游戏记录或者当前记录是游戏是第一关,直接进入游戏场景,开始游戏.
- 用户有游戏记录并且关数大于 1,直接进入商店场景.
**商店场景**
同样也是通过采用 cocostudio 来进行布局的,效果如下
![](https://www.writebug.com/myres/static/uploads/2021/11/4/0749bdad14ea92016d4e64ca7e27adbc.writebug)
商店场景也比较简单,账户余额通过上文中的 `UserDataManager` 可以获取用户的金币数.
```
UserDataManager::getInstance()->getUserAllMoney();
```
商品采用 Button 来展示,这样可以获取玩家选择的当前商品,每一个商品只能购买一次,如果购买了商品后,对应商品上显示 1 的图标.商品描述通过点击商品,展示对应的商品作用描述.
```c++
auto csb = CSLoader::createNode("ShopScene.csb");
this->addChild(csb);
// 添加商品描述容器
goodsDesVec.push_back(Value("炸药.购买以后,当抓到较重且金额不多的物品时,按下上方炸药即可炸毁物品,以便节省时间.功效为下一关"));
goodsDesVec.push_back(Value("力量药水.购买以后,在下一关力量会增加,抓到物品后拉回速度会增加20%.功效为下一关"));
goodsDesVec.push_back(Value("优质矿石.购买后在下一关中收购钻石的价格将变成原价格的3倍,但不保证下一关一定会有钻石~其效果为下一关"));
goodsDesVec.push_back(Value("矿石收藏书.购买后下一关的矿石的价格将会是原有价格的3倍,其功效为下一关"));
// 初始化商品描述Text
goodsDesText = static_cast<Text *>(Helper::seekWidgetByName(static_cast<Widget *>(csb), "shopDetail"));
Text *userMoney = static_cast<Text *>(Helper::seekWidgetByName(static_cast<Widget *>(csb), "userMoney"));
userMoney->setString("$" + to_string(UserDataManager::getInstance()->getAllMoney()));
// 获取购买按钮.并且添加按钮的点击事件
Button *buyButton = static_cast<Button *>(Helper::seekWidgetByName(static_cast<Widget *>(csb), "buyButton"));
buyButton->addTouchEventListener([=](Ref *sender, Widget::TouchEventType type){
if (type == Widget::TouchEventType::ENDED) {
int index = lastSelected->getTag() - 1;
auto oneIV = buyOnes.at(index);
if (oneIV->isVisible()) {
return;
}
// 获取商品价格
int price = 0;
switch (index) {
case 0:
price = kBombPrice;
break;
case 1:
price = kPotionPrice;
break;
case 2:
price = kDiamondsPrice;
break;
case 3:
price = kStoneBookPrice;
break;
}
if (UserDataManager::getInstance()->getAllMoney() - payMoneyCount - price >= 0) {
payMoneyCount += price;
userMoney->setString("$" + to_string(UserDataManager::getInstance()->getAllMoney() - payMoneyCount));
oneIV->setVisible(true);
}
}
});
```
点击下一关,切换到游戏场景.
**游戏场景**
一样也是在 cocostudio 中布局,这里需要注意的是并不是采用一个 csb 文件就全部将节点添加完毕,这里分三块布局,如下图所示三块
![](https://www.writebug.com/myres/static/uploads/2021/11/4/4dbc0ad0ce3e5fc3dfddc11167dd5580.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/4/a7511509b8052fc4a53e574b0f767503.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/4/f5214aa3f8c6320cc72b81096446d93b.writebug)
游戏 Layer 提供一个快速创建场景的方法
```c++
// 参数分别为 是否购买了炸弹.力量药水.砖
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目说明:采用 cocos2d-X3.12 游戏引擎,基于 C++ 开发,支持 Android,iOS 以及 wp 系统 开发工具: 支持 Xcode,eclipse,visual studio 都可以,提前在机器上创建一个 cocos2d-x 的空工程,将 Class 文件删除,把下载好的代码 Class 文件拖入到工程,把 res 文件放入到项目的 Resoures 目录下运行就 OK 了~ 辅助工具:Cocostudio
资源推荐
资源详情
资源评论
收起资源包目录
100013077-基于Cocos2d-X (C++)设计实现黄金矿工小游戏.zip (77个子文件)
goldminer
.DS_Store 6KB
LICENSE 1KB
res
TipsFailOrSucess.csb 2KB
.DS_Store 6KB
music
level.mp3 6KB
bomb.mp3 3KB
Select.mp3 13KB
backMusic.mp3 435KB
lastart.mp3 2KB
finish.mp3 6KB
largegold.mp3 2KB
laend.mp3 2KB
MinerAnimtion.csb 908B
PauseLayer.csb 5KB
Boom.plist 8KB
Default
Button_Disable.png 1KB
Hook.csb 2KB
ShopScene.csb 15KB
level2.csb 7KB
level3.csb 7KB
Layer.csb 5KB
StageTipsLayer.csb 2KB
Resources
shoper.plist 2KB
minerAction.png 183KB
shoper.png 221KB
level-sheet.plist 33KB
mineBG4.png 22KB
tip.png 3KB
huancun.png 34KB
green.png 1KB
tableImage.png 3KB
mineBG1.png 101KB
quitbtn.png 4KB
menu-start-gold.png 72KB
mineBG3.png 25KB
one.png 5KB
dialog-background.png 284KB
huancun.plist 2KB
general-sheet.plist 26KB
shopBack.png 20KB
menu-background.png 561KB
level-sheet.png 1.09MB
mineBG2.png 21KB
minerAction.plist 2KB
menu-background-sky.jpg 31KB
gold-miner-text.png 44KB
general-sheet.png 505KB
topbg.png 6KB
mineBG5.png 23KB
menu-miner.png 146KB
stars.png 1KB
GameLayer.csb 9KB
level1.csb 6KB
level4.csb 7KB
level5.csb 8KB
Classes
.DS_Store 6KB
Other
Const.hpp 999B
UserDataManager.cpp 1KB
AppDelegate.h 1KB
UserDataManager.hpp 1KB
AppDelegate.cpp 2KB
MainScene
.DS_Store 6KB
StageTipsLayer.cpp 5KB
MainRoot.hpp 971B
Pause.hpp 864B
Shop.hpp 729B
Pause.cpp 4KB
Gold.cpp 4KB
Shop.cpp 5KB
Game.cpp 13KB
Game.hpp 2KB
Gold.hpp 1KB
MainRoot.cpp 4KB
StageTipsLayer.hpp 1KB
Tool
SoundTool.cpp 3KB
SoundTool.hpp 994B
README.md 16KB
共 77 条
- 1
资源评论
神仙别闹
- 粉丝: 2672
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功