cocos2dx 制作单机麻将(一)
今天開始打算解说下cocos2dx下怎样制作国标麻将
前半部分先解说麻将的逻辑部分,由于都是代码,可能会比較枯燥无聊. 这部分讲完后,你也能够用其它游戏引擎来制作麻将
后半部分,就解说余下的cocos2dx部分, 由于要把这部分留到后面讲,主要是还在考虑用3d做还是用2d做.
到最后能够扩展AI部分的机器人 和 server模块
cocos2dx 制作单机麻将(一)
麻将逻辑1. 打乱麻将顺序(初始化牌堆)
国标麻将共同拥有144张牌
#define MAX_REPERTORY 144
先把全部的牌放入一个常量数组中保存
每种牌都是1-9 共同拥有4张, 风牌就是东南西北,箭牌就是中发白,花牌就是春夏秋冬梅兰竹菊
const BYTE m_cbCardDataArray[MAX_REPERTORY]=
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//万子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//同子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,//索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,//索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,//索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,//索子
0x31,0x32,0x33,0x34,//风牌
0x31,0x32,0x33,0x34,//风牌
0x31,0x32,0x33,0x34,//风牌
0x31,0x32,0x33,0x34,//风牌
0x41,0x42,0x43,//箭牌
0x41,0x42,0x43,//箭牌
0x41,0x42,0x43,//箭牌
0x41,0x42,0x43,//箭牌
0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,//花牌
};
有了顺序的数组,然后就能够打乱
打乱牌的函数
//混乱扑克
#define CountArray(Array) (sizeof(Array)/sizeof(Array[0]))
static void RandCardData(BYTE cbCardData[],BYTE cbMaxCount)
{
//混乱准备
BYTE cbCardDataTemp[CountArray(m_cbCardDataArray)];//为什么直接用MAX_REPERTORY?由于这样无耦合
memcpy(cbCardDataTemp,m_cbCardDataArray,sizeof(m_cbCardDataArray));//拷贝一份到暂时牌数组中
//混乱扑克(关键的核心打乱代码)
BYTE cbRandCount=0,cbPosition=0;
do
{
cbPosition=rand()%(cbMaxCount-cbRandCount);
cbCardData[cbRandCount++]=cbCardDataTemp[cbPosition];
cbCardDataTemp[cbPosition]=cbCardDataTemp[cbMaxCount-cbRandCount];
} while (cbRandCount<cbMaxCount);
return;
}
这样调用
BYTE _cardData[MAX_REPERTORY];
RandCardData(_cardData, MAX_REPERTORY);
以下是完整的控制台代码
//
// main.cpp
// MajiangLogicTest
//
// Created by TinyUlt on 14-8-16.
// Copyright (c) 2014年 TinyUlt. All rights reserved.
// #include <iostream>
using namespace std; #define MAX_REPERTORY 144
typedef unsigned char BYTE; //数组维数
#ifndef CountArray
#define CountArray(Array) (sizeof(Array)/sizeof(Array[0]))
#endif
const BYTE m_cbCardDataArray[MAX_REPERTORY]=
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //万子
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, //万子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //同子
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, //同子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //索子
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, //索子 0x31,0x32,0x33,0x34, //风牌
0x31,0x32,0x33,0x34, //风牌
0x31,0x32,0x33,0x34, //风牌
0x31,0x32,0x33,0x34, //风牌
0x41,0x42,0x43, //箭牌
0x41,0x42,0x43, //箭牌
0x41,0x42,0x43, //箭牌
0x41,0x42,0x43, //箭牌 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58, //花牌 };
//混乱扑克
static void RandCardData(BYTE cbCardData[],BYTE cbMaxCount)
{
//混乱准备
BYTE cbCardDataTemp[CountArray(m_cbCardDataArray)];//为什么不直接用MAX_REPERTORY? 由于这样无耦合
memcpy(cbCardDataTemp,m_cbCardDataArray,sizeof(m_cbCardDataArray));//拷贝一份到暂时牌数组中 //混乱扑克(关键的核心打乱代码)
BYTE cbRandCount=0,cbPosition=0;
do
{
cbPosition=rand()%(cbMaxCount-cbRandCount);
cbCardData[cbRandCount++]=cbCardDataTemp[cbPosition];
cbCardDataTemp[cbPosition]=cbCardDataTemp[cbMaxCount-cbRandCount];
} while (cbRandCount<cbMaxCount); return; } int main(int argc, const char * argv[]) {
// insert code here... BYTE _cardData[MAX_REPERTORY]; RandCardData(_cardData, MAX_REPERTORY); for (int i = 0 ; i < MAX_REPERTORY; i++) {
cout<<hex<<int(_cardData[i])<<" ";
} return 0;
}
输出:
25 13 1 3 21 43 54 14 9 12 13 8 31 24 13 31 6 4 28 31 34 18 7 27 15 18 51 11 42 12 28 2 57 25 16 4 33 15 18 21 42 33 29 41 25 3 23 55 14 41 27 22 34 21 2 9 29 19 43 23 22 22 19 34 16 15 32 58 6 28 17 21 18 8 43 28 33 32 6 33 2 25 14 11 29 19 26 13 4 24 53 52
16 15 27 3 27 31 9 1 26 22 3 32 17 26 26 7 12 42 41 32 17 8 7 9 34 8 7 16 17 41 19 5 29 2 23 6 4 24 42 24 1 56 11 1 12 5 23 11 14 43 5 5Program ended with exit code: 0
cocos2dx 制作单机麻将(一)的更多相关文章
- cocos2dx 制作单机麻将(二)
cocos2dx 制作单机麻将(二) 打乱麻将顺序2 前面解说了怎样打乱初始给定的麻将牌堆, 另一种是打乱随意给定的麻将牌堆 //混乱扑克2 void RandAppointCardData(BYTE ...
- cocos2dx 制作单机麻将(四)
cocos2dx 制作单机麻将(四) 麻将逻辑5.模拟出牌 // // main.cpp // MajiangLogicTest // // Created by TinyUlt on 14-8-16 ...
- cocos2dx 制作单机麻将(五)
cocos2dx 制作单机麻将(五) 麻将逻辑6 最基础的4人麻将逻辑(轮流循环出牌, 之前学的都能用上 跑起来了!!!) 最基础的麻将逻辑 依据自己须要 设置麻将人数GAME_PLAYER 基本流 ...
- 使用cocos2d-x制作 Texture unpacker
使用cocos2d-x制作 Texture unpacker 没错,就是unpacker. 在大多数游戏包里面,可以找到很多纹理图集,他们基本上是用texture packer制作的,有plist文件 ...
- cocos2dx 使得单麻将(三)
cocos2dx 使得单麻将(三) 麻将逻辑4.得到手牌数据 我们已经保存了一个一维数组, 类似于一个表格,统计出全部牌相应的数量, 但我们如何得到当前手中是什么牌呢 //扑克转换 BYTE Swit ...
- 只需要一点点C++基础,新手也可以制作单机游戏内存修改器
声明:本文只是为了初学C++的,能够做出一些实用的东西,跳出管理系统的束缚,提升学习的兴趣,在这里选取了单机游戏,请不要尝试在线游戏,违发而已未必可行.序:首先我们需要一个Qt+VS环境Qt从http ...
- cocos2d-x 制作系统公告
2013-12-15 21:57:33 下载地址:http://download.csdn.net/detail/jackyvincefu/6434549 (摘自:CSDN资源) CTestLayer ...
- cocos2d-x 制作资源下载页面
开发游戏中用到从http 服务器下载文件的操作,所以要有个界面显示下载进度,同时联网采用curl库,因为下载是同步的操作,所以用了多线程 啥也不说,直接贴代码.我是采用ccbi做的页面,你也可以做一个 ...
- 【cocos2d-x制作别踩白块儿】第一期:游戏介绍
这一系类文章.我们将来分析时下最火的一款游戏 -- 别踩白块儿. 无图无真相,先上图 这就是我们终于要完毕项目的效果图. 游戏刚開始的最以下有一栏为黄色,紧接着上面每一行都是有一个黑色块,其余为白色块 ...
随机推荐
- 增强SEO的div+css命名规则
页头:header登录条:loginBar标志:logo侧栏:sideBar广告:banner导航:nav子导航:subNav菜单:menu子菜单:subMenu搜索:search滚动:scroll页 ...
- [置顶] 让导入的Android项目,运行起来的方法。
Eclipse里面直接import的代码,不能运行出现如下错误: [2013-12-12 12:58:55 - Dex Loader] Unable to execute dex: java.nio. ...
- Android学习之一:Cygwin简介
为了能够一窥Android底层的东东,还是要搭建编译Android的环境.虽有Ubuntu和Suse系统,无奈总感觉在不同的系统下切来切去很是不便.在Windows工作学习,要编译Android,就不 ...
- 关于python抓取google搜索结果的若干问题
关于python抓取google搜索结果的若干问题 前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...
- 张佩的Dump服务
[亦请参考: http://www.yiiyee.cn/Blog/dumpservice/ ] 张佩提供 有偿但 价格极低的Dump文件分析服务 ! . 如果你有一个Dump文件——不管是应用程序还是 ...
- js实现表格的选中一行-------Day58
最開始想很多其它的用js来动态操作表格,是由于在应用了easyUI之后,发现直接写一个<table id="tt"></table>,这就够了,界面里面就剩 ...
- Android:解决client从server上获取数据乱码的方法
向server发送HTTP请求.接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity()," ...
- 关于VC6编译LPDIRECT3D8不通过的问题
重装了系统,打开以前的工程看看,重新编译发现类似的错误: error C2146: syntax error : missing ';' before identifier 'lpdi' fatal ...
- HOOK自绘原理 good
做“HOOK文件打开/保存对话框”的过程中,我首先研究了界面库的相关知识.界面库一般都是由C/C++这种中低级语言编码,这是因为在Windows下的界面库实现技术大都以直接操作控制Windows的消息 ...
- BestR #31
hdu 5178 求|a[i] - a[j]| <= k (i < j) <i,j>的对数,一开始认为数据不大就直接ans++了,后来结果出来才知道,啊啊啊,too young ...