cocos2dx 制作单机麻将(四)
cocos2dx 制作单机麻将(四) 麻将逻辑5.模拟出牌 [cpp] view plaincopy // //main.cpp //MajiangLogicTest // //CreatedbyTinyUlton14-8-16. //Copyright(c)2014年TinyUlt.Allrightsreserved. // #includeiostream using namespace std; #defineMAX_REPERTORY
cocos2dx 制作单机麻将(四)
麻将逻辑5.模拟出牌
[cpp] view
plaincopy
- //
- // main.cpp
- // MajiangLogicTest
- //
- // Created by TinyUlt on 14-8-16.
- // Copyright (c) 2014年 TinyUlt. All rights reserved.
- //
-
#include
- using namespace std;
- #define MAX_REPERTORY 144
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- //数组维数
- #ifndef CountArray
- #define CountArray(Array) (sizeof(Array)/sizeof(Array[0]))
- #endif
- //逻辑掩码
- #define MASK_COLOR 0xF0 //花色掩码
- #define MASK_VALUE 0x0F //数值掩码
- #define MAX_INDEX 42 //最大索引
- #define MAX_COUNT 14 //最大数目
- 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, //花牌
- };
- const char* m_cbCardWordArray[MAX_INDEX]=
- {
- "一万","二万","三万","四万","五万","六万","七万","八万","九万",
- "一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒",
- "一索","二索","三索","四索","五索","六索","七索","八索","九索",
- "东", "南", "西", "北", "中", "发", "白",
- "春", "夏", "秋", "冬", "梅", "兰", "竹", "菊"
- };
- //混乱扑克
- 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
- return;
- }
- //混乱扑克2
- void RandAppointCardData(BYTE cbCardData[],BYTE cbMaxCount,BYTE OriginalData[]/*源牌堆数据*/)
- {
- //混乱扑克
- BYTE cbRandCount=0,cbPosition=0;
- do
- {
- cbPosition=rand()%(cbMaxCount-cbRandCount);
- cbCardData[cbRandCount++]=OriginalData[cbPosition];
- OriginalData[cbPosition]=OriginalData[cbMaxCount-cbRandCount];
-
} while (cbRandCount
- return;
- }
- //扑克转换(索引->牌值)
- BYTE SwitchToCardData(BYTE cbCardIndex)
- {
- //assert(cbCardIndex
- if(cbCardIndexreturn ((cbCardIndex/9)
- if(cbCardIndex>=31&&cbCardIndexreturn(((cbCardIndex/7)
- if(cbCardIndex>33) return(cbCardIndex+0x2F);
- //assert(false);
- return 0;
- }
- //扑克转换(牌型->索引)
- BYTE SwitchToCardIndex(BYTE cbCardData)
- {
- // ASSERT(IsValidCard(cbCardData));
- if((cbCardData&MASK_COLOR)
- return (((cbCardData&MASK_COLOR)>>4)*9+(cbCardData&MASK_VALUE)-1);
- if((cbCardData&MASK_COLOR)==0x40)
- return (31+(cbCardData&MASK_VALUE)-1);
- if((cbCardData&MASK_COLOR)==0x50)
- return (34+(cbCardData&MASK_VALUE)-1);
- //ASSERT(false);
- return 0;
- }
- //扑克转换
- BYTE SwitchToCardData(BYTE cbCardIndex[MAX_INDEX]/*传入统计所有牌数量的表格*/, BYTE cbCardData[MAX_COUNT]/*传出手牌数据*/)
- {
- //转换扑克
- BYTE cbPosition=0;
-
for (BYTE i=0;i
- {
- if (cbCardIndex[i]!=0)
- {
-
for (BYTE j=0;j
- {
-
// ASSERT(cbPosition
- cbCardData[cbPosition++]=SwitchToCardData(i);
- }
- }
- }
- return cbPosition;//返回手牌数
- }
- //根据中文牌,得到牌索引
- int getIndexByWord(const char* ch)
- {
- for (int i = 0; i
- {
- if (!strcmp(ch,m_cbCardWordArray[i]))
- {
- return i;
- }
- }
- return -1;
- }
- //删除扑克
- bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard)
- {
- //效验扑克
- //ASSERT(IsValidCard(cbRemoveCard));
- BYTE cbRemoveIndex=SwitchToCardIndex(cbRemoveCard);
- //ASSERT(cbCardIndex[cbRemoveIndex]>0);
- //删除扑克
- if (cbCardIndex[cbRemoveIndex]>0)
- {
- cbCardIndex[cbRemoveIndex]--;
- return true;
- }
- //失败效验
- // ASSERT(FALSE);
- return false;
- }
- int main(int argc, const char * argv[])
- {
- // insert code here...
- /*第一种混乱发*/
- //创建一个空牌堆
- BYTE _cardData1[MAX_REPERTORY];
- //把在该函数中创建并打乱牌堆,然后把指针传给_cardData;
- RandCardData(_cardData1, MAX_REPERTORY);
- //输出牌数据
- cout"混乱初始牌堆"
- for (int i = 0 ; i
- {
- cout"0x"int(_cardData1[i])" ";
- }
- cout
- cout
- /*第二种混乱发*/
- //创建一个空牌堆
- BYTE _cardData2[MAX_REPERTORY];
- //把在该函数中创建并打乱牌堆,然后把指针传给_cardData;
- RandAppointCardData(_cardData2, MAX_REPERTORY,_cardData1);
- //输出牌数据
- cout"混乱指定牌堆"
- for (int i = 0 ; i
- {
- cout"0x"int(_cardData2[i])" ";
- }
- cout
- cout
- /*添加手牌*/
- //虚拟一副手牌 开始游戏时,每人13张手牌,然后庄家再摸一张牌即14张
- //我们使用上面初始化好的牌堆,进行摸牌,假设只有一个玩家
- BYTE cbCardIndex[MAX_INDEX];
- for (int i = 0; i
- {
- BYTE _cardValue = _cardData2[i];//得到牌堆中的牌
- int _index = SwitchToCardIndex(_cardValue);//得到该牌对应的索引
- cbCardIndex[_index]++;//该牌型加一
- }
- cout"输出所有牌型对应的数量"
- for (int i = 0; i
- {
- cout"(0x"int(SwitchToCardData(i))"):"int)cbCardIndex[i]" ";//输出手牌中所有牌型对应的数量
- }
- cout
- cout
- cout"输出手牌数据"
- BYTE cbCardData[MAX_COUNT];
- int _handsCount = (int)SwitchToCardData(cbCardIndex,cbCardData);
- cout"手牌数量为:"
- for (int i = 0 ; i
- {
- cout"(0x"int)cbCardData[i]") ";
- }
- cout
- cout
- /*出牌*/
- char ch[20];
- cout"输入要出的牌(比如 三万): ";
- cin>>ch;
- int _outCardIndex = getIndexByWord(ch);
- if (_outCardIndex == -1)
- {
- cout"输入错误"
- return 0;
- }
- BYTE _outCardValue = SwitchToCardData(_outCardIndex);
- bool _b = RemoveCard(cbCardIndex, _outCardValue);
- if (_b)
- {
- cout"出牌成功"
- }
- else
- {
- cout"该牌不存在"
- }
- BYTE _leftCardData[MAX_COUNT];
- int _leftHandsCount = (int)SwitchToCardData(cbCardIndex,_leftCardData);
- cout"手牌数量为:"
- cout"手牌数据为:"
- for (int i = 0 ; i
- {
- cout"(0x"int)_leftCardData[i]") ";
- }
- cout
- return 0;
- }
混乱初始牌堆
0x25 0x13 0x1 0x3 0x21 0x43 0x54 0x14 0x9 0x12 0x13 0x8 0x31 0x24 0x13 0x31 0x6 0x4 0x28 0x31 0x34 0x18 0x7 0x27 0x15 0x18 0x51 0x11 0x42 0x12 0x28 0x2 0x57 0x25 0x16 0x4 0x33 0x15 0x18 0x21 0x42 0x33 0x29 0x41 0x25 0x3 0x23 0x55 0x14 0x41 0x27 0x22 0x34 0x21 0x2 0x9 0x29 0x19 0x43 0x23 0x22 0x22 0x19 0x34 0x16 0x15 0x32 0x58 0x6 0x28 0x17 0x21 0x18 0x8 0x43 0x28 0x33 0x32 0x6 0x33 0x2 0x25 0x14 0x11 0x29 0x19 0x26 0x13 0x4 0x24 0x53 0x52 0x16 0x15 0x27 0x3 0x27 0x31 0x9 0x1 0x26 0x22 0x3 0x32 0x17 0x26 0x26 0x7 0x12 0x42 0x41 0x32 0x17 0x8 0x7 0x9 0x34 0x8 0x7 0x16 0x17 0x41 0x19 0x5 0x29 0x2 0x23 0x6 0x4 0x24 0x42 0x24 0x1 0x56 0x11 0x1 0x12 0x5 0x23 0x11 0x14 0x43 0x5 0x5
混乱指定牌堆
0x16 0x56 0x21 0x7 0x28 0x14 0x41 0x12 0x16 0x24 0x43 0x21 0x31 0x26 0x3 0x53 0x52 0x7 0x12 0x34 0x51 0x14 0x9 0x29 0x23 0x33 0x12 0x31 0x14 0x6 0x16 0x18 0x54 0x21 0x25 0x58 0x19 0x5 0x7 0x28 0x32 0x34 0x1 0x27 0x27 0x33 0x6 0x14 0x9 0x17 0x25 0x33 0x28 0x11 0x17 0x24 0x43 0x2 0x22 0x6 0x23 0x3 0x11 0x42 0x2 0x18 0x3 0x4 0x42 0x4 0x18 0x55 0x25 0x42 0x22 0x32 0x4 0x15 0x8 0x29 0x24 0x13 0x6 0x26 0x19 0x9 0x41 0x25 0x7 0x8 0x1 0x13 0x11 0x15 0x41 0x43 0x57 0x16 0x33 0x18 0x32 0x27 0x1 0x8 0x12 0x31 0x4 0x5 0x27 0x22 0x26 0x23 0x31 0x2 0x5 0x17 0x26 0x13 0x19 0x43 0x17 0x21 0x42 0x5 0x3 0x19 0x23 0x15 0x28 0x15 0x8 0x24 0x9 0x29 0x13 0x32 0x34 0x2 0x34 0x41 0x11 0x29 0x22 0x1
输出所有牌型对应的数量
一万(0x1):0 二万(0x2):0 三万(0x3):0 四万(0x4):0 五万(0x5):0 六万(0x6):0 七万(0x7):1 八万(0x8):0 九万(0x9):0 一筒(0x11):0 二筒(0x12):1 三筒(0x13):0 四筒(0x14):1 五筒(0x15):0 六筒(0x16):2 七筒(0x17):0 八筒(0x18):0 九筒(0x19):0 一索(0x21):2 二索(0x22):0 三索(0x23):0 四索(0x24):1 五索(0x25):0 六索(0x26):1七索(0x27):0 八索(0x28):1 九索(0x29):0 东(0x31):1 南(0x32):0 西(0x33):0 北(0x34):0 中(0x41):1 发(0x42):0白(0x43):1 春(0x51):0 夏(0x52):0 秋(0x53):0 冬(0x54):0 梅(0x55):0 兰(0x56):1 竹(0x57):0 菊(0x58):0
输出手牌数据
手牌数量为:14
七万(0x7) 二筒(0x12) 四筒(0x14) 六筒(0x16) 六筒(0x16) 一索(0x21) 一索(0x21) 四索(0x24) 六索(0x26) 八索(0x28) 东(0x31) 中(0x41) 白(0x43) 兰(0x56)
输入要出的牌(比如 三万): 七万
出牌成功
手牌数量为:13
手牌数据为:
二筒(0x12) 四筒(0x14) 六筒(0x16) 六筒(0x16) 一索(0x21) 一索(0x21) 四索(0x24) 六索(0x26) 八索(0x28)东(0x31) 中(0x41) 白(0x43) 兰(0x56)
Program ended with exit code: 0

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
![右鍵單擊無法在Word或PowerPoint中工作[修復]](https://img.php.cn/upload/article/000/887/227/170901479016252.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
一些Office用戶報告說,他們的滑鼠右鍵在Word和PowerPoint中無法正常運作。當他們右鍵點擊文件中的空白處或元素時,他們不會得到任何上下文選單,其中包含貼上選項、字體、格式化背景、格式化圖片、新註釋等選項。一些用戶報告說,當他們按滑鼠右鍵時,上下文選單會出現1-2秒,然後在他們單擊任何選項之前迅速消失。為什麼我的右鍵在MicrosoftOffice中不起作用?如果右鍵單擊在Word、PowerPoint等Office應用程式中不起作用,通常是第三方加載項導致的。如果您的滑鼠未處於正確的

手機Excel表格製作教學隨著行動裝置的普及和技術的不斷進步,手機成為了我們日常生活和工作中不可或缺的工具之一。在手機上使用Excel表格,可以輕鬆進行資料記錄、計算和分析,提高工作效率。本文將為大家分享手機Excel表格製作的基本操作與技巧。一、選擇合適的應用程式目前市面上有許多可供選擇的手機Excel應用程序,例如GoogleSheets、Micro

1、啟動PPT,新建一個空白文檔,選擇所有的文字方塊將其刪除。 2、執行插入-形狀指令,在文件中拖曳出一個長方形,形狀顏色填滿為黑色。 3.拖曳長方形將其拉長,執行插入-形狀指令,拖曳出小正方形,設定填滿顏色為白色。 4.依序複製黏帖小正方形,使上下均勻分佈在膠卷兩側,ctrl+a選擇所有的之後,右鍵點選選擇組合。 5.執行插入-圖片指令,在彈出的對話框中找到需插入的圖片,點選打開,調整圖片大小和位置。 6.重複步驟5依序將其餘的圖片進行插入並設置,形成一個膠卷圖片的形式。 7.選擇膠卷,執行動畫-新增動畫命

番茄小說封面怎麼製作?番茄小說中是可以製作專屬的小說封面,但是多數的小伙伴不知道番茄小說當中的封面該如何的製作,接下來就是小編為玩家帶來的番茄小說封面製作方法圖文教程,有興趣的玩家快來一起看看吧!番茄小說使用教學番茄小說封面怎麼製作1、先打開番茄小說APP,進入到作品管理頁面創建新書,選擇下圖箭頭所示的【封面模板】;2、然後進入到封面模板頁面,選擇喜愛的封面模板;3、最後選擇封面完成後點選右上角【確認】即可。

如何使用CSS製作倒數計時效果的實現步驟倒數效果是網頁開發中常見的一個功能,可以為用戶呈現倒數計時的動態效果,給人以緊迫感和期待感。本文將介紹如何使用CSS來實現倒數計時效果,並提供詳細的實作步驟和程式碼範例。實作步驟如下:步驟一:HTML結構建構首先,在HTML中建立div容器,用於包裹倒數計時的內容。例如:<divclass="countd

一篇畢業論文一定要有封面、有目錄、有結尾等等,這才能說明一篇論文是完整的。上期小編已經給朋友們分享了word怎麼製作目錄啦,這期跟大家分享word封面的製作方法,不會製作的趕快來吧! 1.首先,我們打開自己想要製作封面的word文檔,如下圖所示:2.然後,我們點擊選單列上【章節】按鈕,選擇封面頁,這個功能相當於一個封面庫,你可以在裡面自行挑選合適精美的封面,如下圖紅色圈出部分所示:3.點擊後,你可以看到各種類型的封面,例如商務類型,適合公司合約、文件;履歷類型,適合找工作投履歷的朋友等等,還可

製作PPT的時候使用一些動畫效果會比沒有使用動畫效果的顯得活潑可愛,加上動畫效果大家也許就喜歡看這個PPT,所以我們必須要學會PPT製作動畫效果的方法。接下來,我將為大家詳細介紹如何在PPT中加入動畫效果。請繼續往下閱讀,認真學習這些步驟,相信對你會有幫助!首先,打開我們自己製作的PPT,您會注意到這個PPT目前沒有任何動畫效果(如下圖紅色箭頭所示)。 2.然後,我們需要為圖片新增動畫效果,我們先選取圖片,再點選選單列上邊的【動畫】按鈕,(如下圖紅色圈出部分所示)。 3.接下來,我們點選動畫裡邊的

最終幻想15是一款動作角色扮演遊戲,採用開放世界設計。您將飾演主角NoctisLucisCaelum,和三位夥伴共同展開冒險,完成主線與支線任務。結合大量單人任務、開放世界探索、即時戰鬥及豐富的角色扮演元素,為玩家帶來充實遊戲體驗。最終幻想15是單機還是網遊答:最終幻想15是單機遊戲1、作為正統續作,遊戲戰鬥系統表現出色,開放世界設定給玩家充分探索空間。 2.然而,部分玩家對遊戲劇情表示不滿,暗示性敘事使部分玩家無法享受到完整劇情體驗。 3.但劇情問題或許可以透過後續DLC來完善,因此問題不大。 4、
