找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7536|回復(fù): 1
收起左側(cè)

基于C++語(yǔ)言的剪刀石頭布游戲設(shè)計(jì)說(shuō)明書(shū)+程序源碼

[復(fù)制鏈接]
ID:429225 發(fā)表于 2018-12-12 18:13 | 顯示全部樓層 |閱讀模式
剪刀石頭布說(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ù)

12 軟件功能說(shuō)明
1.2.1
功能分析說(shuō)明圖
該軟件功能分析說(shuō)明圖如1-2-1所示:


0.png
: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:

0.png
: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ù)與程序代碼

一、頭文件中代碼
  1. #include <iostream>
  2. using namespace std;

  3. enum choices{
  4.               hammer,  // 石頭
  5.               scissors,  // 剪刀
  6.               cloth  // 布
  7. };

  8. // char choice_name[][9] = { "hammer", "scissors", "cloth" };


  9. class Game
  10. {
  11. public:
  12.               Game();  // 構(gòu)造函數(shù)初始化數(shù)據(jù)成員
  13.               void run();  // 游戲運(yùn)行入口
  14.               void initial();  // 游戲規(guī)則及操作說(shuō)明
  15.               void instruct();  // 游戲規(guī)則
  16.               void helpp();  // 操作說(shuō)明
  17.               void choose_mode();  // 選擇游戲模式
  18.               void play();  // 進(jìn)行游戲
  19.               choices choose();  // 選擇下續(xù)操作
  20.               choices get_random();  // 獲得隨機(jī)選擇
  21.               void show_result(int, int, int);  // 顯示對(duì)局結(jié)果
  22.               void compare(choices, choices);  // 判斷輸贏
  23. private:
  24.               int  win;  // 玩家1贏的次數(shù)
  25.               int  lose;  // 玩家1輸?shù)拇螖?shù)
  26.               int  tie;  // 平局次數(shù)
  27.               char mode[2];  // 記錄游戲模式
  28.               choices player1, player2;  // 記錄玩家做的選擇
  29. };
  30. 主函數(shù)
  31. #include<iostream>
  32. #include"game.h"
  33. using namespace std;

  34. int main()
  35. {
  36.               Game g;
  37.               g.run();
  38.               return 0;
  39. }
  40. 具體功能實(shí)現(xiàn)代碼
  41. #include "game.h"
  42. #include <string>
  43. #include <conio.h>

  44. Game::Game()
  45. {
  46.               win = 0;
  47.               lose = 0;
  48.               tie = 0;
  49. }
  50. void Game::run()  // 游戲運(yùn)行入口
  51. {

  52.               initial();  // 游戲規(guī)則及操作說(shuō)明
  53.               choose_mode();  // 選擇游戲模式
  54.               play();  // 進(jìn)行游戲
  55. }

  56. void Game::initial()  // 游戲規(guī)則及操作說(shuō)明
  57. {
  58.               cout << "**** 石頭剪刀布 游戲說(shuō)明 **** " << endl;
  59.               cout << endl;
  60.               instruct();
  61.               helpp();
  62.               cout << "祝你好運(yùn)!" << endl;
  63.               cout << endl;
  64. }
  65. void Game::instruct()  // 游戲規(guī)則
  66. {
  67.               cout << "游戲規(guī)則" << endl;
  68.               cout << "\t 在這個(gè)游戲中" << endl;
  69.               cout << "\t h 表示石頭" << endl;
  70.               cout << "\t s 表示剪刀" << endl;
  71.               cout << "\t c 表示布" << endl;
  72.               cout << "\t 若兩玩家的選擇相同, 那么這一局就是平局" << endl;
  73.               cout << "\t 否則, 石頭打剪刀, 布包石頭, 剪刀剪布" << endl;
  74.               cout << "\t 這個(gè)游戲一直重復(fù)到玩家退出為止." << endl;
  75.               cout << endl;
  76. }

  77. void Game::helpp()   // 操作說(shuō)明
  78. {
  79.               cout << "操作說(shuō)明" << endl;
  80.               cout << "\t h 表示石頭" << endl;
  81.               cout << "\t s 表示剪刀" << endl;
  82.               cout << "\t c 表示布" << endl;
  83.               cout << "\t r 查看對(duì)局結(jié)果" << endl;
  84.               cout << "\t p 查看操作說(shuō)明" << endl;
  85.               cout << "\t i 查看游戲規(guī)則" << endl;
  86.               cout << "\t q 表示退出游戲" << endl;
  87.               cout << endl;
  88. }
  89. void Game::choose_mode()  // 選擇游戲模式
  90. {
  91.               string step1 = "\n\t 1 人機(jī)模式 \n\t 2 雙人模式 ";
  92.               string step2 = "\n\t 1 三局兩勝 \n\t 2 五局三勝 ";
  93.               int i = 0;
  94.               string step;
  95.               while (i < 2)
  96.               {
  97.                             step = (i == 0) ? step1 : step2;
  98.                             cout << "\n請(qǐng)選擇: " << step << "\n>>> ";
  99.                             while ((cin >> mode[i]) && mode[i] == ' ' || mode[i] == '\n' || mode[i] == '\t');  // 未輸入或輸入為空字符
  100.                             if (mode[i] == '1' || mode[i] == '2')
  101.                                           i += 1;
  102.                            
  103.               }
  104. }
  105. void Game::play()  // 進(jìn)行游戲
  106. {
  107.               int WIN_MAX, SUM_MAX;  // 最多贏場(chǎng), 最多局?jǐn)?shù)
  108.               if (mode[1] == '1')  // 三局兩勝
  109.               {
  110.                             WIN_MAX = 2;
  111.                             SUM_MAX = 3;
  112.               }
  113.               else  // 五局三勝
  114.               {
  115.                             WIN_MAX = 3;
  116.                             SUM_MAX = 5;
  117.               }
  118.               while ((win < WIN_MAX) && ((win + lose + tie) < SUM_MAX))
  119.               {
  120.                             cout << endl;
  121.                             cout << "***** 第" << win + lose + tie + 1 << "局 *****" << endl;
  122.                             cout << endl;
  123.                             cout << "***** 玩家1界面 *****" << endl;
  124.                             player1 = choose();
  125.                             cout << "***** 玩家2界面 *****" << endl;
  126.                             if (mode[0] == '1')  // 人機(jī)模式
  127.                             {
  128.                                           cout << "  電腦已作出選擇" << endl;
  129.                                           player2 = get_random();
  130.                             }
  131.                             else  // 雙人模式
  132.                                           player2 = choose();
  133.                             compare(player1, player2);  // 判斷輸贏
  134.               }
  135.               show_result(win, lose, tie);  // 顯示比賽結(jié)果
  136.               cout << endl;
  137.               cout << "游戲結(jié)束!" << endl;
  138.               exit(0);  // 退出游戲
  139. }
  140. choices Game::choose()  // 選擇下續(xù)操作
  141. {
  142.               char c;
  143.               choices p;
  144.               cout << endl;
  145.               cout << "請(qǐng)選擇: \n\t h 表示石頭 \n\t s 表示剪刀\n\t c 表示布 \n>>> ";
  146.               do {
  147.                             c = _getch();
  148.                             cout << "*" << endl;
  149.               } while (c == ' ' || c == '\n' || c == '\t');

  150.               switch (c) {
  151.               case 'c': p = cloth;
  152.                             break;
  153.               case 'h': p = hammer;
  154.                             break;
  155.               case 's': p = scissors;
  156.                             break;
  157.               case 'r':  // 查看對(duì)局結(jié)果
  158.                             show_result(win, lose, tie);
  159.                             p = choose();
  160.                             break;
  161.               case 'i':  // 查看游戲規(guī)則
  162.                             instruct();
  163.                             p = choose();
  164.                             break;
  165.               case 'q':  // 退出
  166.                             cout << "已退出" << endl;
  167.                             exit(0);
  168.                             break;
  169.               default:  // 查看操作說(shuō)明
  170.                             helpp();
  171.                             p = choose();
  172.                             break;
  173.               }
  174.               return(p);
  175. }
  176. choices Game::get_random()  // 獲得隨機(jī)選擇
  177. {
  178.               static int i;
  179.               i = ++i % 3;
  180.               return(choices(i));  // 根據(jù)余數(shù)得隨機(jī)值
  181. }
  182. void Game::show_result(int win, int lose, int tie)  // 顯示比賽結(jié)果
  183. {
  184.               cout << endl;
  185.               cout << "游戲結(jié)果如下:" << endl;
  186.               cout << "\t 玩家1獲勝的次數(shù)是: " << win << endl;
  187.               cout << "\t 玩家2獲勝的次數(shù)是: " << lose << endl;
  188.               cout << "\t 平局的次數(shù)為: " << tie << endl;
  189.               cout << "\t 游戲的總次數(shù)是: " << win + lose + tie << endl;
  190. }
  191. void Game::compare(choices player1, choices player2)  // 判斷輸贏
  192. {
  193.               // cout << "玩家1: " << player1 << "  玩家2: " << player2 << endl;
  194.               if (player1 == player2)
  195.               {
  196.                             tie += 1;
  197.                             cout << "平局" << endl;
  198.               }
  199. …………
  200. …………
  201. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
剪刀石頭布.rar (278.04 KB, 下載次數(shù): 26)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:578235 發(fā)表于 2019-7-5 07:55 | 顯示全部樓層
不錯(cuò),謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表