找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6143|回复: 1
打印 上一主题 下一主题
收起左侧

基于C++语言的剪刀石头布游戏设计说明书+程序源码

[复制链接]
跳转到指定楼层
楼主
剪刀石头布说明书
摘要:本文主要介绍利用C++高级语言实现石头剪子布游戏的编辑和运行。通过 Visual Studio 2017 软件进行石头剪子布游戏程序的编译,确定模块之间关系及各模块功能,设计一个简单的操作界面实现石头剪子布游戏,。
石头剪子布游戏系统通过C++高级语言进行编程,并设计了简单明了的操作界面,为用户提供更好的操作体验,更直接而充分的掌握本程序的一些应用和功能。通过直观的方式,最终实现C++设计的应用程序——石头剪子布游戏。本次课设所做程序虽然只是一个简单的C++手石头剪子布游戏程序,但是基本的应用功能都已具备,可以更好的用在实际应用中。

第1章 软件设计内容

1.1设计内容
1.2 软件功能说明
1.2.1 功能分析说明图
1.2.2 各项功能说明
第2章 软件设计环境与原理

2.1 设计环境与模块的划分
2.1.1 软件设计环境
2.1.2 软件模块的划分
2.2 软件设计主要原理
2.2.1 采用的主要数据结构类型
2.2.2 各个模块之间的调用关系和数据储存格式说明
2.2.3 主要流程图
第3章 软件的设计过程

3.1 各软件模块之间的调用方式
3.2 软件中实现各项功能的函数与程序代码
第4章 设计结果与分析

4.1软件使用结果
总结
致谢
附录

1章 软件设计内容
1
1 设计内容
完成一个经典的小游戏设计:锤头剪刀和布。设计内容如下:
1、玩家通过键盘输入字符h、s、c. h表示锤子,s表示剪刀,c表示布。如果玩家输入的字符和电脑随机选择的字符一致,则表示平局。如果不一致,则按照锤子胜剪刀、剪刀胜布、布胜锤子的规则决出胜负。
2、如果是两个游戏玩家对战,则先出的玩家,其输入的符号需要隐藏。 然后决出胜负。
3、有局数选择功能: 三局两胜、五局三胜等。
4、统计输赢的次数

12 软件功能说明
1.2.1
功能分析说明图
该软件功能分析说明图如1-2-1所示:



:1-2-1
1.2.2 各项功能说明
(1)游戏运行入口:
这部分的功能主要包括游戏规则及操作说明、选择游戏模式和进行游戏。
(2)游戏规则及操作说明:
     游戏规则:在这个游戏中,h表示石头,s表示剪刀,c表示布,r表示查看对局结果,p表示查看操作说明,i表示查看游戏规则,q表示退出游戏。若两个玩家出的的选择相同,那么这一句就是平局。否则,石头打剪刀,布包石头,剪刀剪布,这个游戏一直重复到玩家退出为止。
(3)进入游戏:
     进入游戏有两个选择:1、人机模式,2、双人模式。
(4)选择下续操作:
即玩家再次出剪刀石头布。
(5)获得随机选择:
     此项功能是电脑随机出剪刀石头布。
(6)判断输赢。
     选择次项功能后,根据前面出的剪刀石头布来判断输赢。
(7)显示对局结果。


2章 软件设计环境与原理
2.1 设计环境与模块的划分
2.1.1
软件设计环境
Visual Studio 2017
2.1.2 软件模块的划分
该软件主要组成模块和各个模块之间的调用关系如图2-1:


:2-1
2.2 软件设计主要原理
2.2.1 采用的主要数据结构类型
该程序采用的是结构体类型来出剪刀石头布,如下所述。
包含的库函数有:
              #include "game.h"
#include <string>
#include <conio.h>
头文件中主要内容:
              void run();  // 游戏运行入口
              void initial();  // 游戏规则及操作说明
              void instruct();  // 游戏规则
              void helpp();  // 操作说明
              void choose_mode();  // 选择游戏模式
              void play();  // 进行游戏
              choices choose();  // 选择下续操作
              choices get_random();  // 获得随机选择
              void show_result(int, int, int);  // 显示对局结果
              void compare(choices, choices);  // 判断输赢
2.2.2 各个模块之间的调用关系和数据储存格式说明
各函数模块之间的调用关系主要是主函数调用所有其它功能函数和菜单函数,并利用循环使各个功能函数运行完毕后都会回到菜单。
2.2.3 主要流程图

图:2-2-1游戏系统

图2-2-2 总流程图(见附件)

第3章 软件的设计过程
3.1 各软件模块之间的调用方式
程序中各个模块之间的调用方式主要是通过文件的包含和函数的调用实现的,用文件的形式把各个函数分开,再用头文件把它们包含进来,使用主函数进行调用。


4设计结果与分析
4
1软件使用结果
在此,我们将把软件使用过程写出,并对此程序的一些细节和具体的操作方法加以说明,说明如下:
  •      将软件进行初始化。
  •      进入程序菜单,界面如图4-1-1:
菜单界面
图4-1-1
界面显示的是“石头剪刀布游戏说明及操作说明”。根据提示,玩家选择需要的游戏类型。
  • 输入游戏类型:选择菜单界面的第一个人机模式,按Enter键进入此选择界面,出现的界面如图4-1-2:
图4-1-2游戏模式
在这个界面给出了游戏模式的两种选择,也就是说,玩家可以选择剪刀石头布的两种游戏模式:三局两胜和五局三胜,如选择三局两胜,按Enter键进入输入界面,输入界面如图4-1-3:
4-1-3
玩家可以选择按(h、s、c)来决定出石头剪刀布(h表示石头,s表示剪刀,c表示出布),重复此次操作三次,游戏结束。如果玩家对操作不是很熟悉,可以按p来查看操作说明,得到操作说明如图4-1-4
如图4-1-4
如果输入的字符不在给定的范围内,则界面上将显示输入的格式有误,请重新输入,才可以进行下面的程序。,如图4-1-5:
           
4-1-5
  • 当玩家完成三次猜拳机会时,按Enter键进入此界面,则出现的界面如图4-1-6
图4-1-6
界面上的图即显示的是三次猜拳游戏后游戏结果,,可按任意键可退出此界面。

总结
通过两星期的C++语言程序设计实习,不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。我们从中受益匪浅,并且对C++语言程序设计这一门课程有了更深一步的认识。在实习中,我们可以把这学期所学的理论知识和实践联系起来,在所要开发的项目中渐渐成长。虽然我们对这些C++语言知识运用得还不是很熟练,但是相信我们也在滴水穿石地成长起来。发现问题,提出问题,解决问题,使我们从不足之处出发,寻找新的学习方向。
在实习中,我们设计了一个剪刀石头布的小游戏,它有两种模式:人机模式和玩家模式,在每种模式下又细分为两种游戏类型:三局两胜和五局三胜。在刚开始时游戏遇到了许许多多的小问题:如在选择1、人机模式还是2、玩家模式时,除了按1和2外,按其他键时,会出现无限循环的现象,造成这种现象的原因时:条件不完备。解决办法时在这两种模式下加入,输入的格式不正确,请重新输入。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
提高了计算能力,,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。

致谢
经过这两周的实习,我们获得了许多在课堂上听课而不能获得的知识,首先我们要感谢学校给我们安排的这次的C++语言程序设计实习,然后我要感谢老师们对我们热心的指导和帮助,是他们教会了我们怎样解决问题的方法,这样我们的软件设计才会更加顺利地进行,并且充分掌握了设计程序的方法。我们还要感谢许多同学的帮助,他们的帮助对于我们来说也是必不可少的。总之,是有了他们的帮助,我们才能顺利地完成软件设计,在这里我们要向他们说一句:谢谢,非常感谢!你们辛苦了!

3.2 软件中实现各项功能的函数与程序代码

一、头文件中代码
  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();  // 构造函数初始化数据成员
  13.               void run();  // 游戏运行入口
  14.               void initial();  // 游戏规则及操作说明
  15.               void instruct();  // 游戏规则
  16.               void helpp();  // 操作说明
  17.               void choose_mode();  // 选择游戏模式
  18.               void play();  // 进行游戏
  19.               choices choose();  // 选择下续操作
  20.               choices get_random();  // 获得随机选择
  21.               void show_result(int, int, int);  // 显示对局结果
  22.               void compare(choices, choices);  // 判断输赢
  23. private:
  24.               int  win;  // 玩家1赢的次数
  25.               int  lose;  // 玩家1输的次数
  26.               int  tie;  // 平局次数
  27.               char mode[2];  // 记录游戏模式
  28.               choices player1, player2;  // 记录玩家做的选择
  29. };
  30. 主函数
  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. 具体功能实现代码
  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()  // 游戏运行入口
  51. {

  52.               initial();  // 游戏规则及操作说明
  53.               choose_mode();  // 选择游戏模式
  54.               play();  // 进行游戏
  55. }

  56. void Game::initial()  // 游戏规则及操作说明
  57. {
  58.               cout << "**** 石头剪刀布 游戏说明 **** " << endl;
  59.               cout << endl;
  60.               instruct();
  61.               helpp();
  62.               cout << "祝你好运!" << endl;
  63.               cout << endl;
  64. }
  65. void Game::instruct()  // 游戏规则
  66. {
  67.               cout << "游戏规则" << endl;
  68.               cout << "\t 在这个游戏中" << 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 这个游戏一直重复到玩家退出为止." << endl;
  75.               cout << endl;
  76. }

  77. void Game::helpp()   // 操作说明
  78. {
  79.               cout << "操作说明" << endl;
  80.               cout << "\t h 表示石头" << endl;
  81.               cout << "\t s 表示剪刀" << endl;
  82.               cout << "\t c 表示布" << endl;
  83.               cout << "\t r 查看对局结果" << endl;
  84.               cout << "\t p 查看操作说明" << endl;
  85.               cout << "\t i 查看游戏规则" << endl;
  86.               cout << "\t q 表示退出游戏" << endl;
  87.               cout << endl;
  88. }
  89. void Game::choose_mode()  // 选择游戏模式
  90. {
  91.               string step1 = "\n\t 1 人机模式 \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请选择: " << 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()  // 进行游戏
  106. {
  107.               int WIN_MAX, SUM_MAX;  // 最多赢场, 最多局数
  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')  // 人机模式
  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);  // 显示比赛结果
  136.               cout << endl;
  137.               cout << "游戏结束!" << endl;
  138.               exit(0);  // 退出游戏
  139. }
  140. choices Game::choose()  // 选择下续操作
  141. {
  142.               char c;
  143.               choices p;
  144.               cout << endl;
  145.               cout << "请选择: \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':  // 查看对局结果
  158.                             show_result(win, lose, tie);
  159.                             p = choose();
  160.                             break;
  161.               case 'i':  // 查看游戏规则
  162.                             instruct();
  163.                             p = choose();
  164.                             break;
  165.               case 'q':  // 退出
  166.                             cout << "已退出" << endl;
  167.                             exit(0);
  168.                             break;
  169.               default:  // 查看操作说明
  170.                             helpp();
  171.                             p = choose();
  172.                             break;
  173.               }
  174.               return(p);
  175. }
  176. choices Game::get_random()  // 获得随机选择
  177. {
  178.               static int i;
  179.               i = ++i % 3;
  180.               return(choices(i));  // 根据余数得随机值
  181. }
  182. void Game::show_result(int win, int lose, int tie)  // 显示比赛结果
  183. {
  184.               cout << endl;
  185.               cout << "游戏结果如下:" << endl;
  186.               cout << "\t 玩家1获胜的次数是: " << win << endl;
  187.               cout << "\t 玩家2获胜的次数是: " << lose << endl;
  188.               cout << "\t 平局的次数为: " << tie << endl;
  189.               cout << "\t 游戏的总次数是: " << 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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整的Word格式文档51黑下载地址:
剪刀石头布.rar (278.04 KB, 下载次数: 25)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:578235 发表于 2019-7-5 07:55 | 只看该作者
不错,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表