剪刀石頭布說(shuō)明書(shū)
摘要:本文主要介紹利用C++高級(jí)語(yǔ)言實(shí)現(xiàn)石頭剪子布游戲的編輯和運(yùn)行。通過(guò) Visual Studio 2017 軟件進(jìn)行石頭剪子布游戲程序的編譯,確定模塊之間關(guān)系及各模塊功能,設(shè)計(jì)一個(gè)簡(jiǎn)單的操作界面實(shí)現(xiàn)石頭剪子布游戲,。
石頭剪子布游戲系統(tǒng)通過(guò)C++高級(jí)語(yǔ)言進(jìn)行編程,并設(shè)計(jì)了簡(jiǎn)單明了的操作界面,為用戶提供更好的操作體驗(yàn),更直接而充分的掌握本程序的一些應(yīng)用和功能。通過(guò)直觀的方式,最終實(shí)現(xiàn)C++設(shè)計(jì)的應(yīng)用程序——石頭剪子布游戲。本次課設(shè)所做程序雖然只是一個(gè)簡(jiǎn)單的C++手石頭剪子布游戲程序,但是基本的應(yīng)用功能都已具備,可以更好的用在實(shí)際應(yīng)用中。
第1章 軟件設(shè)計(jì)內(nèi)容
1.1設(shè)計(jì)內(nèi)容
1.2 軟件功能說(shuō)明
1.2.1 功能分析說(shuō)明圖
1.2.2 各項(xiàng)功能說(shuō)明
第2章 軟件設(shè)計(jì)環(huán)境與原理
2.1 設(shè)計(jì)環(huán)境與模塊的劃分
2.1.1 軟件設(shè)計(jì)環(huán)境
2.1.2 軟件模塊的劃分
2.2 軟件設(shè)計(jì)主要原理
2.2.1 采用的主要數(shù)據(jù)結(jié)構(gòu)類型
2.2.2 各個(gè)模塊之間的調(diào)用關(guān)系和數(shù)據(jù)儲(chǔ)存格式說(shuō)明
2.2.3 主要流程圖
第3章 軟件的設(shè)計(jì)過(guò)程
3.1 各軟件模塊之間的調(diào)用方式
3.2 軟件中實(shí)現(xiàn)各項(xiàng)功能的函數(shù)與程序代碼
第4章 設(shè)計(jì)結(jié)果與分析
4.1軟件使用結(jié)果
總結(jié)
致謝
附錄
第1章 軟件設(shè)計(jì)內(nèi)容
1.1 設(shè)計(jì)內(nèi)容完成一個(gè)經(jīng)典的小游戲設(shè)計(jì):錘頭剪刀和布。設(shè)計(jì)內(nèi)容如下: 1、玩家通過(guò)鍵盤輸入字符h、s、c. h表示錘子,s表示剪刀,c表示布。如果玩家輸入的字符和電腦隨機(jī)選擇的字符一致,則表示平局。如果不一致,則按照錘子勝剪刀、剪刀勝布、布勝錘子的規(guī)則決出勝負(fù)。 2、如果是兩個(gè)游戲玩家對(duì)戰(zhàn),則先出的玩家,其輸入的符號(hào)需要隱藏。 然后決出勝負(fù)。 3、有局?jǐn)?shù)選擇功能: 三局兩勝、五局三勝等。 4、統(tǒng)計(jì)輸贏的次數(shù)
1.2 軟件功能說(shuō)明
1.2.1 功能分析說(shuō)明圖該軟件功能分析說(shuō)明圖如1-2-1所示:
圖:1-2-1 1.2.2 各項(xiàng)功能說(shuō)明(1)游戲運(yùn)行入口: 這部分的功能主要包括游戲規(guī)則及操作說(shuō)明、選擇游戲模式和進(jìn)行游戲。 (2)游戲規(guī)則及操作說(shuō)明: 游戲規(guī)則:在這個(gè)游戲中,h表示石頭,s表示剪刀,c表示布,r表示查看對(duì)局結(jié)果,p表示查看操作說(shuō)明,i表示查看游戲規(guī)則,q表示退出游戲。若兩個(gè)玩家出的的選擇相同,那么這一句就是平局。否則,石頭打剪刀,布包石頭,剪刀剪布,這個(gè)游戲一直重復(fù)到玩家退出為止。 (3)進(jìn)入游戲: 進(jìn)入游戲有兩個(gè)選擇:1、人機(jī)模式,2、雙人模式。 (4)選擇下續(xù)操作: 即玩家再次出剪刀石頭布。 (5)獲得隨機(jī)選擇: 此項(xiàng)功能是電腦隨機(jī)出剪刀石頭布。 (6)判斷輸贏。 選擇次項(xiàng)功能后,根據(jù)前面出的剪刀石頭布來(lái)判斷輸贏。 (7)顯示對(duì)局結(jié)果。
第2章 軟件設(shè)計(jì)環(huán)境與原理
2.1 設(shè)計(jì)環(huán)境與模塊的劃分
2.1.1 軟件設(shè)計(jì)環(huán)境Visual Studio 2017 2.1.2 軟件模塊的劃分該軟件主要組成模塊和各個(gè)模塊之間的調(diào)用關(guān)系如圖2-1:
圖:2-1 2.2 軟件設(shè)計(jì)主要原理
2.2.1 采用的主要數(shù)據(jù)結(jié)構(gòu)類型該程序采用的是結(jié)構(gòu)體類型來(lái)出剪刀石頭布,如下所述。 包含的庫(kù)函數(shù)有: #include "game.h" #include <string> #include <conio.h> 頭文件中主要內(nèi)容: void run(); // 游戲運(yùn)行入口 void initial(); // 游戲規(guī)則及操作說(shuō)明 void instruct(); // 游戲規(guī)則 void helpp(); // 操作說(shuō)明 void choose_mode(); // 選擇游戲模式 void play(); // 進(jìn)行游戲 choices choose(); // 選擇下續(xù)操作 choices get_random(); // 獲得隨機(jī)選擇 void show_result(int, int, int); // 顯示對(duì)局結(jié)果 void compare(choices, choices); // 判斷輸贏 2.2.2 各個(gè)模塊之間的調(diào)用關(guān)系和數(shù)據(jù)儲(chǔ)存格式說(shuō)明各函數(shù)模塊之間的調(diào)用關(guān)系主要是主函數(shù)調(diào)用所有其它功能函數(shù)和菜單函數(shù),并利用循環(huán)使各個(gè)功能函數(shù)運(yùn)行完畢后都會(huì)回到菜單。 2.2.3 主要流程圖
圖:2-2-1游戲系統(tǒng)
圖2-2-2 總流程圖(見(jiàn)附件)
第3章 軟件的設(shè)計(jì)過(guò)程 3.1 各軟件模塊之間的調(diào)用方式程序中各個(gè)模塊之間的調(diào)用方式主要是通過(guò)文件的包含和函數(shù)的調(diào)用實(shí)現(xiàn)的,用文件的形式把各個(gè)函數(shù)分開(kāi),再用頭文件把它們包含進(jìn)來(lái),使用主函數(shù)進(jìn)行調(diào)用。
第4章 設(shè)計(jì)結(jié)果與分析
4.1軟件使用結(jié)果在此,我們將把軟件使用過(guò)程寫(xiě)出,并對(duì)此程序的一些細(xì)節(jié)和具體的操作方法加以說(shuō)明,說(shuō)明如下: - 將軟件進(jìn)行初始化。
- 進(jìn)入程序菜單,界面如圖4-1-1:
菜單界面 圖4-1-1 界面顯示的是“石頭剪刀布游戲說(shuō)明及操作說(shuō)明”。根據(jù)提示,玩家選擇需要的游戲類型。 - 輸入游戲類型:選擇菜單界面的第一個(gè)人機(jī)模式,按Enter鍵進(jìn)入此選擇界面,出現(xiàn)的界面如圖4-1-2:
圖4-1-2游戲模式 在這個(gè)界面給出了游戲模式的兩種選擇,也就是說(shuō),玩家可以選擇剪刀石頭布的兩種游戲模式:三局兩勝和五局三勝,如選擇三局兩勝,按Enter鍵進(jìn)入輸入界面,輸入界面如圖4-1-3: 圖4-1-3 玩家可以選擇按(h、s、c)來(lái)決定出石頭剪刀布(h表示石頭,s表示剪刀,c表示出布),重復(fù)此次操作三次,游戲結(jié)束。如果玩家對(duì)操作不是很熟悉,可以按p來(lái)查看操作說(shuō)明,得到操作說(shuō)明如圖4-1-4 如圖4-1-4 如果輸入的字符不在給定的范圍內(nèi),則界面上將顯示輸入的格式有誤,請(qǐng)重新輸入,才可以進(jìn)行下面的程序。,如圖4-1-5: 圖4-1-5 - 當(dāng)玩家完成三次猜拳機(jī)會(huì)時(shí),按Enter鍵進(jìn)入此界面,則出現(xiàn)的界面如圖4-1-6:
圖4-1-6 界面上的圖即顯示的是三次猜拳游戲后游戲結(jié)果,,可按任意鍵可退出此界面。
總結(jié)通過(guò)兩星期的C++語(yǔ)言程序設(shè)計(jì)實(shí)習(xí),不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。我們從中受益匪淺,并且對(duì)C++語(yǔ)言程序設(shè)計(jì)這一門課程有了更深一步的認(rèn)識(shí)。在實(shí)習(xí)中,我們可以把這學(xué)期所學(xué)的理論知識(shí)和實(shí)踐聯(lián)系起來(lái),在所要開(kāi)發(fā)的項(xiàng)目中漸漸成長(zhǎng)。雖然我們對(duì)這些C++語(yǔ)言知識(shí)運(yùn)用得還不是很熟練,但是相信我們也在滴水穿石地成長(zhǎng)起來(lái)。發(fā)現(xiàn)問(wèn)題,提出問(wèn)題,解決問(wèn)題,使我們從不足之處出發(fā),尋找新的學(xué)習(xí)方向。 在實(shí)習(xí)中,我們?cè)O(shè)計(jì)了一個(gè)剪刀石頭布的小游戲,它有兩種模式:人機(jī)模式和玩家模式,在每種模式下又細(xì)分為兩種游戲類型:三局兩勝和五局三勝。在剛開(kāi)始時(shí)游戲遇到了許許多多的小問(wèn)題:如在選擇1、人機(jī)模式還是2、玩家模式時(shí),除了按1和2外,按其他鍵時(shí),會(huì)出現(xiàn)無(wú)限循環(huán)的現(xiàn)象,造成這種現(xiàn)象的原因時(shí):條件不完備。解決辦法時(shí)在這兩種模式下加入,輸入的格式不正確,請(qǐng)重新輸入。 課程設(shè)計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,著是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過(guò)程.”千里之行始于足下”,通過(guò)這次課程設(shè)計(jì),我深深體會(huì)到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會(huì)腳踏實(shí)地邁開(kāi)這一步,就是為明天能穩(wěn)健地在社會(huì)大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ). 提高了計(jì)算能力,,熟悉了規(guī)范和標(biāo)準(zhǔn),同時(shí)各科相關(guān)的課程都有了全面的復(fù)習(xí),獨(dú)立思考的能力也有了提高。
致謝經(jīng)過(guò)這兩周的實(shí)習(xí),我們獲得了許多在課堂上聽(tīng)課而不能獲得的知識(shí),首先我們要感謝學(xué)校給我們安排的這次的C++語(yǔ)言程序設(shè)計(jì)實(shí)習(xí),然后我要感謝老師們對(duì)我們熱心的指導(dǎo)和幫助,是他們教會(huì)了我們?cè)鯓咏鉀Q問(wèn)題的方法,這樣我們的軟件設(shè)計(jì)才會(huì)更加順利地進(jìn)行,并且充分掌握了設(shè)計(jì)程序的方法。我們還要感謝許多同學(xué)的幫助,他們的幫助對(duì)于我們來(lái)說(shuō)也是必不可少的。總之,是有了他們的幫助,我們才能順利地完成軟件設(shè)計(jì),在這里我們要向他們說(shuō)一句:謝謝,非常感謝!你們辛苦了!
3.2 軟件中實(shí)現(xiàn)各項(xiàng)功能的函數(shù)與程序代碼
一、頭文件中代碼
- #include <iostream>
- using namespace std;
-
- enum choices{
- hammer, // 石頭
- scissors, // 剪刀
- cloth // 布
- };
-
- // char choice_name[][9] = { "hammer", "scissors", "cloth" };
-
-
- class Game
- {
- public:
- Game(); // 構(gòu)造函數(shù)初始化數(shù)據(jù)成員
- void run(); // 游戲運(yùn)行入口
- void initial(); // 游戲規(guī)則及操作說(shuō)明
- void instruct(); // 游戲規(guī)則
- void helpp(); // 操作說(shuō)明
- void choose_mode(); // 選擇游戲模式
- void play(); // 進(jìn)行游戲
- choices choose(); // 選擇下續(xù)操作
- choices get_random(); // 獲得隨機(jī)選擇
- void show_result(int, int, int); // 顯示對(duì)局結(jié)果
- void compare(choices, choices); // 判斷輸贏
- private:
- int win; // 玩家1贏的次數(shù)
- int lose; // 玩家1輸?shù)拇螖?shù)
- int tie; // 平局次數(shù)
- char mode[2]; // 記錄游戲模式
- choices player1, player2; // 記錄玩家做的選擇
- };
- 主函數(shù)
- #include<iostream>
- #include"game.h"
- using namespace std;
-
- int main()
- {
- Game g;
- g.run();
- return 0;
- }
- 具體功能實(shí)現(xiàn)代碼
- #include "game.h"
- #include <string>
- #include <conio.h>
-
- Game::Game()
- {
- win = 0;
- lose = 0;
- tie = 0;
- }
- void Game::run() // 游戲運(yùn)行入口
- {
-
- initial(); // 游戲規(guī)則及操作說(shuō)明
- choose_mode(); // 選擇游戲模式
- play(); // 進(jìn)行游戲
- }
-
- void Game::initial() // 游戲規(guī)則及操作說(shuō)明
- {
- cout << "**** 石頭剪刀布 游戲說(shuō)明 **** " << endl;
- cout << endl;
- instruct();
- helpp();
- cout << "祝你好運(yùn)!" << endl;
- cout << endl;
- }
- void Game::instruct() // 游戲規(guī)則
- {
- cout << "游戲規(guī)則" << endl;
- cout << "\t 在這個(gè)游戲中" << endl;
- cout << "\t h 表示石頭" << endl;
- cout << "\t s 表示剪刀" << endl;
- cout << "\t c 表示布" << endl;
- cout << "\t 若兩玩家的選擇相同, 那么這一局就是平局" << endl;
- cout << "\t 否則, 石頭打剪刀, 布包石頭, 剪刀剪布" << endl;
- cout << "\t 這個(gè)游戲一直重復(fù)到玩家退出為止." << endl;
- cout << endl;
- }
-
- void Game::helpp() // 操作說(shuō)明
- {
- cout << "操作說(shuō)明" << endl;
- cout << "\t h 表示石頭" << endl;
- cout << "\t s 表示剪刀" << endl;
- cout << "\t c 表示布" << endl;
- cout << "\t r 查看對(duì)局結(jié)果" << endl;
- cout << "\t p 查看操作說(shuō)明" << endl;
- cout << "\t i 查看游戲規(guī)則" << endl;
- cout << "\t q 表示退出游戲" << endl;
- cout << endl;
- }
- void Game::choose_mode() // 選擇游戲模式
- {
- string step1 = "\n\t 1 人機(jī)模式 \n\t 2 雙人模式 ";
- string step2 = "\n\t 1 三局兩勝 \n\t 2 五局三勝 ";
- int i = 0;
- string step;
- while (i < 2)
- {
- step = (i == 0) ? step1 : step2;
- cout << "\n請(qǐng)選擇: " << step << "\n>>> ";
- while ((cin >> mode[i]) && mode[i] == ' ' || mode[i] == '\n' || mode[i] == '\t'); // 未輸入或輸入為空字符
- if (mode[i] == '1' || mode[i] == '2')
- i += 1;
-
- }
- }
- void Game::play() // 進(jìn)行游戲
- {
- int WIN_MAX, SUM_MAX; // 最多贏場(chǎng), 最多局?jǐn)?shù)
- if (mode[1] == '1') // 三局兩勝
- {
- WIN_MAX = 2;
- SUM_MAX = 3;
- }
- else // 五局三勝
- {
- WIN_MAX = 3;
- SUM_MAX = 5;
- }
- while ((win < WIN_MAX) && ((win + lose + tie) < SUM_MAX))
- {
- cout << endl;
- cout << "***** 第" << win + lose + tie + 1 << "局 *****" << endl;
- cout << endl;
- cout << "***** 玩家1界面 *****" << endl;
- player1 = choose();
- cout << "***** 玩家2界面 *****" << endl;
- if (mode[0] == '1') // 人機(jī)模式
- {
- cout << " 電腦已作出選擇" << endl;
- player2 = get_random();
- }
- else // 雙人模式
- player2 = choose();
- compare(player1, player2); // 判斷輸贏
- }
- show_result(win, lose, tie); // 顯示比賽結(jié)果
- cout << endl;
- cout << "游戲結(jié)束!" << endl;
- exit(0); // 退出游戲
- }
- choices Game::choose() // 選擇下續(xù)操作
- {
- char c;
- choices p;
- cout << endl;
- cout << "請(qǐng)選擇: \n\t h 表示石頭 \n\t s 表示剪刀\n\t c 表示布 \n>>> ";
- do {
- c = _getch();
- cout << "*" << endl;
- } while (c == ' ' || c == '\n' || c == '\t');
-
- switch (c) {
- case 'c': p = cloth;
- break;
- case 'h': p = hammer;
- break;
- case 's': p = scissors;
- break;
- case 'r': // 查看對(duì)局結(jié)果
- show_result(win, lose, tie);
- p = choose();
- break;
- case 'i': // 查看游戲規(guī)則
- instruct();
- p = choose();
- break;
- case 'q': // 退出
- cout << "已退出" << endl;
- exit(0);
- break;
- default: // 查看操作說(shuō)明
- helpp();
- p = choose();
- break;
- }
- return(p);
- }
- choices Game::get_random() // 獲得隨機(jī)選擇
- {
- static int i;
- i = ++i % 3;
- return(choices(i)); // 根據(jù)余數(shù)得隨機(jī)值
- }
- void Game::show_result(int win, int lose, int tie) // 顯示比賽結(jié)果
- {
- cout << endl;
- cout << "游戲結(jié)果如下:" << endl;
- cout << "\t 玩家1獲勝的次數(shù)是: " << win << endl;
- cout << "\t 玩家2獲勝的次數(shù)是: " << lose << endl;
- cout << "\t 平局的次數(shù)為: " << tie << endl;
- cout << "\t 游戲的總次數(shù)是: " << win + lose + tie << endl;
- }
- void Game::compare(choices player1, choices player2) // 判斷輸贏
- {
- // cout << "玩家1: " << player1 << " 玩家2: " << player2 << endl;
- if (player1 == player2)
- {
- tie += 1;
- cout << "平局" << endl;
- }
- …………
- …………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
剪刀石頭布.rar
(278.04 KB, 下載次數(shù): 26)
2018-12-12 18:12 上傳
點(diǎn)擊文件名下載附件
文檔
|