c++課程設(shè)計--一個21點的撲克牌游戲_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  -----------一個21點的撲克牌游戲</p><p>  一、課程名稱: 撲克牌</p><p>  二、班級和姓名: 某某</p><p><b>  三、課程設(shè)計要求</b></p><p>  所有的函數(shù)與相應(yīng)的數(shù)據(jù)封裝到類中,改寫主程序使其更加完善。</p><

2、p>  程序中一共有13張撲克牌可以隨機抽取,大于10的點數(shù)全部為半點。</p><p>  莊家永遠不會暴莊,莊家可以查看下一張牌,若大于21點,則拒絕。</p><p>  高級玩家可以查看下一張牌,按H鍵,然后按要求輸入密碼,密碼正確可以看牌,并決定是否要牌。</p><p>  每次要牌后可以設(shè)定賠率,如果開始是下的10元錢的注,如果牌好,你可以

3、要求再下注,當(dāng)然不能超過你所有的總錢數(shù)。</p><p>  將界面提示說明改成中文界面,界面的解釋詳細友好,可以吸引更多玩家</p><p><b>  四、功能說明:</b></p><p>  本程序首先編寫了一個類,將程序中定義的函數(shù)和數(shù)據(jù)封裝到類中。這樣不僅滿足了設(shè)計要求也使整個程序的結(jié)構(gòu)更加一目了然。然后對10以上的牌重新附值為0.

4、5以符合題目要求。接下來設(shè)計了防止莊家暴莊的函數(shù),超級玩家看牌的函數(shù),計算累計總賭注的函數(shù)。使程序真正完善起來。數(shù)據(jù)和函數(shù)是用類封裝在一起的,</p><p>  五、采用的主要數(shù)據(jù)結(jié)構(gòu)類型</p><p>  (1)本程序進行了類的封裝,編寫了一個類來封裝所有相關(guān)函數(shù)和變量,把源程序封裝在類中,然后對main主函數(shù)進行改寫,結(jié)構(gòu)清晰,條理有序,使得修改十分便捷,一目了然。</p&g

5、t;<p>  題目要求把抽到的大于10點的牌的點數(shù)設(shè)為半點。按照要求將隨機取下一張牌的成員函數(shù),判斷牌的點數(shù)是否大于10的if語句中大于10的牌重新賦值為0.5。</p><p>  例:if(playercard1>10)</p><p><b>  {</b></p><p>  playercard1=0.5;<

6、;/p><p><b>  }</b></p><p> ?。?)題目要求莊家永遠不會暴莊,莊家取下一張之前先判定取牌后的總點數(shù)是否會大于21點,大于的話就拒絕去下一張,小于時就繼續(xù)取牌,在函數(shù)中首先隨機產(chǎn)生下一張牌,接著用條件語句判定原有點數(shù)與新牌點數(shù)之和是否大于21點,然后決定是否取牌。</p><p>  例:if(cpu<21)

7、 //判斷莊家的點數(shù)</p><p><b>  { </b></p><p>  cout<<"\t\t\t莊家要了一張牌。"<<endl; </p><p>  cout<<"\t\t\t這牌是:"<&l

8、t;card<<endl; //顯示牌的點數(shù)</p><p>  cout<<"\t\t\t總數(shù)是 :"<<cpu<<endl; //顯示莊家的總點數(shù)</p><p><b>  } </b></p><p>  else cpu

9、=cpu-card; //如果點數(shù)超出21點,則不要牌了</p><p><b>  }</b></p><p>  題目要求超級玩家在輸入密碼后可以查看下一張牌,只需設(shè)計一成員函數(shù),判定玩家是否繼續(xù)要牌之前加入對玩家是否輸入H鍵的判定,如果有輸入則調(diào)用為處理玩家輸入密碼而單獨編寫的成員函數(shù),在該函數(shù)中,首先判定玩家的輸入密碼是否正確,正確后才可以看下一

10、張牌。</p><p>  例:void fuctions::mima(char &ans,double&card,double&player) //定義一個密碼函數(shù)</p><p><b>  { </b></p><p>  int s1=1234,m1; //定義兩個整型并對

11、一個進行賦值</p><p>  cout<<"請輸入密碼(四位數(shù)字):"; //提示輸入密碼 </p><p>  cin>>m1; //輸入密碼</p><p>  if(s1==m1) //判斷密碼

12、是否相符</p><p><b>  {</b></p><p>  cout<<"\t\t\t下一張牌是:"<<card<<endl; //顯示下一張牌</p><p><b>  }</b></p><p>  else cout&l

13、t;<"密碼錯誤"<<endl; //提示密碼錯誤</p><p><b>  }</b></p><p>  (3)題目要求玩家可以根據(jù)手上的牌決定是否下注,只需設(shè)計一成員函數(shù),檢查玩家的賭注累計不超過他所擁有的總資。</p><p>  例:void fuctions::Du

14、zhu(int&money,int&bett) //定義一個陪率函數(shù)</p><p><b>  {</b></p><p><b>  char ans;</b></p><p>  bett=0; //將0賦值給賭注</p>

15、<p>  cout<<"你還要下注嗎?(是'Y'/否'N'):"; //提示玩家是否還要下注</p><p><b>  cin>>ans;</b></p><p>  if((ans=='y')||(ans=='Y'))

16、 //判斷玩家是否還要下注</p><p><b>  {</b></p><p>  cout<<"請輸入你的賭注:"; //提示玩家輸入賭注</p><p>  cin>>bett;</p><p>  money=money-be

17、tt; //計算出剩余的總資本</p><p><b>  }</b></p><p>  while(money<0) //如果資本小于0,則賭注超過了資本</p><p>  {

18、//提示玩家錯了和要求重新輸入</p><p>  money=money+bett; //重新計算總資本</p><p>  cout<<"你不能下這么多的賭注!"<<endl;//提示玩家下的賭注超出資本</p><p>  cout<<"請重新下注:";

19、 //提示重新下注</p><p>  cin>>bett;</p><p>  money=money-bett; //計算總資本</p><p><b>  } </b></p><p><b>  }</b>

20、</p><p><b>  源程序:</b></p><p>  #include <iostream.h></p><p>  #include <string.h></p><p>  #include <conio.h></p><p>  #inclu

21、de <stdlib.h></p><p>  #include <stdio.h></p><p>  #include <time.h></p><p>  class Playing_Card //撲克牌類,表示一張撲克牌的面值、花色和與之相聯(lián)系的操作</p><p><b>  {&

22、lt;/b></p><p><b>  private:</b></p><p>  int m_Value; //撲克的實際面值,用整型值表示,從1開始,1~13</p><p>  char m_Face[3]; //撲克的數(shù)字大小,用字符串的形式表示,為A,2,3,…,10,J,Q,K</p><p

23、>  char m_Suit ; //撲克的花色(黑、紅、梅、方)</p><p><b>  public:</b></p><p>  Playing_Card();//構(gòu)造函數(shù),初始化撲克對象,實際上是將對象清零</p><p>  void showcard();//顯示撲克牌對象的面值,花色</p>

24、;<p>  void Card_Make(int); //為一張撲克牌對象賦予特定的面值和花色</p><p>  friend class PerDeck; //定義類PerDeck為類Playing_Card的友元類</p><p><b>  };</b></p><p>  class Deck

25、 //一副撲克(54張)類</p><p><b>  {</b></p><p><b>  private:</b></p><p>  Playing_Card m_cardarray[54];//一副撲克由54張撲克牌構(gòu)成</p><p>  int m_lastdelt;

26、 //標(biāo)記這副撲克牌刪除的張數(shù)</p><p><b>  public:</b></p><p>  Deck();//構(gòu)造函數(shù),初始化一副撲克牌對象,實際上是將其內(nèi)的54張撲克牌清零</p><p>  void MakeDeck();//生成一副撲克,即對其內(nèi)的54張撲克賦予正確的面值及花色</p>

27、<p>  void ShowDeck();//依次逐張顯示這副牌</p><p>  void DeckShuff(int);//洗牌,其參數(shù)是洗牌的次數(shù)</p><p>  void Remove_Card();//將刪除的那張撲克牌的內(nèi)容清零,使這張牌在屏幕上顯示不出來</p><p>  friend class PerDeck;

28、 //定義類PerDeck為類Deck的友元類</p><p><b>  };</b></p><p>  class PerDeck</p><p><b>  {</b></p><p>  Playing_Card m_Card[20]; //最多有20張牌</p>&

29、lt;p>  int nNum; //實際張數(shù)</p><p><b>  public:</b></p><p>  PerDeck(){}</p><p>  void MakeperDeck(Deck &,int); //對象初始化,參數(shù)為指定的那副牌及實際賦值個數(shù)</p><p>

30、;  void Show(); //顯示</p><p>  void SortFace(); //按面值排序</p><p>  void SortSuit(); //按花色排序</p><p>  int Delete(int n); //刪除序號為n的那一張</p><p><b>  };</

31、b></p><p>  void PerDeck::MakeperDeck(Deck & deck_3,int n)</p><p><b>  {</b></p><p>  nNum=n; //初始化當(dāng)前對象的實際張數(shù)</p><p>  static int i=0;

32、 //標(biāo)記為每個人發(fā)牌的其始位置</p><p>  for(int k=0;k<nNum;k++)m_Card[k]=deck_3.m_cardarray[i+k]; //用創(chuàng)建好的那副牌為當(dāng)前對象發(fā)牌</p><p>  i+=nNum; //為一個人發(fā)牌后起始位置向后跳nNum個</p><p><b>  

33、}</b></p><p>  void PerDeck::Show() //顯示玩家的牌面</p><p><b>  {</b></p><p><b>  int j=0;</b></p><p>  if(nNum==0)cout<<"已無牌

34、!"<<endl; //如果玩家無牌輸出提示信息</p><p><b>  else</b></p><p><b>  {</b></p><p>  for(int i=0;i<nNum;i++)</p><p><b>  {</b>

35、</p><p>  if(j%11==0)cout<<endl; //每行輸出11張牌</p><p>  m_Card[i].showcard();</p><p><b>  j++;</b></p><p><b>  }</b></p><p>&

36、lt;b>  }</b></p><p><b>  }</b></p><p>  int PerDeck::Delete(int n)</p><p><b>  {</b></p><p>  if(n>=nNum)return 0; //判斷是否刪牌</

37、p><p><b>  else</b></p><p><b>  {</b></p><p>  for(int i=n;i<nNum;i++)m_Card[i]=m_Card[i+1]; //刪除指定的牌</p><p>  nNum--; //刪除一張牌后將實際張數(shù)減1<

38、/p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void PerDeck::SortFace() //按面值排序</p><p><b&

39、gt;  {</b></p><p>  Playing_Card record; //產(chǎn)生一個臨時對象</p><p>  for(int j=0;j<nNum-1;j++)</p><p>  for(int i=j+1;i<nNum;i++)</p><p>  if(m_Card[j].m_Value

40、>m_Card[i].m_Value)</p><p>  {record=m_Card[i];m_Card[i]=m_Card[j];m_Card[j]=record;}</p><p><b>  }</b></p><p>  void PerDeck::SortSuit() //按花色排序</p><

41、;p><b>  {</b></p><p>  Playing_Card record; //產(chǎn)生一個臨時對象</p><p>  for(int j=0;j<nNum-1;j++)</p><p>  for(int i=j+1;i<nNum;i++)</p><p>  if(m_Ca

42、rd[j].m_Suit>m_Card[i].m_Suit)</p><p>  {record=m_Card[i];m_Card[i]=m_Card[j];m_Card[j]=record;}</p><p><b>  }</b></p><p>  class PlayDeck</p><p><b&g

43、t;  {</b></p><p>  PerDeck m_deck[4]; //一共是四個人玩牌</p><p><b>  public:</b></p><p>  PlayDeck(){}</p><p>  void PlayCard(Deck &); //用指定的那副牌對四個

44、人分別賦值</p><p>  void Show(); //顯示</p><p>  int DeleteOne(int row,int column); //刪除一張,參數(shù)為第row個人的第column張牌</p><p>  int DeleteAll(int,int,int,int); //刪除一輪,參數(shù)分別代表四個人各刪除哪一張&

45、lt;/p><p>  void SortDeckFace(); //對整副牌面值排序</p><p>  void SortDeckSuit(); //對整副牌花色排序</p><p><b>  };</b></p><p>  void PlayDeck::PlayCard(Deck & dec

46、k_2) //給四個人發(fā)牌</p><p><b>  {</b></p><p>  for(int i=0;i<2;i++)m_deck[i].MakeperDeck(deck_2,14); //前兩個人發(fā)14張牌</p><p>  for(int j=2;j<4;j++)m_deck[j].MakeperDeck(d

47、eck_2,13); //后兩個人發(fā)13張牌</p><p><b>  }</b></p><p>  void PlayDeck::Show() //顯示四個玩家的牌</p><p><b>  {</b></p><p>  for(int i=0;i<4;i++)</p&g

48、t;<p><b>  {</b></p><p>  cout<<endl;</p><p>  cout<<"玩家"<<i+1<<"的牌:";</p><p>  m_deck[i].Show();</p><p>

49、<b>  }</b></p><p>  cout<<endl<<endl;</p><p><b>  }</b></p><p>  int PlayDeck::DeleteOne(int row,int column) //刪除一張,參數(shù)為第row個人的第column張牌</p&

50、gt;<p>  {return m_deck[row-1].Delete(column-1);}</p><p>  int PlayDeck::DeleteAll(int a,int b,int c,int d) //刪除一輪,參數(shù)分別代表四個人各刪除哪一張</p><p>  {return m_deck[0].Delete(a-1)+m_deck[1].Delet

51、e(b-1)+m_deck[2].Delete(c-1)+m_deck[3].Delete(d-1);}</p><p>  void PlayDeck::SortDeckFace() //將四個人的牌按面值排序</p><p><b>  {</b></p><p>  m_deck[0].SortFace();</p>

52、<p>  m_deck[1].SortFace();</p><p>  m_deck[2].SortFace();</p><p>  m_deck[3].SortFace();</p><p><b>  }</b></p><p>  void PlayDeck::SortDeckSuit()

53、 //將四個人的牌按花色排序</p><p><b>  {</b></p><p>  m_deck[0].SortSuit();</p><p>  m_deck[1].SortSuit();</p><p>  m_deck[2].SortSuit();</p><p>  m_dec

54、k[3].SortSuit();</p><p><b>  }</b></p><p>  void Program_Init();//程序初始化,輸出初始化信息</p><p>  int main();</p><p>  void Center_Text(char []);//將參數(shù)(字符串)在屏幕上顯

55、示在一行的中間位置</p><p>  void Get_Key(); //接收用戶鍵入的字符</p><p>  void DeckMakeDriver();/*程序的主要算法,內(nèi)部調(diào)用多個函數(shù),包括生成撲克牌,</p><p>  洗牌,刪除,排序等主要操作*/</p><p>  int getRandInt(int

56、 min, int max); //取得在兩參數(shù)間的整型隨機值</p><p>  void prog_close();//暫停程序運行,供用戶查看中間運行結(jié)果</p><p>  int main()</p><p><b>  {</b></p><p>  srand( (unsigned)t

57、ime( NULL ) ); //初始化隨機數(shù)種子</p><p>  Program_Init(); //顯示程序初始化提示信息</p><p>  DeckMakeDriver();//調(diào)用程序的主要算法,包含程序的主要操作過程</p><p>  prog_close();//暫停程序運行,供用戶查看運行

58、結(jié)果</p><p>  return 1;</p><p><b>  }</b></p><p>  Playing_Card::Playing_Card() //撲克牌對象的構(gòu)造函數(shù)</p><p><b>  {</b></p><

59、p><b>  int i;</b></p><p>  for(i=0;i<3;)//初始化撲克牌的面值,清零</p><p><b>  {</b></p><p>  m_Face[i]=' ';</p><p><b>  i++;</b

60、></p><p><b>  }</b></p><p>  m_Suit=' ';//初始化撲克牌的花色,清零</p><p>  m_Value=0;</p><p><b>  }</b></p><p>  void Program_

61、Init() //程序一開始運行的提示信息</p><p><b>  {</b></p><p>  Center_Text("撲克牌游戲\n");</p><p>  cout<<endl<<endl;</p><p>  Get_Key();</

62、p><p><b>  }</b></p><p>  void Get_Key() //從鍵盤接收用戶鍵入的字符</p><p><b>  {</b></p><p>  cout<<endl;</p><p>  Center_Text(&q

63、uot;單擊任意鍵繼續(xù)...");</p><p><b>  getch();</b></p><p>  cout<<endl;</p><p><b>  }</b></p><p>  void Playing_Card::showcard() //在屏幕

64、上顯示一張撲克牌的面值及花色</p><p><b>  {</b></p><p>  cout<<" ";</p><p>  cout<<m_Face; //顯示面值 </p><p>  cout.width(1);</p&

65、gt;<p>  cout<< m_Suit; //顯示花色</p><p>  cout<<" ";</p><p><b>  }</b></p><p>  void Center_Text(char ShellText[80]) //將函數(shù)參數(shù)(字符串)

66、在屏幕上居中顯示</p><p><b>  {</b></p><p>  int length;</p><p>  int center;</p><p>  length= strlen(ShellText); //取得欲顯示字符串的大小</p><p>  center=(80 -

67、length)/2; //整個屏幕的列數(shù)為80,取得字符串在該行的其始位置</p><p>  for(;center!=0;center--) //在字符串前輸出空格</p><p><b>  {</b></p><p>  cputs(" ");</p><p><b>

68、  }</b></p><p>  cputs(ShellText);</p><p><b>  }</b></p><p>  void Playing_Card::Card_Make(int num) /*根據(jù)參數(shù)num生成一張撲克牌,num不同,生成的</p><p><b>  面值

69、或花色不同*/</b></p><p><b>  {</b></p><p><b>  int i=0;</b></p><p><b>  char j;</b></p><p>  int face_num=num%13; //撲克牌的面值,從

70、0到12</p><p>  if(num==52)strcpy(m_Face," "); //大王花色賦為S</p><p>  else if(num==53)strcpy(m_Face," "); //小王花色賦為B</p><p><b>  else</b></p>

71、<p><b>  {</b></p><p>  switch(face_num)//當(dāng)面值大于10時,用J,Q,K代替,面值為0,用A代替</p><p><b>  {</b></p><p>  case 0: strcpy(m_Face," A");break;</p&

72、gt;<p>  case 9: strcpy(m_Face,"10");break;</p><p>  case 10: strcpy(m_Face," J");break;</p><p>  case 11: strcpy(m_Face," Q");break;</p><p>  c

73、ase 12: strcpy(m_Face," K");break;</p><p><b>  default:</b></p><p>  j=char(face_num + 49);//其它的面值,用對應(yīng)的ASCII碼表示</p><p><b>  if(i<3)</b></p

74、><p><b>  {</b></p><p>  m_Face[i]=' '; i++;</p><p>  m_Face[i]=j;i++;</p><p>  m_Face[i]=NULL; </p><p><b>  break;</b></p&

75、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //撲克牌的花色,分別用紅桃,黑桃,梅花,方塊的ASCII碼替代</p><p>  if(num <= 12)m_Su

76、it=6; //紅桃</p><p>  if(num >12 && num <= 25)m_Suit=3; //黑桃</p><p>  if(num >25 && num <= 38)m_Suit=5; //梅花</p><p>  if(num >38 && num <

77、;= 51)m_Suit=4; //方塊</p><p>  if(num==52)m_Suit=1; //小王</p><p>  if(num==53)m_Suit=2; //大王</p><p>  if(num==52)m_Value=14; //小王面值賦為14</p><p>  else if(num==53)m_

78、Value=15; //大王面值賦為15</p><p>  else m_Value=face_num + 1; //A的面值實際上用1表示,其余面值依次加1</p><p><b>  }</b></p><p>  void DeckMakeDriver() //主要程序操作部分,調(diào)用多個函數(shù),完成生成一副牌,洗牌,顯示,刪

79、除等操作</p><p><b>  {</b></p><p>  Deck deck_1; //生成一副撲克牌對象,內(nèi)有54張牌,此時所有的撲克牌均未賦值</p><p>  PlayDeck man; //產(chǎn)生一局牌</p><p>  deck_1.MakeDeck();//對

80、54張撲克牌賦值</p><p>  deck_1.ShowDeck(); //逐一顯示這54張牌</p><p>  Get_Key(); //暫停運行,供用戶查看顯示結(jié)果</p><p>  deck_1.DeckShuff(250);//對生成的這副牌洗牌250次</p><p>  deck_1.ShowDe

81、ck(); //逐一顯示這洗好的54張牌</p><p>  Get_Key(); //暫停運行,供用戶查看顯示結(jié)果</p><p>  man.PlayCard(deck_1); //發(fā)牌</p><p>  int Memory=0;</p><p><b>  for(;;)</b><

82、;/p><p><b>  {</b></p><p>  man.Show(); //顯示四個人的牌</p><p>  Center_Text("\1\1\1撲克牌菜單\1\1\1\n");</p><p>  Center_Text("\3 1:刪除一張牌 \3\n");

83、</p><p>  Center_Text("\4 2:刪除一輪牌 \4\n");</p><p>  Center_Text("\5 3:花色排序 \5\n");</p><p>  Center_Text("\6 4:面值排序 \6\n");</p><p>  Cen

84、ter_Text("\1 5:退出程序 \1\n");</p><p>  cout<<"請選擇:\n";</p><p><b>  int n;</b></p><p>  char str[30];</p><p>  aa:cin>>n;&l

85、t;/p><p>  cin.getline(str,30);</p><p>  if(strlen(str)>=1)</p><p><b>  {</b></p><p>  cout<<"輸入錯誤,請重新輸入:"<<endl;</p><p>

86、<b>  goto aa;</b></p><p><b>  }</b></p><p><b>  if(!cin)</b></p><p><b>  {</b></p><p>  char str[30];</p><p&g

87、t;  cin.clear();</p><p>  cin.getline(str,30);</p><p>  cout<<"輸入錯誤,請重新輸入:"<<endl;</p><p><b>  goto aa;</b></p><p><b>  }</b&

88、gt;</p><p>  switch(n) //判斷執(zhí)行的操作</p><p><b>  {</b></p><p>  case 1: //執(zhí)行刪除一張牌的操作</p><p><b>  int a,b;</b></p><p>  c

89、har str[30];</p><p>  bb:cout<<"請輸入刪除第幾個人的第幾張牌"<<endl;</p><p>  cin>>a>>b;</p><p>  cin.getline(str,30);</p><p>  if(strlen(str)&g

90、t;=2)</p><p><b>  {</b></p><p>  cout<<"輸入錯誤,請重新輸入:"<<endl;</p><p><b>  goto bb;</b></p><p><b>  }</b></p&g

91、t;<p>  while(!cin)</p><p><b>  {</b></p><p>  char str[30];</p><p>  cin.clear();</p><p>  cin.getline(str,30);</p><p>  cout<<&q

92、uot;輸入錯誤,請重新輸入:"<<endl;</p><p><b>  goto bb;</b></p><p><b>  }</b></p><p>  Memory+=man.DeleteOne(a,b);</p><p><b>  break;</

93、b></p><p>  case 2: //執(zhí)行刪除一輪牌的操作</p><p>  int c,d,e,f;</p><p>  char str1[30];</p><p>  cc: cout<<"請依次輸入刪除四個人的第幾張牌"<<endl;&l

94、t;/p><p>  cin>>c>>d>>e>>f;</p><p>  cin.getline(str1,30);</p><p>  if(strlen(str1)>=2)</p><p><b>  {</b></p><p>  cout

95、<<"輸入錯誤,請重新輸入:"<<endl;</p><p><b>  goto cc;</b></p><p><b>  }</b></p><p>  while(!cin)</p><p><b>  {</b></p

96、><p>  char str[30];</p><p>  cin.clear();</p><p>  cin.getline(str,30);</p><p>  cout<<"輸入錯誤,請重新輸入:"<<endl;</p><p><b>  goto cc;&

97、lt;/b></p><p><b>  }</b></p><p>  Memory+=man.DeleteAll(c,d,e,f);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p

98、>  man.SortDeckSuit(); //執(zhí)行按花色排序</p><p><b>  break;</b></p><p><b>  case </b></p><p>  4:man.SortDeckFace(); //執(zhí)行按面值排序</p><p><b> 

99、 break;</b></p><p><b>  case 5:</b></p><p>  exit(0); //執(zhí)行退出程序</p><p><b>  default:</b></p><p>  cout<<"輸入錯誤,請重新輸入:"&l

100、t;<endl;</p><p><b>  goto aa;</b></p><p><b>  }</b></p><p>  system("cls"); //清屏</p><p>  if(Memory==54)break; //判斷循環(huán)結(jié)束條件<

101、;/p><p><b>  }</b></p><p>  cout<<endl<<endl<<endl;</p><p><b>  }</b></p><p>  void Deck::MakeDeck()//對生成的54張牌逐個賦值</p&g

102、t;<p><b>  {</b></p><p>  m_lastdelt=53;//賦初值,該值作為生成每張撲克牌的參數(shù)</p><p>  while(m_lastdelt >-1)//判斷是否產(chǎn)生完54張牌</p><p>  {</p><p>  m_ca

103、rdarray[m_lastdelt].Card_Make(m_lastdelt); /*調(diào)用每張撲克牌的生成函數(shù),依次</p><p>  對每張撲克牌賦值,直到生成完一副撲克牌*/</p><p>  m_lastdelt--;//生成完一張撲克牌后改變生成的參數(shù) </p><p>  }</p><

104、;p><b>  }</b></p><p>  void Deck::ShowDeck() //顯示一副撲克牌</p><p><b>  {</b></p><p>  int index=m_lastdelt + 1; //以該位置為第一張牌,從頭顯示這副撲克牌</p&g

105、t;<p>  int newline=0;</p><p>  Center_Text("完整的一副牌");</p><p>  cout<<endl;</p><p>  while(index<=53)</p><p><b>  {</b></p>

106、<p>  if(newline%11==0) cout<<endl; //每顯示11張輸出一個回車</p><p>  m_cardarray[index].showcard();//按數(shù)組的順序依次顯示</p><p>  newline++;</p><p><b>  index++;</b>&

107、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  int getRandInt(int min, int max) //返回兩個參數(shù)之間的一個整型隨機值</p><p><b>  {</b></p>

108、;<p>  int numToReturn;</p><p>  numToReturn=rand(); //取得隨機值</p><p>  numToReturn=numToReturn%(max - min + 1) + min; /*將隨機值的范圍調(diào)</p><p>  整到兩個參數(shù)之間*/</p><p> 

109、 return numToReturn;</p><p><b>  }</b></p><p>  void Deck::DeckShuff( int times) //洗牌,參數(shù)為洗牌次數(shù)</p><p><b>  {</b></p><p>  int x, split; //spl

110、it是分開成兩部分的位置,如上部分、下部分</p><p>  Center_Text("洗牌……");</p><p>  cout<<endl;</p><p>  for(x=0;x<=times;x++)//開始循環(huán),每循環(huán)一次將牌全部重排一遍</p><p><b>  {&l

111、t;/b></p><p>  split=getRandInt(20,35);//隨機選取split的值</p><p>  Deck topdeck;//生成兩副撲克牌對象</p><p>  Deck bottomdeck;</p><p><b>  int i;</b></p>

112、<p>  int bottomdeckindex=1;</p><p>  int topdeckindex=1;</p><p>  for(i=0;i<=split - 1;)/*將初始的那副撲克牌的上邊部分的張數(shù)賦值到</p><p>  新生成的撲克牌對象中*/</p><p><b>  {</

113、b></p><p>  topdeck.m_cardarray[topdeckindex]=this->m_cardarray[i];</p><p>  topdeckindex++;</p><p><b>  i++;</b></p><p><b>  }</b></p

114、><p>  for(i=(split);i< 54;)/*同樣將初始那副撲克牌的下邊部分的張數(shù)賦值到</p><p>  新生成的撲克牌對象中*/</p><p><b>  {</b></p><p>  bottomdeck.m_cardarray[bottomdeckindex]=this->m_card

115、array[i];</p><p>  bottomdeckindex++;</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  int deckoutindex=0;</p><p>  int numcardstomo

116、vetop;</p><p>  int numcardstomovebottom;</p><p><b>  int j;</b></p><p><b>  int h=0;</b></p><p>  bottomdeckindex=54 - split;//下部分那副撲克牌的張數(shù)<

117、;/p><p>  topdeckindex =split;//上部分那副撲克牌的張數(shù)</p><p>  while(deckoutindex <= 53)</p><p><b>  {</b></p><p>  numcardstomovetop=getRandInt(2,7); //從上部分抽取的張數(shù)

118、,是2-7之間的隨機數(shù)</p><p>  numcardstomovebottom=getRandInt(2,7);//同樣從下部分抽取的張數(shù),是2-7之間的隨機數(shù)</p><p>  for(j=0;j <=numcardstomovebottom;j++)//從0開始循環(huán)numcardstomovebottom次</p><p><b>

119、  {</b></p><p>  if(bottomdeckindex > 0)//當(dāng)下部分那副牌沒有循環(huán)完時繼續(xù)</p><p><b>  {</b></p><p>  this->m_cardarray[deckoutindex]=bottomdeck.m_cardarray[bottomdeckind

120、ex];</p><p>  /*從下部分那副牌的最后張數(shù)開始,依次向初始的撲克牌賦值*/</p><p>  deckoutindex++;</p><p>  bottomdeckindex--;</p><p><b>  }</b></p><p>  for(h=0;h<=numc

121、ardstomovetop;h++) /*下部分的那副撲克牌賦值完成后,對</p><p>  上部分的那副牌做同樣的操作*/</p><p><b>  {</b></p><p>  if((topdeckindex > 0) && (deckoutindex <=54))</p><p&

122、gt;<b>  {</b></p><p>  this->m_cardarray[deckoutindex]=topdeck.m_cardarray[topdeckindex];</p><p>  deckoutindex++;</p><p>  topdeckindex--;</p><p><

123、b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  this-&

124、gt;m_lastdelt=-1;//將刪除牌的張數(shù)復(fù)原為-1(未刪除)</p><p><b>  }</b></p><p>  void prog_close() //程序暫停,任按一鍵繼續(xù)</p><p><b>  {</b></p><p>  cout<<e

125、ndl<<endl;</p><p>  Get_Key();</p><p>  cout<<endl<<endl;</p><p><b>  }</b></p><p>  Deck :: Deck()//初始化一副撲克牌,將54張撲克牌均清零</p>&l

126、t;p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<=53;i++)</p><p><b>  {</b></p><p>  m_cardarray[1]=Playing_Card();

127、 //構(gòu)造一個臨時對象賦值</p><p><b>  }</b></p><p><b>  }</b></p><p>  #include<iostream.h> </p><p>  #include<stdlib.h></p><p&g

128、t;  #include<conio.h></p><p>  #include<time.h></p><p>  #include<string.h></p><p>  class fuctions //定義了一個類fuctions</p><p><

129、;b>  {</b></p><p>  private:int milli,bet,money,win,lose,draw,playerturns,cputurns,bett;</p><p>  double card,total,cpu,player; //封裝了函數(shù)的相應(yīng)數(shù)據(jù)</p><p>  public:

130、 //將函數(shù)封裝到類中</p><p>  void wait(int );</p><p>  void pause();</p><p>  int random(long hi,long lo);</p><p>  void replay(char&ans);</p>&

131、lt;p>  void hit(double&,double&);</p><p>  void deal(double&,double&,int&,int&);</p><p>  void BET(int&,int&); </p><p>  void print(int,int,int,in

132、t);</p><p>  void rules();</p><p>  void results(double,double,int,int&,int&,int&,int&);</p><p>  void mima(char&ans,double&,double&); //定義了一個函數(shù)找

133、出高級玩家</p><p>  void Duzhu(int&,int&); //定義了一個函數(shù)找出總賭注有沒有超出</p><p>  }; //資本</p><p>  void fuctions::pause()

134、 //定義一個繼續(xù)函數(shù)</p><p><b>  {</b></p><p>  cout<<"請按任意鍵繼續(xù):"<<endl; //提示下一步</p><p><b>  getch();</b></p><p><b>

135、  } </b></p><p>  int fuctions::random(long hi,long lo) //定義了一個函數(shù)隨機發(fā)牌</p><p><b>  {</b></p><p><b>  int ran;</b></p><p>  srand((

136、unsigned)time(NULL));</p><p>  ran=rand()%(hi-(lo-1))+lo;</p><p>  return(ran);</p><p><b>  }</b></p><p>  void fuctions::replay(char &ans) //定義了一個輸入

137、字符函數(shù)</p><p><b>  {</b></p><p>  cout<<"\n\t\t\t你想再接著玩嗎 (是'Y'/否'N'):"; //提示下一步</p><p><b>  cin>>ans;</b></p>&l

138、t;p><b>  }</b></p><p>  void fuctions::hit(double &card,double &total) //一個要牌函數(shù),可進行傳值調(diào)用 </p><p><b>  {</b></p><p>  card=random(13,1);</p>

139、;<p>  if(card>10)</p><p><b>  {</b></p><p>  card=0.5; //隨機要牌后將大于10的數(shù)重新賦值</p><p><b>  }</b></p><p>  total=to

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論