撲克牌發牌+判斷牌種 c++
發牌的程式碼:(未完成,只有發牌)
#include
using namespace std;
/*牌的主鍵:color花色,point數字
print_card():印出牌的花色和數字,set_a_card():設定牌的花色和數字*/
class Card
{
private:
char color;
int point;
public:
Card();
void print_card();
void set_a_card(char, int);
};
/*設定初始值:花色是梅花'S',數字為0*/
Card::Card()
{
color='S';
point=0;
}
/*印出結果花色和數字*/
void Card::print_card()
{
cout << color << point << "\n";
};
/*建構子 : 設定管道用參數c來設定private裡的color
用參數p來設定private裡的point*/
void Card::set_a_card(char c, int p)
{
color = c;
point = p;
};
/*撲克牌的規格有52張牌,操作方法:
card_initialization() 洗牌
check_dealed(int) 回傳牌為未知
get_a_card() 取得一張未知牌
getPoint(int) 取得數字
getColor(int) 取得花色*/
class Poker_card
{
private:
bool is_dealed[52];
public:
void card_initialization();
bool check_dealed(int);
int get_a_card();
int getPoint(int);
char getColor(int);
};
/*設定52張牌 都是0 沒有花色和數字*/
void Poker_card::card_initialization()
{
int i;
for(i=0;i<52;i++) is_dealed[i] = false;
};
/*回傳布林數值"0"-->回傳每張牌都是空白*/
bool Poker_card::check_dealed(int i)
{
return is_dealed[i];
};
/*rand()亂數%52 ??? --->問小黑
取得一張牌 當結果的值為1 ,i是1-52的亂數
設定如果上上個涵式check_dealed(i)值不為1,則is_dealed[i]的值為1 回傳i*/
int Poker_card::get_a_card()
{
int i;
while(1)
{
i = rand() % 52;
if(!check_dealed(i))
{
is_dealed[i] = true;
break;
}
}
return i;
};
/*取得數字:每個花色有1-13的數字,所以i%13*/
int Poker_card::getPoint(int i)
{
return i % 13 +1;
};
/*取的花色:c1是get_a_card()取得i亂數除以13
set_a_card()--->color=c; 用c參數成管道設定花色
黑桃 00-13 所以除以 13為0 設如果c1=0 則c='S'
愛心 13-26 所以除以 13為1 設如果c1=1 則c='H'
菱形 26-39 所以除以 13為2 設如果c1=1 則c='D'
梅花 39-52 所以除以 13為3 設如果c1=1 則c='C'*/
char Poker_card::getColor(int i)
{
int c1;
char c;
c1 = i / 13;
if(c1 == 0) c = 'S';
if(c1 == 1) c = 'H';
if(c1 == 2) c = 'D';
if(c1 == 3) c = 'C';
return c;
};
Poker_card pc;
/*Player玩家有name名字Card card_of_hand[5]手上有5張牌
void card_dealing()--->發牌;
void print_hand_of_card()--->;
*/
class Player
{
private:
char *name;
Card card_of_hand[5];
public:
Player(char *);
void card_dealing();
void print_hand_of_card();
};
/*建構子 : 設定管道用參數x來設定private裡的name*/
Player::Player(char *x)
{
name = x;
}
/*發牌給五個人 pc.get_a_card(): Poker_card pc.取得一張未知牌為亂數j
p = pc.getPoint(j) --->會用到亂數j 取得數字
c = pc.getColor(j) --->會用到亂數j 取得花色
參數c,p是上述建構子Card::set_a_card(char c, int p)
card_of_hand[i].set_a_card(c,p);手上此張牌.設定一張牌的花色和數字*/
void Player::card_dealing()
{
int i,j,p;
char c;
for(i=0;i<5;i++)
{
j = pc.get_a_card();
p = pc.getPoint(j);
c = pc.getColor(j);
card_of_hand[i].set_a_card(c,p);
}
};
/*印出手上的五張牌*/
void Player::print_hand_of_card()
{
int i,j;
cout << "The cards of " << name << " :\n";
for(i=0;i<5;i++)
{
card_of_hand[i].print_card();
}
cout << "-----------------------\n";
};
/*
1.玩家設定
2.洗牌
3.發牌給每個人
4.印出每個人手上的五張牌*/
int main(void)
{
int i;
Player pp[4]={"cherry","moon","fish","big knife"};
pc.card_initialization();
for(i=0;i<4;i++)
{
pp[i].card_dealing();
pp[i].print_hand_of_card();
}
system("pause");
return 0;
}
Previous in This Category: c語言程式 加法(迴圈的計算)










1樓
1樓搶頭香
好強 拍拍手!
2樓
2樓頸推
大家好我新開ㄉ遊戲資訊論壇
歡迎大家有空來逛逛
3樓
3樓坐沙發
srrt <p>
加油!加油!<br>
GAY男同志視訊聊天室<br>
http://pix.GoGoBoy.TV<p>
ppwwn <br>
4樓
福樓
\( ● ⌒ ∇ ⌒ ● )/