版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實用標準文檔南京理工大學紫金學院 C+1程設計報告課程:C+碑程設計學院:計算機學院班級:計算機大類四班學號:170310441姓名:田越選題名稱:撲克牌游戲起止時間:2018.5.222018.6.1指導教師:杜蘭2018年5月文案大全紫金學院C+課程設計2017 級 1問題描述在提供的源程序基礎上,寫一個程序,可以進行洗牌等操作.2 基本要求1)增加大小王.2)刪去一張指定撲克牌后,進行余牌顯示.3)創(chuàng)建一副撲克牌,顯示一副撲克牌,洗牌,依次分發(fā)給四人并顯示3需求分析輸入形式與范圍是按照提示語句輸入相應的數(shù)字或是(Y)否(N)的英文字母輸出形式即為提示語句所說明的內(nèi)容該程序基本任務是完成撲
2、克洗牌,顯示玩家手牌,按花色或牌面整理手牌(排序)測試數(shù)據(jù)為54張撲克牌面值以及花色,無需手動設置正確的輸入將使得程序按說明運行,錯誤輸入默認直接退出程序4概要設計分為8個部分,也是八個文件包含主程序所需的所有頭文件 包含所有的類,并卷入all.h主調(diào)函數(shù)包含deck類的函數(shù)包含perdeck類的函數(shù)包含playdeck類的函數(shù)包含playingcard 類的函數(shù)顧名思義頭文件兩個:all.hclass.h其余cpp文件,共6個,說明如下:main函數(shù)deckperdeckplaydeckplayingcardmain函數(shù)調(diào)用的函數(shù)5詳細設計All.h#pragma once#include
3、#include / 編譯器是 VS2017#include #include #include #include Class.h#pragma once#include all.husing namespacestd;class PerDeck;class PlayingCardprivate :int nValue; /撲克牌實際面值char achFace3; / 撲克牌字符串 A,2,10,J,Q,Kchar chSuit; /撲克牌花色 public :friend class PerDeck;PlayingCard(); / 將對象清零void ShowCard(); /顯示面值花
4、色void CardMake(int ); /給一張撲克牌賦值(面值,花色) ;class Deckprivate :PlayingCard m_cardarray54;int nLastDelt;public :friend class PerDeck;Deck();void MakeDeck(); /將52張牌清零(沒有大,小王)void DealOne(); /刪除開頭一張牌void ShowDeck(); /依次逐張顯示這副牌void DeckShuff( int ); /用于洗牌,參數(shù)是洗牌次數(shù)void RemoveCard(); /清零刪除掉的那張牌 ;class PerDeckp
5、rivate :PlayingCard myCard20;int nNum;public :PerDeck() void MakePerDeck(Deck &, int );void Show();void SortFace();void SortSuit();int Delete( int n);class PlayDeckprivate :PerDeck myDeck4;public :PlayDeck() void PlayCard( Deck &);void Show();int DeleteOne( int row, int column);int DeleteAll( int ,
6、int , int , int );void SortDeckFace( int );void SortDeckSuit( int );void s( int );void ProgramInit(); /初始化,并輸出信息void CenterText( char ShellText 80); / 居中顯示int GetNumber(); / 鍵入整數(shù)型char GetKey(); /鍵入字符串型void DeckMakeDiver(); /主要算法(生成撲克牌,洗牌,刪除等) int GetRandInt( int min, int maX; / 在min到max可選隨機值 void Pr
7、ogClose(); /暫停,供用戶查看中間運行結果main 函數(shù).cpp#include class.husing namespacestd;int main( void ) srand( unsigned )time( NULL);int nCardNum = 0;ProgramInit();DeckMakeDiver();ProgClose();return 1;Playdeck.cpp#include class.h#include using namespacestd;void PlayDeck :PlayCard( Deck & k) int a, b, c, d;char g29
8、 = 依次輸入四位玩家手里的牌數(shù):;CenterText(g);cout a b c d;if (a + b + c + d 54)char g口 = 超過牌的張數(shù),退出游戲。;CenterText(g);exit(0);myDeck0.MakePerDeck( k, a);myDeck1.MakePerDeck( k, b);myDeck2.MakePerDeck( k, c);myDeck3.MakePerDeck( k, d); void PlayDeck:Show() TOC o 1-5 h z char a6= 玩家 1char b6= 玩家 2char c6= 玩家 3char d
9、6= 玩家 4CenterText(a);cout endl; myDeck0.Show(); CenterText(b);cout endl; myDeck1.Show(); CenterText(c);cout endl; myDeck2.Show(); CenterText(d);cout endl; myDeck3.Show(); int PlayDeck:DeleteOne( int row, int column) myDeckrow - 1.Delete( column);return 1;int PlayDeck:DeleteAll( int a, int b, int c,
10、int d) myDeck0.Delete( a);myDeck1.Delete( b);myDeck2.Delete( c);myDeck3.Delete( d);return 1;void PlayDeck:SortDeckFace( int b)myDeckb - 1.SortFace();void PlayDeck:SortDeckSuit( int b)myDeckb - 1.SortSuit();void PlayDeck:s( int a)myDecka - 1.Show();Deck.cpp#include class.h#include using std: ostream;
11、using namespacestd;void Deck:MakeDeck() /對生成的52張牌逐個賦值nLastDelt = 53;/51while (nLastDelt -1) m_cardarraynLastDelt.CardMake(nLastDelt); nLastDelt-;void Deck:ShowDeck() / 顯示一副撲克牌char a13 = 完整的一副牌”;int nIndex = nLastDelt + 1;int nNewLine = 0;CenterText(a);cout endl;while (nIndex = 53)/51if (nNewLine % 1
12、1 = 0)cout endl; m_cardarraynIndex.ShowCard();nNewLine+;nIndex+;void Deck:DeckShuff( int times )/ 洗牌算法char a11 = 洗牌;int x, nSplit;CenterText(a);cout endl;for (x = 0; x = times ; x+)nSplit = GetRandInt(20, 35);Deck TopDeck;Deck BottomDeck;int i;int nBottomNum = 1;int nTopNum = 1;for (i = 0; i m_carda
13、rrayi; nTopNum+; i+;for (i = (nSplit); i m_cardarrayi; nBottomNum+; i+;int nOutNum = 0;int nNumToTop;int nNumToBottom;int j;int h = 0;nBottomNum = 54 - nSplit; /52 nTopNum = nSplit;while (nOutNum 53) /51 nNumToTop = GetRandInt(2, 7);nNumToBottom = GetRandInt(2, 7); for (j = 0; j 0)this -m_cardarrayn
14、OutNum = BottomDeck.m_cardarraynBottomNum; nOutNum+;nBottomNum-;for (h = 0; h 0) & (nOutNum m_cardarraynOutNum = TopDeck.m_cardarraynTopNum; nOutNum+;nTopNum-;this -nLastDelt = -1; void Deck:RemoveCard() /將刪除的那張牌清零m_cardarraynLastDelt = PlayingCard (); / 清零 void Deck:DealOne() /從一副撲克牌中刪除一張牌 if (nLas
15、tDelt != 53)/51nLastDelt+;cout.width(5);cout endl;cout 刪除牌:;m_cardarraynLastDelt.ShowCard();RemoveCard(); elsecout 這副牌全部刪除完了 ;ProgClose();Deck:Deck() /初始化一副撲克牌,將52張撲克牌均清零 int lastdelt = 0;for (int i = 0; i = 53; i+)/51 m_cardarrayi = PlayingCard ();Main調(diào)用的函數(shù).cpp#include class.h#include using namespa
16、cestd;void ProgramInit() /程序一開始的提示信息 char a11 = 撲克牌游戲”;char b25 = 單擊 鍵開始”;CenterText(a);cout endl n ;CenterText(b);cin.get();char GetKey() /從鍵盤接收一個字符,將其作為函數(shù)返回值 char x;x = cin.get();cout endl;return x; void CenterText( char ShellText 80) / 居中算法int nCenter;int nLength;nLength = strlen( ShellText );nCe
17、nter = (80 - nLength) / 2;for (; nCenter != 0; nCenter-) cout ;cout ShellText ;int GetNumber() /從鍵盤接收一個整數(shù)值,作為函數(shù)返回值char a40 = 請輸入一個在0到51之間的整數(shù),輸入52退出.;int nInputInteger = 0;CenterText(a);cout nInputInteger;return nInputInteger; void ProgClose() /程序暫停,按任意鍵繼續(xù)cout endl endl;cout 單擊 鍵繼續(xù) endl;cout endl end
18、l;GetKey();cin.get(); void DeckMakeDiver() /主要程序操作部分,調(diào)用多個函數(shù),包含完整生成一副牌,洗牌,顯示,刪除等操 作Deckdeck_1;deck_1.MakeDeck();deck_1.ShowDeck();GetKey();deck_1.DeckShuff(250);deck_1.ShowDeck();cout endl endl endl;char y;PlayDeck F;F.PlayCard(deck_1);cout endl endl endl;F.Show();int g = 0;do char a9 = 游戲規(guī)則”;char b2
19、3 = 刪除一位玩家的牌 輸入1 ;char c23 = 刪除四位玩家的牌 輸入2 ;char d23 = 按牌的面值排序輸入3 ;char e23 = 按牌的花色排序輸入4 ;char f23 = 顯示四位玩家手牌 輸入5 ;char q23 = 按 N(n)退出游戲”;CenterText(a);cout endl; CenterText(b); cout endl; CenterText(c); cout endl; CenterText(d); cout endl; CenterText(e); cout endl; CenterText(f); cout endl; CenterTe
20、xt(q); cout g; if (g = 1) int j, k; char h; cout 請輸入刪除玩家的編號和牌號(從左往右數(shù)的第Ne) j k;F.DeleteOneQ, k);cout endl 是(Y)否(N)顯示刪除后的手牌? h;h= toupper(h); if (h = Y )F.s(j); cout endl;if (g = 2) int w, x, h, z; char y;cout 請依次輸入欲刪除各玩家牌的序號。 w x h z;F.DeleteAll(w, x, h, z);cout endl 是(Y)否(N)顯示刪除后玩家的牌? y;y = toupper(
21、y);if (y = Y )F.Show(); cout endl;if (g = 3) int h; char y;cout 請輸入需要排序的玩家 h;F.SortDeckFace(h);cout 是(Y)否(N)顯示排序后的牌? y;y = toupper(y);if (y = Y )F.s(h);if (g = 4)int x;char y;cout 請輸入需要排序玩家的序號 x;F.SortDeckSuit(x);cout 是(Y)否(N)顯示排序后的牌? y;y = toupper(y);if (y = Y )F.s(x);if (g = 5)F.Show();if (g = 78
22、| g = 110)goto loop;cout 是(Y)否(N)回到游戲規(guī)則菜單? endl;cout y;y= toupper(y); while (y = Y);loop:;int GetRandInt( int nMin, int nMaR/返回min至ma此間的任意一值(實際上是洗牌算法s的一部分)int nNumToReturn;nNumToReturn = rand();nNumToReturn = nNumToReturn % ( nMax- nMin + 1) + nMin;return nNumToReturn;Playingcard.cpp#include class.h
23、 #include using namespacestd;PlayingCard :PlayingCard() /撲克牌對象的構造函數(shù) for(int i = 1; i = 3;)achFacei=i+;chSuit =nValue = 0;voidPlayingCard二ShowCard() /在屏幕上顯示一張撲克牌的面值及花色cout cout achFace;cout.width(1);cout chSuit;cout void同PlayingCard二CardMake( int nNur)i/根據(jù)參數(shù)nNurtfc成一張撲克牌,nNumf同,生成的面值或花色不int i = 0; ch
24、ar j;int nFaceNum = nNum% 13;ifnNum= 52)strcpy(achFace, goto loop;S);ifnNum= 53)B);A); break;10); break;strcpy(achFace, goto loop;switch (nFaceNum)case 0:strcpy(achFace,case 9:strcpy(achFace,case 10:strcpy(achFace,J);breakcase 11:strcpy(achFace,Q);breakcase 12:strcpy(achFace,K);breakdefault :j = cha
25、r (nFaceNum + 49);if (i 3)achFacei = ; i+;achFacei = j; i+;achFacei = NULL break; loop:;if ( nNum 12 &nNum 25 &nNum 38 &nNum= 51)chSuit =4;/方塊if(nFaceNum = 10)nValue = 10;if ( nNum= 52)nValue = 11;chSuit = 49;if ( nNum= 53)nValue = 12;chSuit = 50;Perdeck.cpp#include #include class.husing namespacestd;void PerDeck:MakePerDeck( Deck &d, int a)nNum = a;int i = 0;while (i a&d.nLastDelt != 53) myCardi+ = d.m_cardarray+ d.nLastDelt;void PerDeck:Show()char a12 = 該玩家的牌:;int nNewLine = 0;CenterText(a);cout endl;while (nNewLine nNum)if (nNewLine % 5 = 0) cout endl;myCardnN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共同努力共創(chuàng)騰飛計劃
- 兒童急性淋巴細胞白血病指南2024版解讀
- 2024-2025學年五年級上冊數(shù)學期末全真模擬培優(yōu)卷(蘇教版)【解析版】-A4
- 1例急性腦梗死患者靜脈溶栓個案護理
- 《鉆井安全培訓材料》課件
- 初中語文教研組工作參考計劃
- 《設置系統(tǒng)提高安全》課件
- 機電實訓報告范文
- 可研報告 范文
- 設計實習報告范文
- 提高患者出院隨訪率課件
- 精神科疾病的精神科診斷與治療
- 酒店總經(jīng)理應聘計劃書
- 醫(yī)療健康合作協(xié)議
- 垃圾填埋場環(huán)境風險評估
- 泥漿泵安全操作規(guī)程范文
- 戲劇表演社管理制度
- 水囊引產(chǎn)護理查房
- 2024屆高考語文 語言文字運用 復習課件
- 2023年CQE客訴工程師年度總結及下年規(guī)劃
- 2023年秋季國家開放大學-02272-數(shù)據(jù)結構(本)期末考試題帶答案
評論
0/150
提交評論