cocos2dx实现单机版三国杀(一)
首先需要一个UI交互类 GameUI -layer
一个游戏驱动类,负责游戏逻辑的循环 暂时定为GameScene- scene
GameScene obj 调用update 更新游戏,addchild gameUI obj 呈现UI.
上面的都是cocos2d 类
下面需要一些辅助类
比如 PlayerInfo 玩家信息类,存储玩家信息;Poker 类 负责构建我们的牌(主要是显示在 gameui obj 上)。
gamescene obj 负责更新 playerinfo obj date,而gameui obj 负责呈现 playerinfo obj date,比如玩家头像、生命、装备等等。
Poker 类主要构建于 gameui obj 绘制牌,因为poker类只有一个sprite_pic 需要绘制,故我在进行非绘制操作时,对于牌的操作是以int来代表具体的牌型(因为暂时牌型较少,且
忽视 花色和数字),当需要绘制牌时,只需要根据传入的int 来翻译成指定类型的xx.png图片,在画面上就是一张指定的牌。
牌的绘制必然是因为玩家信息的改变(手牌数),所以需要实现画面和数据的"同步更新",比如为playerinfo obj ->手牌槽 添加元素a时,gameui obj 也需要构建 a对应的poker 。
暂时还没考虑用牌,只有摸牌和弃牌。牌堆由gameScene obj 调用洗牌function 实现,每次调用"创建"一个新的牌堆,实现是 总元素两两随机交换位置,执行length-1次。
游戏逻辑的循环由update实现,主要是判断 isgameover->switch(currenstatet){ case state1,case state2..... } siwtch 负责各阶段操作.
//下面是已经写了的gameui 声明
#pragma once
/*
主游戏界面UI
*/
#include "cocos2d.h"
#include "ui/CocosGUI.h"
#include "PlayInfo.h"
USING_NS_CC;
class GameUI:public cocos2d::Layer
{
//friend class GameScene;
public:
bool init();
virtual void onEnter();
virtual void onExit();
void menuReOpen(Ref*pSender);//重开
void menuExit(Ref*pSender);//退出游戏
void menuaddpoker(Ref*pSender);
void menuusepoker(Ref*pSender);
void menugiveuppoker(Ref*pSender);
void update();
/* 玩家摸牌 显示 */
void addPoker( int ,int);
/* 玩家使用牌(包括回合内外) 显示 */
void usePoker(int num=1);
/* 玩家弃牌 显示 */
void giveupPoker();
CREATE_FUNC(GameUI);
//初始化角色信息
void initRoleInfo(PlayInfo* player);
//初始化对手信息
void initFoeInfo(PlayInfo* player);
Label*CurrenState;
private:
std::vector<Poker*>showpokerslot;
Sprite*bg;//背景图片
Sprite*equipment;//装备栏图片
Sprite*pokerSlot;//手牌槽背景图片
Sprite*rolePicInfo;//角色ui图片信息
//Vector<Sprite*>roleHealthInfo;
Sprite*foeInfoShow;
Label* timelabel;
float time;
};
cocos2dx实现单机版三国杀(一)的更多相关文章
- cocos2dx实现单机版三国杀(二)
接上续,东西还没有做完 所以代码免不了改动 之前的头文件现在又改了不少,因为架构也改变了现在主要类就是GameScene.GameUI.PlayInfo.Poker这四个类 前面想的GameLoop ...
- cocos2dx调用浏览器打开网址
安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplicat ...
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- Cocos2d-x不要随便在onEnter里面addChild
使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG ...
- Cocos2dx中线程优先级
Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...
- cocos2d-x事件EventListenerTouchOneByOne没反应
今天写了 cocos2d-x事件EventListenerTouchOneByOne,发现死活没反应,原代码复制到新工程没问题啊, 后来发现cocostudio用的基础容器(ccui.Layout:c ...
- cocos2d-x 3.5以后版本的 luasocket
cocos2d-x 3.5后使用luasocket:local SOCKET = require "socket"; 结果运行就报错:[LUA-print] USE " ...
- cocos2d-x内存管理
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一. 为什么需要内存管理 1. new和delete 2. 堆上申 ...
- cocos2d-x屏幕分辨率,窗口大小总结
这个东西很烦人,相信很多人都不理解 今天来总结一下,首先有很多概念都要事先弄得清楚明白 1.屏幕分辨率 所谓屏幕分辨率相信很多人都知道他的概念,不就是1280pxX720PX吗?不就是这种形式吗?有什 ...
随机推荐
- 【Codeforces 427C】Checkposts
[链接] 我是链接,点我呀:) [题意] 环里面的点只需要一个点就能全都保护 问你最少需要多少花费以及最少的点才能将所有的点都保护 [题解] 有向图的强连通分量求出所有的联通分量 显然每个联通分量里面 ...
- nyoj 55 懒省事的小明(priority_queue优先队列)
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...
- java 源码分析2 -List
1.是一个接口,继承了Collection,提供了size(),isEmpty(),contanis(),iterator(),toArray(),clear()等方法 2.分析常用的ArrayLis ...
- docker mysql 主从配置
docker安装运行单实例的MySQL参考另一篇文档 http://www.cnblogs.com/manger/p/7611309.html 1.首先在/data/script下创建两个文件my-m ...
- php7.0升级到php7.1
$ add-apt-repository ppa:ondrej/php$ apt-get update$ apt-get upgrade php 来源:http://www.wuweixin.com/ ...
- 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】
之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...
- 百练1088:滑雪 【DP】+【DFS】
总Time Limit: 1000ms Memory Limit: 65536kB Description Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区域必须向 ...
- __weak与__block区别分析
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq (线段树乘法加法的混合操作)
题目:点击打开链接 大意:一个数组.三个操作.第一种是区间[a,b]每一个数乘乘,另外一种是区间[a,b]每一个数加c,第三种是查询[a,b]区间的和并对p取摸. 两种操作就不能简单的仅仅往下传 ...
- VS中多项目联合开发技巧
1. 新建目录,将它设定为 本次project的工作目录,新建一个Code Files目录 2. 在Code Files目录里.新建一个Win32控制台程序(总控程序),再新建其他的项目比方项目A ...