




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
紫金學院C++課程設計2017級PAGEPAGE1紫金學院C++課程設計南京理工大學紫金學院C++課程設計報告課程:C++課程設計學院:計算機學院班級:計算機大類四班學號:姓名:選題名稱:撲克牌游戲起止時間:指導教師:
1問題描述在提供的源程序基礎上,寫一個程序,可以進行洗牌等操作.2基本要求增加大小王.刪去一張指定撲克牌后,進行余牌顯示.創(chuàng)建一副撲克牌,顯示一副撲克牌,洗牌,依次分發(fā)給四人并顯示.3需求分析 輸入形式與范圍是按照提示語句輸入相應的數(shù)字或是(Y)否(N)的英文字母 輸出形式即為提示語句所說明的內容該程序基本任務是完成撲克洗牌,顯示玩家手牌,按花色或牌面整理手牌(排序) 測試數(shù)據(jù)為54張撲克牌面值以及花色,無需手動設置 正確的輸入將使得程序按說明運行,錯誤輸入默認直接退出程序4概要設計分為8個部分,也是八個文件 頭文件兩個: all.h包含主程序所需的所有頭文件. class.h包含所有的類,并卷入all.h 其余cpp文件,共6個,說明如下: main函數(shù)主調函數(shù) deck包含deck類的函數(shù) perdeck包含perdeck類的函數(shù) playdeck包含playdeck類的函數(shù) playingcard 包含playingcard類的函數(shù) main函數(shù)調用的函數(shù)顧名思義5詳細設計All.h #pragmaonce#include<iostream>#include<string.h>//編譯器是VS2021#include<time.h>#include<stdlib.h>#include<stdio.h>#include<conio.h>Class.h#pragmaonce#include"all.h"usingnamespacestd;classPerDeck;classPlayingCard{private: intnValue;//撲克牌實際面值 charachFace[3];//撲克牌字符串A,2,10,J,Q,K charchSuit;//撲克牌花色public: friendclassPerDeck; PlayingCard();//將對象清零 voidShowCard();//顯示面值花色 voidCardMake(int);//給一張撲克牌賦值(面值,花色)};classDeck{private: PlayingCardm_cardarray[54]; intnLastDelt;public: friendclassPerDeck; Deck(); voidMakeDeck();//將52張牌清零(沒有大,小王) voidDealOne();//刪除開頭一張牌 voidShowDeck();//依次逐張顯示這副牌 voidDeckShuff(int);//用于洗牌,參數(shù)是洗牌次數(shù) voidRemoveCard();//清零刪除掉的那張牌};classPerDeck{private: PlayingCardmyCard[20]; intnNum;public: PerDeck(){} voidMakePerDeck(Deck&,int); voidShow(); voidSortFace(); voidSortSuit(); intDelete(intn);};classPlayDeck{private: PerDeckmyDeck[4];public: PlayDeck(){} voidPlayCard(Deck&); voidShow(); intDeleteOne(introw,intcolumn); intDeleteAll(int,int,int,int); voidSortDeckFace(int); voidSortDeckSuit(int); voids(int);};voidProgramInit();//初始化,并輸出信息voidCenterText(charShellText[80]);//居中顯示intGetNumber();//鍵入整數(shù)型charGetKey();//鍵入字符串型voidDeckMakeDiver();//主要算法(生成撲克牌,洗牌,刪除等)intGetRandInt(intmin,intmax);//在min到max間選隨機值voidProgClose();//暫停,供用戶查看中間運行結果main函數(shù).cpp#include"class.h"usingnamespacestd;intmain(void){ srand((unsigned)time(NULL)); intnCardNum=0; ProgramInit(); DeckMakeDiver(); ProgClose(); return1;}Playdeck.cpp #include"class.h"#include<iostream>usingnamespacestd;voidPlayDeck::PlayCard(Deck&k){ inta,b,c,d; charg[29]={"依次輸入四位玩家手里的牌數(shù):"}; CenterText(g); cout<<endl; cin>>a>>b>>c>>d; if(a+b+c+d>54) { charg[]={"超過牌的張數(shù),退出游戲。"}; CenterText(g); exit(0); } myDeck[0].MakePerDeck(k,a); myDeck[1].MakePerDeck(k,b); myDeck[2].MakePerDeck(k,c); myDeck[3].MakePerDeck(k,d);}voidPlayDeck::Show(){ chara[6]={"玩家1"}; charb[6]={"玩家2"}; charc[6]={"玩家3"}; chard[6]={"玩家4"}; CenterText(a); cout<<endl; myDeck[0].Show(); CenterText(b); cout<<endl; myDeck[1].Show(); CenterText(c); cout<<endl; myDeck[2].Show(); CenterText(d); cout<<endl; myDeck[3].Show();}intPlayDeck::DeleteOne(introw,intcolumn){ myDeck[row-1].Delete(column); return1;}intPlayDeck::DeleteAll(inta,intb,intc,intd){ myDeck[0].Delete(a); myDeck[1].Delete(b); myDeck[2].Delete(c); myDeck[3].Delete(d); return1;}voidPlayDeck::SortDeckFace(intb){ myDeck[b-1].SortFace();}voidPlayDeck::SortDeckSuit(intb){ myDeck[b-1].SortSuit();}voidPlayDeck::s(inta){ myDeck[a-1].Show();}Deck.cpp#include"class.h"#include<iostream>usingstd::ostream;usingnamespacestd;voidDeck::MakeDeck()//對生成的52張牌逐個賦值{ nLastDelt=53;//51 while(nLastDelt>-1) { m_cardarray[nLastDelt].CardMake(nLastDelt); nLastDelt--; }}voidDeck::ShowDeck()//顯示一副撲克牌{ chara[13]={"完整的一副牌"}; intnIndex=nLastDelt+1; intnNewLine=0; CenterText(a); cout<<endl; while(nIndex<=53)//51 { if(nNewLine%11==0)cout<<endl; m_cardarray[nIndex].ShowCard(); nNewLine++; nIndex++; }}voidDeck::DeckShuff(inttimes)//洗牌算法{ chara[11]={"洗牌"}; intx,nSplit; CenterText(a); cout<<endl; for(x=0;x<=times;x++) { nSplit=GetRandInt(20,35); DeckTopDeck; DeckBottomDeck; inti; intnBottomNum=1; intnTopNum=1; for(i=0;i<=nSplit-1;) { TopDeck.m_cardarray[nTopNum]=this->m_cardarray[i]; nTopNum++; i++; } for(i=(nSplit);i<54;)//52 { BottomDeck.m_cardarray[nBottomNum]=this->m_cardarray[i]; nBottomNum++; i++; } intnOutNum=0; intnNumToTop; intnNumToBottom; intj; inth=0; nBottomNum=54-nSplit;//52 nTopNum=nSplit; while(nOutNum<53)//51 { nNumToTop=GetRandInt(2,7); nNumToBottom=GetRandInt(2,7); for(j=0;j<=nNumToBottom;j++) { if(nBottomNum>0) { this->m_cardarray[nOutNum]=BottomDeck.m_cardarray[nBottomNum]; nOutNum++; nBottomNum--; } for(h=0;h<=nNumToTop;h++) { if((nTopNum>0)&&(nOutNum<=54))//52 { this->m_cardarray[nOutNum]=TopDeck.m_cardarray[nTopNum]; nOutNum++; nTopNum--; } } } } } this->nLastDelt=-1;}voidDeck::RemoveCard()//將刪除的那張牌清零{ m_cardarray[nLastDelt]=PlayingCard();//清零}voidDeck::DealOne()//從一副撲克牌中刪除一張牌{ if(nLastDelt!=53)//51 { nLastDelt++; cout.width(5); cout<<endl; cout<<"刪除牌:"; m_cardarray[nLastDelt].ShowCard(); RemoveCard(); } else { cout<<"這副牌全部刪除完了"; ProgClose(); }}Deck::Deck()//初始化一副撲克牌,將52張撲克牌均清零{ intlastdelt=0; for(inti=0;i<=53;i++)//51 { m_cardarray[i]=PlayingCard(); }}Main調用的函數(shù).cpp#include"class.h"#include<iostream>usingnamespacestd;voidProgramInit()//程序一開始的提示信息{ chara[11]={"撲克牌游戲"}; charb[25]={"單擊<Return>鍵開始"}; CenterText(a); cout<<endl<<'\n'; CenterText(b); cin.get();}charGetKey()//從鍵盤接收一個字符,將其作為函數(shù)返回值{ charx; x=cin.get(); cout<<endl; returnx;}voidCenterText(charShellText[80])//居中算法{ intnCenter; intnLength; nLength=strlen(ShellText); nCenter=(80-nLength)/2; for(;nCenter!=0;nCenter--) { cout<<""; } cout<<ShellText;}intGetNumber()//從鍵盤接收一個整數(shù)值,作為函數(shù)返回值{ chara[40]={"請輸入一個在0到51之間的整數(shù),輸入52退出."}; intnInputInteger=0; CenterText(a); cout<<endl; cin>>nInputInteger; returnnInputInteger;}voidProgClose()//程序暫停,按任意鍵繼續(xù){ cout<<endl<<endl; cout<<"單擊<Return>鍵繼續(xù)"<<endl; cout<<endl<<endl; GetKey(); cin.get();}voidDeckMakeDiver()//主要程序操作部分,調用多個函數(shù),包含完整生成一副牌,洗牌,顯示,刪除等操作{ Deckdeck_1; deck_1.MakeDeck(); deck_1.ShowDeck(); GetKey(); deck_1.DeckShuff(250); deck_1.ShowDeck(); cout<<endl<<endl<<endl; chary; PlayDeckF; F.PlayCard(deck_1); cout<<endl<<endl<<endl; F.Show(); intg=0; do { chara[9]={"游戲規(guī)則"}; charb[23]={"刪除一位玩家的牌輸入1"}; charc[23]={"刪除四位玩家的牌輸入2"}; chard[23]={"按牌的面值排序輸入3"}; chare[23]={"按牌的花色排序輸入4"}; charf[23]={"顯示四位玩家手牌輸入5"}; charq[23]={"按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; CenterText(q); cout<<endl; cin>>g; if(g==1) { intj,k; charh; cout<<"請輸入刪除玩家的編號和牌號(從左往右數(shù)的第N張)"<<endl; cin>>j>>k; F.DeleteOne(j,k); cout<<endl<<"是(Y)否(N)顯示刪除后的手牌?"<<endl; cin>>h; h=toupper(h); if(h=='Y')F.s(j); cout<<endl; } if(g==2) { intw,x,h,z; chary; cout<<"請依次輸入欲刪除各玩家牌的序號。"<<endl; cin>>w>>x>>h>>z; F.DeleteAll(w,x,h,z); cout<<endl<<"是(Y)否(N)顯示刪除后玩家的牌?"<<endl; cin>>y; y=toupper(y); if(y=='Y')F.Show(); cout<<endl; } if(g==3) { inth; chary; cout<<"請輸入需要排序的玩家"<<endl; cin>>h; F.SortDeckFace(h); cout<<"是(Y)否(N)顯示排序后的牌?"<<endl; cin>>y; y=toupper(y); if(y=='Y')F.s(h); } if(g==4) { intx; chary; cout<<"請輸入需要排序玩家的序號"<<endl; cin>>x; F.SortDeckSuit(x); cout<<"是(Y)否(N)顯示排序后的牌?"<<endl; cin>>y; y=toupper(y); if(y=='Y')F.s(x); } if(g==5) { F.Show(); } if(g==78||g==110) { gotoloop; } cout<<"是(Y)否(N)回到游戲規(guī)則菜單?"<<endl; cout<<endl; cin>>y; y=toupper(y); }while(y=='Y');loop:;}intGetRandInt(intnMin,intnMax)//返回min至max之間的任意一值(實際上是“洗牌算法”s的一部分){ intnNumToReturn; nNumToReturn=rand(); nNumToReturn=nNumToReturn%(nMax-nMin+1)+nMin; returnnNumToReturn;}Playingcard.cpp#include"class.h"#include<iostream>usingnamespacestd;PlayingCard::PlayingCard()//撲克牌對象的構造函數(shù){ for(inti=1;i<=3;) { achFace[i]=''; i++; } chSuit=''; nValue=0;}voidPlayingCard::ShowCard()//在屏幕上顯示一張撲克牌的面值及花色{ cout<<""; cout<<achFace; cout.width(1); cout<<chSuit; cout<<"";}voidPlayingCard::CardMake(intnNum)//根據(jù)參數(shù)nNum生成一張撲克牌,nNum不同,生成的面值或花色不同{ inti=0; charj; intnFaceNum=nNum%13; if(nNum==52) { strcpy(achFace,"S"); gotoloop; } if(nNum==53) { strcpy(achFace,"B"); gotoloop; } switch(nFaceNum) { case0:strcpy(achFace,"A");break; case9:strcpy(achFace,"10");break; case10:strcpy(achFace,"J");break; case11:strcpy(achFace,"Q");break; case12:strcpy(achFace,"K");break; default: j=char(nFaceNum+49); if(i<3) { achFace[i]='';i++; achFace[i]=j;i++; achFace[i]=NULL; break; } }loop:; if(nNum<=12)chSuit=6;//紅桃 if(nNum>12&&nNum<=25)chSuit=3;//黑桃 if(nNum>25&&nNum<=38)chSuit=5;//梅花 if(nNum>38&&nNum<=51)chSuit=4;//方塊 if(nFaceNum<=9)nValue=nFaceNum+1; if(nFaceNum>=10)nValue=10; if(nNum==52) { nValue=11; chSuit=49; } if(nNum==53) { nValue=12; chSuit=50; }}Perdeck.cpp#include<iostream>#include"class.h"usingnamespacestd;voidPerDeck::MakePerDeck(Deck&d,inta){ nNum=a; inti=0; while(i<a&&d.nLastDelt!=53) { myCard[i++]=d.m_cardarray[++d.nLastDelt]; }}voidPerDeck::Show(){ chara[12]={"該玩家的牌:"}; intnNewLine=0; CenterText(a); cout<<endl; while(nNewLine<nNum) { if(nNewLine%5==0) cout<<endl; myCard[nNewLine++].ShowCard(); } cout<<endl;}voidPerDeck::SortFace()//冒泡{ PlayingCardk; for(inti=0;i<nNum;i++) for(intj=0;j+i<nNum-1;j++) if(myCard[j].nValue>myCard[j+1].nValue) { k=myCard[j]; myCard[j]=myCard[j+1]; myCard[j+1]=k; }}voidPerDeck::SortSuit(){ PlayingCardk; for(inti=0;i<nNum;i++) for(intj=0;j+i<nNum-1;j++) if(myCard[j].chSuit>myCard[j+1].chSuit) { k=myCard[j]; myCard[j]=myCard[j+1]; myCard[j+1]=k; }}intPerDeck::Delete(intn){ if(n>nNum) { cout<<"超出總牌數(shù)!"<<endl; returnnNum; } else { cout.widen(5); cout<<"刪除牌:"; myCard[n-1].ShowCard(); while(n<nNum+1) { myCard[n-1]=myCard[n++]; } return--nNum; }}6調試分析學校的VS2021提示“未使用調試信息生成二進制文件”自己電腦的Vs2021沒有提示這個過,所以百度了一下 解決:1.項目屬性配置屬性鏈接器調試生成調試信息:是(/DEBUG) 2.項目屬性配置屬性C/C++調試信息格式(/Zi) 3.項目屬性配置屬性C/C++優(yōu)化優(yōu)化:禁用(/Od)7用戶使用說明1兩次回車洗牌 2依次輸入四個玩家手牌個數(shù) 3進入”游戲規(guī)則”菜單頁,按提示輸入一到五的阿拉伯數(shù)字 4按N退回菜單頁8測試結果9課程設計總結C++課程設計使得我們學以致用,更加熟悉代碼以及其工作的機理.在這次課程設計中,我受益匪淺.10參考文獻C++PrimerPlus人民郵電出版社中國工信出版社C++Primer人民郵電出版社中國工信出版社算法筆記機械工業(yè)出版社
論大學生寫作能力寫作能力是對自己所積累的信息進行選擇、提取、加工、改造并將之形成為書面文字的能力。積累是寫作的基礎,積累越厚實,寫作就越有基礎,文章就能根深葉茂開奇葩。沒有積累,胸無點墨,怎么也不會寫出作文來的。寫作能力是每個大學生必須具備的能力。從目前高校整體情況上看,大學生的寫作能力較為欠缺。一、大學生應用文寫作能力的定義那么,大學生的寫作能力究竟是指什么呢?葉圣陶先生曾經(jīng)說過,“大學畢業(yè)生不一定能寫小說詩歌,但是一定要寫工作和生活中實用的文章,而且非寫得既通順又扎實不可。”對于大學生的寫作能力應包含什么,可能有多種理解,但從葉圣陶先生的談話中,我認為:大學生寫作能力應包括應用寫作能力和文學寫作能力,而前者是必須的,后者是“不一定”要具備,能具備則更好。眾所周知,對于大學生來說,是要寫畢業(yè)論文的,我認為寫作論文的能力可以包含在應用寫作能力之中。大學生寫作能力的體現(xiàn),也往往是在撰寫畢業(yè)論文中集中體現(xiàn)出來的。本科畢業(yè)論文無論是對于學生個人還是對于院系和學校來說,都是十分重要的。如何提高本科畢業(yè)論文的質量和水平,就成為教育行政部門和高校都很重視的一個重要課題。如何提高大學生的寫作能力的問題必須得到社會的廣泛關注,并且提出對策去實施解決。二、造成大學生應用文寫作困境的原因:(一)大學寫作課開設結構不合理。就目前中國多數(shù)高校的學科設置來看,除了中文專業(yè)會系統(tǒng)開設寫作的系列課程外,其他專業(yè)的學生都只開設了普及性的《大學語文》課。學生寫作能力的提高是一項艱巨復雜的任務,而我們的課程設置僅把這一任務交給了大學語文教師,可大學語文教師既要在有限課時時間內普及相關經(jīng)典名著知識,又要適度提高學生的鑒賞能力,且要教會學生寫作規(guī)律并提高寫作能力,任務之重實難完成。(二)對實用寫作的普遍性不重視。“大學語文”教育已經(jīng)被嚴重地“邊緣化”。目前對中國語文的態(tài)度淡漠,而是呈現(xiàn)出全民學英語的大好勢頭。中小學如此,大學更是如此。對我們的母語中國語文,在大學反而被漠視,沒有相關的課程的設置,沒有系統(tǒng)的學習實踐訓練。這其實是國人的一種偏見。應用寫作有它自身的規(guī)律和方法。一個人學問很大,會寫小說、詩歌、戲劇等,但如果不曉得應用文寫作的特點和方法,他就寫不好應用文。(三)部分大學生學習態(tài)度不端正。很多非中文專業(yè)的大學生對寫作的學習和訓練都只是集中在《大學語文》這一門課上,大部分學生只愿意被動地接受大學語文老師所講授的文學經(jīng)典故事,而對于需要學生動手動腦去寫的作文,卻是盡可能應付差事,這樣勢必不能讓大學生的寫作水平有所提高。(四)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村旅游與鄉(xiāng)村旅游目的地形象塑造策略研究-2025年文旅融合背景下的報告
- 教育游戲化的技術實現(xiàn)與優(yōu)化研究
- 能源管理智慧能源系統(tǒng)的規(guī)劃與應用
- 商業(yè)創(chuàng)新的驅動力活塞式真空泵的技術優(yōu)勢
- 教育數(shù)據(jù)挖掘在商業(yè)決策中的應用
- 學習動力與學習興趣的培養(yǎng)教育心理學的視角
- 情緒智能在工作場所的應用與價值
- 環(huán)保植物纖維包裝創(chuàng)新大賽創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 高效的增氧技術創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 印刷車間綠色改造創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 腦卒中的飲食護理課件
- 2025年多重耐藥菌培訓知識試題及答案
- 2025至2030中國航空球軸承行業(yè)項目調研及市場前景預測評估報告
- 2025年湖北省中考語文試卷真題(含標準答案及解析)
- 2025至2030中國牙科氧化鋯塊行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025年成都市中考語文試題卷(含標準答案及解析)
- 2025至2030中國松茸行業(yè)市場發(fā)展分析及發(fā)展前景與投資報告
- MZ調制器完整版本
- 2024版肺結核治療指南
- 空壓機改造合同協(xié)議
- 2025公安局招聘輔警考試筆試題及答案
評論
0/150
提交評論