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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 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초 동안 나타났다가 옵션을 클릭하기 전에 빠르게 사라진다고 보고했습니다. Microsoft Office에서 마우스 오른쪽 버튼 클릭이 작동하지 않는 이유는 무엇입니까? Word 및 PowerPoint와 같은 Office 응용 프로그램에서 마우스 오른쪽 버튼 클릭이 작동하지 않는 경우 이는 일반적으로 타사 추가 기능으로 인해 발생합니다. 마우스 위치가 올바르지 않은 경우

1. PPT를 시작하고 새 빈 문서를 만든 다음 모든 텍스트 상자를 선택하고 삭제합니다. 2. Insert-Shape 명령을 실행하고 문서에서 직사각형을 드래그한 다음 도형을 검정색으로 채웁니다. 3. 직사각형을 드래그하여 늘린 다음, Insert-Shape 명령을 실행하고, 작은 정사각형을 드래그한 후 채우기 색상을 흰색으로 설정합니다. 4. 필름 양면에 상단과 하단이 고르게 분포되도록 작은 사각형을 하나씩 복사하여 붙여넣습니다. Ctrl+A로 모두 선택한 후 마우스 오른쪽 버튼을 클릭하고 그룹을 선택합니다. 5. 삽입-그림 명령을 실행하여 팝업 대화 상자에서 삽입할 그림을 찾아 클릭하여 열고 그림의 크기와 위치를 조정합니다. 6. 필름 사진을 만들기 위해 5단계를 반복하여 나머지 사진을 삽입하고 설정합니다. 7. 영화를 선택하고 애니메이션 추가 명령을 실행합니다.

토마토 소설 표지 만드는 법 토마토 소설에서만 단독 소설 표지를 만들 수 있는데, 대부분의 친구들은 토마토 소설 표지 만드는 법을 모릅니다. 다음은 에서 가져온 토마토 소설 표지 만드는 방법 사진입니다. 편집자가 플레이어에게 텍스트 튜토리얼을 전달합니다. 관심 있는 플레이어가 와서 살펴보세요! 토마토 소설 활용 튜토리얼 토마토 소설 표지 만드는 방법 1. 먼저 토마토 소설 APP을 열고 작품 관리 페이지에 들어가 새 책을 만든 후 아래 화살표와 같이 [표지 템플릿]을 선택합니다. 표지 템플릿 페이지에서 마음에 드는 표지 템플릿을 선택하세요. 3. 최종 표지 선택 후 오른쪽 상단의 [확인]을 클릭하세요.

모바일 엑셀 테이블 생성 튜토리얼 모바일 기기의 대중화와 기술의 지속적인 발전으로 인해 휴대폰은 일상생활과 업무에 없어서는 안 될 도구 중 하나가 되었습니다. 휴대폰에서 Excel 스프레드시트를 사용하면 데이터를 쉽게 기록, 계산, 분석할 수 있어 업무 효율성이 향상됩니다. 이 기사에서는 휴대폰에서 Excel 표를 만드는 기본 작업 및 기술을 공유합니다. 1. 적합한 애플리케이션을 선택하세요. GoogleSheets, Micro 등 선택할 수 있는 모바일 Excel 애플리케이션이 많이 있습니다.

PPT를 만들 때 애니메이션 효과를 사용하지 않는 것보다 애니메이션 효과를 사용하면 더 생동감 있고 귀엽게 보일 수 있습니다. 애니메이션 효과를 추가하면 사람들이 이 PPT를 보고 싶어할 수도 있으므로 PPT에 애니메이션 효과를 만드는 방법을 배워야 합니다. 다음으로는 PPT에 애니메이션 효과를 추가하는 방법을 자세히 소개하겠습니다. 계속해서 이 단계를 주의 깊게 읽고 연구해 보시기 바랍니다. 도움이 될 것입니다. 먼저 우리가 직접 만든 PPT를 열어보세요. 현재 이 PPT에는 애니메이션 효과가 없습니다(아래 그림의 빨간색 화살표 참조). 2. 그런 다음 사진에 애니메이션 효과를 추가해야 합니다. 먼저 사진을 선택한 다음 메뉴 바 상단의 [애니메이션] 버튼을 클릭합니다(아래 그림의 빨간색 원 참조). 3. 다음으로 애니메이션 내부를 클릭합니다.

CSS를 사용하여 카운트다운 효과를 만드는 방법 카운트다운 효과는 사용자에게 카운트다운의 동적 효과를 제공하고 사람들에게 긴박감과 기대감을 줄 수 있습니다. 이 문서에서는 CSS를 사용하여 카운트다운 효과를 얻는 방법을 소개하고 자세한 구현 단계와 코드 예제를 제공합니다. 구현 단계는 다음과 같습니다. 1단계: HTML 구조 구성 먼저 HTML로 div 컨테이너를 만들어 카운트다운 콘텐츠를 래핑합니다. 예: <divclass="countd

졸업논문에는 표지, 목차, 끝 등이 있어야 논문이 완성됩니다. 지난 호에서는 편집자가 Word에서 목차를 만드는 방법을 친구들과 공유했습니다. 이번 호에서는 단어 표지를 만드는 방법을 알려 드리겠습니다. ! 1. 먼저 아래 그림과 같이 표지를 만들려는 워드 문서를 엽니다. 2. 그런 다음 메뉴 바에서 [Chapter] 버튼을 클릭하고 표지를 선택하는 기능과 동일합니다. 아래 그림의 빨간색 원 부분과 같이 적절하고 아름다운 표지를 직접 선택할 수 있는 표지 라이브러리: 3. 클릭하면 업종, 회사 계약에 적합한 표지, 서류; 이력서 유형, 취업 활동 및 이력서 제출에 적합 친구, 잠깐만요, 알았죠?

소프트웨어에서 삽입 옵션을 클릭하고, 새로운 빈 프레젠테이션을 만들고, 제목과 텍스트를 입력하고, 텍스트와 개체의 표시 순서를 설정하세요. 튜토리얼 적용 모델: Lenovo AIO520C 시스템: Windows 10 Professional Edition: PowerPoint 2022 분석 1 PPT를 연 후 파일 옵션을 클릭하고 새 빈 프레젠테이션을 선택합니다. 2주제와 텍스트를 입력하고 오디오, 사진, 비디오 및 기타 효과를 추가합니다. 3마지막으로 필요에 따라 텍스트와 개체의 표시 순서와 애니메이션 효과를 설정합니다. 보충: ppt에 동영상을 삽입하는 방법 1. 먼저 클릭하여 PowerPoint 소프트웨어를 열고 입력한 후 왼쪽 상단에 있는 삽입 옵션을 클릭합니다. 2 그런 다음 오른쪽 상단 모서리에 있는 비디오 옵션을 클릭합니다. 3. 팝업창이 나타나면 해당 파일에서 동영상을 클릭하세요. 4그런 다음
