課程實驗設(shè)計:基于c++面向?qū)ο蟮氖^剪子布游戲-附源代碼_第1頁
課程實驗設(shè)計:基于c++面向?qū)ο蟮氖^剪子布游戲-附源代碼_第2頁
課程實驗設(shè)計:基于c++面向?qū)ο蟮氖^剪子布游戲-附源代碼_第3頁
課程實驗設(shè)計:基于c++面向?qū)ο蟮氖^剪子布游戲-附源代碼_第4頁
課程實驗設(shè)計:基于c++面向?qū)ο蟮氖^剪子布游戲-附源代碼_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、(sdut)(附源代碼)基于C+設(shè)計的剪刀石頭布的游戲信科1301 韓玙歟1 需求分析 題目的要求是要求:(1)實現(xiàn)人機對戰(zhàn)的功能,(2)程序具有啟動菜單和歡迎信息;(3)可以記錄比賽的次數(shù),輸贏的次數(shù)其中輸入形式為代表石頭剪子和布三種實物的字符;我在這里選擇用2代表石頭,1代表剪子,0代表布。我在程序中設(shè)計了三種游戲方式,分別為,人機模式,人人模式,連勝模式,其中人機模式設(shè)置有記錄,可以記錄總共的勝局敗局和平局,連勝模式設(shè)置了英雄榜取得更高連勝成績的人可以更新英雄榜。(測試數(shù)據(jù)見6 ) 2概要設(shè)計 3詳細設(shè)計 程序中共有cai,caipeople,caichallenge三個類,以實現(xiàn)游戲中

2、人機對戰(zhàn),人人對戰(zhàn),和連勝模式。對于猜拳過程中隨機情況的使用,我選擇的是調(diào)用知道,C語言中rand()函數(shù),但是因為rand()函數(shù)是按指定的順序來產(chǎn)生整數(shù),因此每次執(zhí)行上面的語句都打印相同的兩個值,所以說C語言的隨機并不是真正意義上的隨機,有時候也叫偽隨機數(shù)。所以如果玩家可以知道多次重啟游戲后可以知道電腦的前幾次出拳會是什么。在判斷輸贏的過程中,如果玩家1贏電腦(或玩家2)則會出現(xiàn)關(guān)系式字符2-1=1,1-0=0,0-2=-2;所以可使用if(a1-a2=1|a1-a2=-2);平局為else if(a1-a2=0);失敗為else ;其中使用了windows.h來設(shè)置字體的顏色,和窗口的大

3、小,同時在編程過程中加入適當?shù)淖址嬕赃_到美化的效果。(函數(shù)調(diào)用關(guān)系請看概要設(shè)計) 4 調(diào)試分析 算法復(fù)雜程度一般,較為簡單。可采用time.h結(jié)合srand()和rand()配合使用產(chǎn)生隨機數(shù)序列。做的不錯。5 用戶使用說明 輸入數(shù)字使用鍵盤輸入字符,按回車運行。6 測試結(jié)果 7 參考文獻 C_Primer_Plus(第五版)中文版8 附錄#pragma warning (disable:4996)#include <iostream>#include <stdio.h>#include <Windows.h>#include <time.h>

4、#include <string>using namespace std;HANDLE g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);/創(chuàng)建句柄/設(shè)置光標位置void SetCursor(COORD cd) SetConsoleCursorPosition(g_hOutput, cd);void SetCursor(int x, int y) COORD cd = x, y ; SetCursor(cd);void play();void playpeople();void playchallenge();void explain();vo

5、id rank_1();void record();void about();void time_1();void chuquan(int a);/展示出拳char name10;/擂主記錄int big=0;int bigger=0;class cai/普通猜拳模式private:int i;int a;public:static int x,y,z;void show(int chu)i=rand()%3;a=chu;cout<<"你的出拳:"chuquan(a);cout<<" VS "<<"電腦的出拳

6、:"chuquan(i);cout<<endl;if(a-i=1|a-i=-2)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED );cout<<"you win"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREE

7、N | FOREGROUND_BLUE);x+;else if(a-i=0)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN);cout<<"pingle"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUN

8、D_BLUE);y+;elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE);cout<<"defeat"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);z+;cout<<&

9、quot;你目前:ntwin局t平局t輸局"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"t"<<cai:x;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);cout<<"t"<&l

10、t;cai:y;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE| FOREGROUND_GREEN);cout<<"t"<<cai:z<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLU

11、E);int cai:x=0;int cai:y=0;int cai:z=0;class caipeople/人人猜拳模式private:int p1;int p2;public:void play()cout<<"t石頭:2 剪子:1布:0"<<endl;cout<<"請玩家一輸入所出拳,n玩家二回避。"<<endl;cin>>p1;system("cls");cout<<"t石頭:2 剪子:1布:0"<<endl;cout<

12、;<"請玩家一輸入所出拳,n玩家二回避。"<<endl;cout<<"*"<<endl;cout<<"請玩家二輸入所出拳"<<endl;cin>>p2;system("cls");cout<<"t石頭:2 剪子:1布:"<<endl;cout<<"玩家一所出拳:"chuquan(p1);cout<<"n玩家二所出拳所出拳:"chuq

13、uan(p2);cout<<endl;if(p1-p2=1|p1-p2=-2)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"玩家一獲勝"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREG

14、ROUND_BLUE);else if(p1-p2=0)cout<<"實力相當"<<endl;elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"玩家二獲勝"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RE

15、D | FOREGROUND_GREEN | FOREGROUND_BLUE);class caichallenge/連勝模式private:int a1;int a2;public:/static int vs;int no;void play()no=0;cout<<"t"cin>>a1;a2=rand()%3;Sleep(500);cout<<"t.n"Sleep(500);cout<<"t.n"Sleep(500);cout<<"t.n"Sleep

16、(500);cout<<"t.n"Sleep(500);cout<<"t.n"cout<<"你的出拳:"chuquan(a1);cout<<" VS "<<"電腦的出拳:"chuquan(a2);cout<<endl;if(a1-a2=1|a1-a2=-2)cout<<"t再來猜我一拳!"big+;else if(a1-a2=0)cout<<"t好漢再來一局"e

17、lsecout<<"t再回去修煉一下吧"<<endl;no=-1;/int caichallenge:vs=0;cai use;/用于靜態(tài)的變量的調(diào)用void operate(string);cai a;caipeople a2;caichallenge a3;int main()system("cls"); system("mode con cols=34 lines=40");/定義窗體大小string ch;doSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT

18、_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN);cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<""<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<

19、;<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOR

20、EGROUND_BLUE);cout<<"*"<<endl;cout<<"* 石頭剪子布 *"<<endl;cout<<"* 1.進入游戲(人機對戰(zhàn)) *"<<endl;cout<<"* 2.進入游戲(人人對戰(zhàn)) *"<<endl;cout<<"* 3.挑戰(zhàn)模式(連勝模式) *"<<endl;cout<<"* 4.游戲說明 *"<<e

21、ndl;cout<<"* 5.游戲記錄 *"<<endl;cout<<"* 6.排行榜(連勝模式) *"<<endl;cout<<"* 7.關(guān)于 *"<<endl;cout<<"* 8.查看當前時間 *"<<endl;cout<<"* 0.退出游戲 *"<<endl;cout<<"*輸入對應(yīng)數(shù)字,按下回車使用其功能*"<<endl;c

22、out<<"*"<<endl;/*do /HideCursor(); SetCursor(44, 0); time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); SetConsoleTextAttribute(g_hOutput, FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf("%s", asctime(timeinfo); Sleep(1000);

23、 while (1);*/cin>>ch;operate(ch);system("pause");system("cls");while(ch!="0");return 0;void operate(string str)system("cls");if(str="1")play();else if(str="2")playpeople();else if(str="3")playchallenge();else if(str="4&

24、quot;)explain();else if(str="5")record();else if(str="6")rank_1();else if(str="7")about();else if(str="8")time_1();else if(str="0")cout<<"byebye"<<endl;elsecout<<"請輸入有效數(shù)字"<<endl;void play()cout<<"

25、;石頭:2 剪子:1布:0"<<endl;int x;docin>>x;a.show(x);cout<<"繼續(xù)輸入2,1,0可繼續(xù)猜拳,輸入其他按鍵結(jié)束戰(zhàn)斗,返回上界面"<<endl;while(x=0|x=1|x=2);void playpeople()int x;doa2.play();cout<<"輸入0終止猜拳,輸入其他繼續(xù)進行對決"<<endl;cin>>x;while(x!=0);void playchallenge()int x;big=0;cou

26、t<<"當前為連勝模式,如果勝利可取得繼續(xù)猜拳的資格,且中途不可退出,如果猜拳失敗則返回上一界面n戰(zhàn)斗吧!"<<endl;cout<<"請出拳"<<endl;doa3.play();x=a3.no;while(x!=-1);if(bigger<=big)bigger=big;cout<<"恭喜你創(chuàng)造了新的世界記錄,請留下您的大名"<<endl;/for(int z;z<10;z+)/namez='0'cin>>name;vo

27、id explain()cout<<"規(guī)則:n 石頭打剪刀,n 布包石頭,n 剪刀剪布,n 輸入2代表石頭,n 輸入1代表剪子,n 輸入0代表布。n輸入后按下回車n同電腦進行猜拳。"<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);cout<<" "<<endl;cout<<""<&l

28、t;endl; cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""<<endl;cout<<" 必"<<

29、;endl;cout<<" 勝"<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;cout<<" "<<endl;SetConsoleTextAttribute(Get

30、StdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void about()cout<<" 當前版本1.0.0 "<<endl;cout<<" 基于c+的石頭剪子布游戲 "<<endl;cout<<" 作者:韓志杰 "<<endl;cout<<" 生產(chǎn)日期:2014/7/7 "

31、<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED);cout<<" | "<<endl;cout<<" /7 / "<<endl;cout<<" / "<<endl;cout<<" Z , / "<<endl;cout&l

32、t;<" /"<<endl;cout<<" Y / / "<<endl;cout<<" < .> / "<<endl;cout<<" () () | "<<endl;cout<<" > _ / "<<endl;cout<<" / / | "<<endl;cout<<" _/(_ "<&

33、lt;endl;cout<<" 7| "<<endl;cout<<" r 丨 "<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void record()cout<<"你目前:ntwin局t平局t輸局"<<endl;SetConsoleT

34、extAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);cout<<"t"<<cai:x;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);cout<<"t"<<cai:y;SetConsoleTextAttribute(GetStdHandle(STD_OU

35、TPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE| FOREGROUND_GREEN);cout<<"t"<<cai:z<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);void rank_1()cout<<"* HERO *"cout<<" "<<name<<" 連勝"<<bi

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論