C++ 紙牌對象(Card)

2023-03-20 16:23 更新

如果你對玩紙牌尚不熟悉,那最好現(xiàn)在就去拿一副,否則你會(huì)感覺這一章沒什么意思。一副牌有52張,每張都有一個(gè)花色(4種花色之一)和大?。?3個(gè)值之一)。按橋牌中下降的順序排列,4種花色分別是黑桃(Spades)、紅桃( Hearts)、方塊(Diamonds)和梅花(Clubs)。大小包括A、2、3、4、5、6、7、8、9、10、J、Q和K。根據(jù)不同紙牌游戲的規(guī)則,A可能比K大,也可能比2小。

如果要定義新對象表示紙牌,很明顯,實(shí)例變量應(yīng)該是大小和花色。不過,實(shí)例變量以什么類型定義可能就沒這么明顯了。一個(gè)方法是使用apstring類型,比如用字符串“Spade”表示花色,而用字符串“Queen”表示大小。其缺點(diǎn)是難以比較兩張牌的花色和大小。

另一個(gè)可選的方法是,使用整型數(shù)給大小和花色編碼。這里的編碼,并不是很多人認(rèn)為的加密(或者說譯成密碼)。在計(jì)算機(jī)科學(xué)家的心目中,編碼就像是在數(shù)字序列和希望表示的事物之間定義一個(gè)映射。例如,

Spades          |→ 3
Hearts           |→ 2
Diamonds     |→ 1
Clubs             |→ 0

“ |→”是表示映射的數(shù)學(xué)符號(hào)。該映射最明顯的特性是,花色按順序映射到整型數(shù),所以我們可以通過比較整型數(shù)來比較花色。牌大小的映射也是顯而易見的,每個(gè)數(shù)字大小映射到相應(yīng)的整型數(shù),帶人像的撲克牌以下面方式映射:

J        |→ 11
Q       |→ 12
K       |→ 13

使用數(shù)學(xué)符號(hào)表示映射的原因是,映射并非C++程序的一部分,而是程序設(shè)計(jì)的一部分,但是它們從來不會(huì)顯式地出現(xiàn)在代碼中。Card類型的定義如下:

struct Card
{
  int suit, rank;

  Card ();
  Card (int s, int r);
};

Card::Card () {
  suit = 0; rank = 0;
}

Card::Card (int s, int r) {
  suit = s; rank = r;
}

Card有兩個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)沒有返回類型且與結(jié)構(gòu)體同名,通過這兩點(diǎn)可以識(shí)別它們。第一個(gè)構(gòu)造函數(shù)不接受任何參數(shù),它把實(shí)例變量初始化為無效值(梅花0)。

第二個(gè)構(gòu)造函數(shù)更加有用,它有兩個(gè)參數(shù),分別是紙牌的花色和大小。

下面代碼創(chuàng)建了一個(gè)名為threeOfClubs的對象,它表示梅花3。

Card threeOfClubs (0, 3);

第一個(gè)參數(shù)0表示花色為梅花,第二個(gè)參數(shù)自然是表示牌的大小為3。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)