#黄金矿工
好久没有写点东西了,最近工作有一点忙,生活上事情也比较繁琐,趁着最近有点时间,写个小游戏供大家娱乐下!随便恭喜木木同学被挖去了新公司,祝工作顺利~
##关于项目(代码下载地址在文章最下面点击GitHub链接)
项目说明:采用cocos2d-X3.12游戏引擎,基于C++开发,支持Android,iOS以及wp系统
开发工具:支持Xcode,eclipse,visual studio都可以,提前在机器上创建一个cocos2d-x的空工程,将Class文件删除,把下载好的代码Class文件拖入到工程,把res文件放入到项目的Resoures目录下运行就OK了~
辅助工具:`Cocostudio`
项目比较简单,适合有一定编程经验对游戏有兴趣想入门的同学.
![游戏截图](http://ww4.sinaimg.cn/mw690/0068uRu1jw1fakp2ilr4og306o04g1ky.gif)
![游戏截图](http://ww2.sinaimg.cn/mw690/0068uRu1jw1fakp2l0lzfg306o04g4qr.gif)
![游戏截图](http://ww1.sinaimg.cn/mw690/0068uRu1jw1fakp2hy574j30df09075z.jpg)
![粒子效果](http://ww2.sinaimg.cn/mw690/0068uRu1jw1fakp2hig76g306o04g1kz.gif)
###首页场景
本游戏的布局基本都是cocostudio布局的,放一张在cocostudio中布局的样式图
![cocostudio布局样式](http://ww2.sinaimg.cn/mw690/0068uRu1gw1famxlucyp7j311g142akx.jpg)
通过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来进行布局的,效果如下
![商店场景cocostudio效果](http://ww1.sinaimg.cn/mw690/0068uRu1gw1famyje8uddj318s0z6k14.jpg)
商店场景也比较简单,账户余额通过上文中的`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文件就全部将节点添加完毕,这里分三块布局,如下图所示三块
![顶部](http://ww4.sinaimg.cn/mw690/0068uRu1gw1famz3276kvj30u00k4401.jpg)
![level](http://ww4.sinaimg.cn/mw690/0068uRu1gw1famz31cvksj30tq0jwmzy.jpg)
![钩子](http://ww4.sinaimg.cn/mw690/0068uRu1gw1famz31q41tj308o06ua9y.jpg)
游戏Layer提供一个快速创建场景的方法
```c++
// 参数分别为 是否购买了炸弹.力量药水.砖石升值书.石头收藏书.在商店的花销
static Scene *createScene(bool isBuyBomb, bool isBuyPotion, bool isBuyDiamonds, bool isStoneBook, int payMoney);
```
在上
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
黄金矿工,使用Cocos2d-X 基于C++.zip (76个子文件)
资料总结
.DS_Store 6KB
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
共 76 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功