版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 撲克牌洗牌發(fā)牌過程模擬課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---撲克牌排序
- 巧用撲克牌玩數(shù)學(xué)游戲
- 撲克牌文化
- 解讀撲克牌
- 課程設(shè)計用c++設(shè)計一個排課程序
- 撲克牌團隊活動
- c_課程設(shè)計游戲21點
- 幼兒撲克牌玩法
- 南京理工大學(xué)c++課程設(shè)計—撲克游戲
- 撲克牌英語大全
- 拓展訓(xùn)練項目大全—之撲克牌游戲
- 撲克牌的記憶方法
- c語言課程設(shè)計--- 21點游戲設(shè)計
- 幾種撲克牌的玩法
- c++課程設(shè)計-教學(xué)游戲
- 中班 探索性活動區(qū)游戲: 好玩的撲克牌
- 撲克牌的花牌是12個歷史人物和故事
- qbt 2228-2013 撲克牌
- c++課程設(shè)計拼圖游戲
評論
0/150
提交評論