古詩詞大全網 - 成語故事 - 簡易c++鬥地主源碼,簡單的鬥地主不需要ui,只要能發牌,隨機決定地主,把牌按大小順序排列

簡易c++鬥地主源碼,簡單的鬥地主不需要ui,只要能發牌,隨機決定地主,把牌按大小順序排列

#include <time.h>

#include <iostream>

#include <string>

#include <vector>

enum em_CardClass_t

{

_CC_hearts = 0, // 紅桃

_CC_Spade, // 黑桃

_CC_Clubs, // 梅花

_CC_Diamonds, // 方塊

_CC_King // 大小王

};

struct st_Card_t

{

em_CardClass_t _emCardClass;

UINT _uCardIndex; // _emCardClass為_CC_King時,有效取值[1,2]

// _emCardClass非_CC_King時,有效取值[1,13]

};

using namespace std;

void InitCard(vector<st_Card_t>& vtCard)

{

st_Card_t card;

for( UINT i=0; i<_CC_King; i++ )

{

card._emCardClass = (em_CardClass_t)i;

for( UINT j=1; j<14; j++ )

{

card._uCardIndex = j;

vtCard.push_back(card);

}

}

card._emCardClass = _CC_King;

card._uCardIndex = 1;

vtCard.push_back(card);

card._uCardIndex = 2;

vtCard.push_back(card);

}

// 分牌

void DealCard(vector<st_Card_t>& vtCard, vector<st_Card_t>& vtPlayer1,

vector<st_Card_t>& vtPlayer2, vector<st_Card_t>& vtPlayer3)

{

srand( (unsigned)time( NULL ) );

for( int i = 0; i < 51; i++ )

{

int iCard = rand() % vtCard.size();

switch( i % 3 )

{

case 0:

vtPlayer1.push_back(vtCard[iCard]);

break;

case 1:

vtPlayer2.push_back(vtCard[iCard]);

break;

default:

vtPlayer3.push_back(vtCard[iCard]);

break;

}

if( iCard != vtCard.size()-1 )

{

vtCard[iCard] = vtCard[vtCard.size()-1];

}

vtCard.pop_back();

}

}

// 叫牌

int Bid(vector<st_Card_t>& vtCard, vector<st_Card_t>& vtPlayer1,

vector<st_Card_t>& vtPlayer2, vector<st_Card_t>& vtPlayer3)

{

srand( (unsigned)time( NULL ) );

int iBider = rand() % 3; // 叫牌者,也就是地主

vector<st_Card_t>* pPlayer = NULL;

switch( iBider )

{

case 0:

pPlayer = &vtPlayer1;

break;

case 1:

pPlayer = &vtPlayer2;

break;

default:

pPlayer = &vtPlayer3;

break;

}

for( UINT i = 0; i < vtCard.size(); i++ )

{

pPlayer->push_back(vtCard[i]);

}

return iBider;

}

// 整牌(按紅桃、黑桃、梅花、方塊、小大王的花色順序整理,同壹花色再按從小到大的順序整理)

void SortCard(vector<st_Card_t>& vtPlayer)

{

st_Card_t tmp;

for( UINT i=0; i<vtPlayer.size()-1; i++ )

{

for( UINT j=i+1; j<vtPlayer.size(); j++ )

{

if( vtPlayer[i]._emCardClass < vtPlayer[j]._emCardClass )

{

continue;

}

if( vtPlayer[i]._emCardClass == vtPlayer[j]._emCardClass &&

vtPlayer[i]._uCardIndex < vtPlayer[j]._uCardIndex )

{

continue;

}

tmp = vtPlayer[i];

vtPlayer[i] = vtPlayer[j];

vtPlayer[j] = tmp;

}

}

}

void PrintPlayerCard(const string& sPlayerName,

const vector<st_Card_t>& vtPlayer)

{

cout << sPlayerName << " cards:" << endl;

for( UINT i=0; i< vtPlayer.size(); i++ )

{

switch( vtPlayer[i]._emCardClass )

{

case _CC_hearts:

cout << "紅桃";

break;

case _CC_Spade:

cout << "黑桃";

break;

case _CC_Clubs:

cout << "梅花";

break;

case _CC_Diamonds:

cout << "方塊";

break;

default:

cout << "King";

break;

}

cout << vtPlayer[i]._uCardIndex<< " ";

}

cout << endl << endl;

}

void main()

{

vector<st_Card_t> vtCard;

vector<st_Card_t> vtPlayer1;

vector<st_Card_t> vtPlayer2;

vector<st_Card_t> vtPlayer3;

InitCard(vtCard);

DealCard(vtCard, vtPlayer1, vtPlayer2, vtPlayer3);

int iBider = Bid(vtCard, vtPlayer1, vtPlayer2, vtPlayer3);

SortCard(vtPlayer1);

SortCard(vtPlayer2);

SortCard(vtPlayer3);

PrintPlayerCard("Player1", vtPlayer1);

PrintPlayerCard("Player2", vtPlayer2);

PrintPlayerCard("Player3", vtPlayer3);

cout <<"地主是Player"<< iBider+1 << endl << endl;

}