剪刀、石头、布游戏

                                                   石头、剪刀、布游戏
/*石头、剪刀、布是孩子们中很流行的一个游戏。在这个游戏中,孩子们用手表示石头、剪刀、布。伸手表示布、拳头表示石头、伸出两根手指表示剪刀。孩子们面对面地数到3,然后亮出各自的选择。如果选择是一样的,表示平局,否则就用如下规则决定胜负。
布覆盖石头
石头砸剪刀
剪刀剪碎布
现在我们把这个过程变成计算机和游戏者之间的游戏。游戏的过程如下:游戏者选择出石头、剪刀或布,计算机也随机选择一个,评判结果,输出结果,继续游戏,知道游戏者选择结束为止。
要解决这个问题,首先进行第一层分解。根据题意,main函数的运行过程如下:
While(用户输入!=退出)
{switch(用户的选择)
  case 布,石头,剪刀:
  机器选择
  评判结果
  报告结果
  case 显示游戏战况:显示目前的战况;
  case 帮助:显示帮助信息;
 default:报告错误;
}
显示战况;

从上述过程可以提取出第一层所需要的6个函数:
selection_by_play获取用户输入
selection_by_machine获取机器的选择
compare评判结果
report报告结果
prn_game_status显示目前战况
prn_help显示帮助信息

为了提高程序的可读性,我们定义两个枚举类型:用户合法输入p_s_r和评判结果outcome.
定义如下:
enum p_s_s{paper, rock, scissor, game, help, quit};
enum outcome{ win, lose, tie, error};

模块划分
1.主模块
2.获取选择模块
3.比较模块
4.输出模块


各个模块的源文件:
主模块(main.cpp)包括main函数
获取选择模块(select.cpp)包括selection_by_player和selection_bu_machine两个函数
比较模块(compare.cpp)包括compare函数
输出模块(print.cpp)包括所有和输出的相关函数,有report、prn_game_status和prn_help函数

确定各函数原形:
p_r_s  selection_by_player();
p_r_s  selection_by_machine();
outcome  compare(p_r_s, p_r_s);
void  prn_help();
void  report(outcome);
void  prn_game_status();

包含的库头文件:
	#include <iostream>
	#include<cstdlib>
	#include<ctime>

需要包含的头文件:
为了解决一些类型的定义、符号常量和函数原形的声明在程序中反复出现多次,编译器会认为某些符号被重复定义的问题。需要用到编译预处理命令:

#ifndef    标识符
……


#endif
这个预处理命令表示,如果指定的标识符没有定义过,则执行后面的语句,直到#endif;
如果该标识符已经定义过,则中间的这些语句都不执行。
头文件有以下这样的结构
#ifndef  _name_h
#define  _name_h
	头文件真正需要写的内容

#endif
其中,_name_h是用户选择的代表这个头文件的一个标识。
*/
//代码清单      石头、剪刀、布游戏程序的头文件
//文件:p_r_s.h
//本文件定义了两个枚举类型,声明了本程序包括的所有函数原形

#ifndef p_r_s_h
#define p_r_s_h

#include<iostream>
#include<cstdlib>			//RAND_MAX是符号常量定义在cstdlib库内
#include<ctime>			//要用到系统时间
using namespace std;

//定义两个枚举类型,提高可读性
enum p_r_s { paper, rock,scissor,game,help,quit};
enum outcome { win,lose,tie,error};

//所有函数的声明
outcome compare(p_r_s player_choice,p_r_s machine_choice);//评判函数声明
void prn_final_status();			//最终战绩
void prn_game_status();		    //目前战况
void prn_help();				//回到选择界面
void report(outcome result);		//报告结果并记录信息
p_r_s selection_by_machine(void);//获取用户输入
p_r_s selection_by_player(void);	//获取机器选择

#endif


//主模块的实现
//main.cpp
#include"p_r_s.h"

int main()
{
	outcome result;
	p_r_s player_choice,machine_choice;

	srand(time(NULL)); //生成随机种子

	while((player_choice=selection_by_player())!=quit)
		switch(player_choice)				
	{
		case paper:	case rock:		case scissor:
				machine_choice=selection_by_machine();
				result=compare(player_choice,machine_choice); 
//机器跟玩家的评判结果并输出结果
				report(result);		  break;
		case game: prn_game_status(); break;				//目前战况
		case help: prn_help();        break;				//显示帮助信息
		default:
			cout<<"	PROGRAMER ERROR:Cannot get to here!\n\n";
			cout<<” 程序错误:不能进入这里!\n\n”;
			exit(1);	
	}
	prn_game_status();				//显示目前战况
	return 0;
}

//选择模块的实现
//select.cpp

#include"p_r_s.h"

p_r_s selection_by_machine()
{
	int select=(rand()*3/(RAND_MAX+1));   //生成随机数0、1、2

	cout<<"I am ";
	switch(select)
	{
		case 0: cout<<"paper."; break;
		case 1: cout<<"rock. "; break;
		case 3: cout<<"scissor."; break;
	}

	return ((p_r_s)select);//返回计算机随机选择结果,要进行强制转换类型为枚举类型p_r_s
}

p_r_s selection_by_player()			//玩家的选择
{
	char c;
	p_r_s player_choice;

	prn_help();					//显示帮助界面
	cout<<"please selsect:"; cin>>c;		//输入选择的相应的字母代号
	switch(c)
	{
	case 'p': player_choice=paper; cout<<"you are paper."; break;	//你是布
	case 'r': player_choice=rock; cout<<"you are rock."; break;		//你是拳头
	case 's': player_choice=scissor; cout<<"you are scissor."; break; //你是剪刀
	case 'g': player_choice=game; break;	//选择查看当前战况				
	case 'q': player_choice=quit; break;	//退出游戏
	default:  player_choice=help; break;
	}
	return player_choice;			//返回玩家的选择
}

//比较模块的实现
//compare.cpp

#include"p_r_s.h"

outcome compare(p_r_s player_choice,p_r_s machine_choice)
{
	outcome result;

	if(player_choice==machine_choice) return tie;	//比较结果相同,打平
	switch(player_choice)
	{
	case paper: result=(machine_choice==rock)? win:lose; break; //布包住拳头
	case rock:  result=(machine_choice==scissor)? win:lose; break;//石头砸剪刀
	case scissor: result=(machine_choice==paper)? win:lose; break;//剪刀剪碎布
	default: cout<<"PROGRAM ERROR:Unexpected choice!\n\n";
		  cout<<”程序错误:不是意想中的选择!\n\n”;
		exit(1);
	}
	return result;
}

//输出模块的实现
//print.cpp

#include"p_r_s.h"

int win_cnt=0,lose_cnt=0,tie_cnt=0;

void prn_game_status()
{
	cout<<endl;
	cout<<"GAME STATUS:" <<endl;
	cout<<"win(赢):   "<<win_cnt<<endl;
	cout<<"lose(输):   "<<lose_cnt<<endl;
	cout<<"Total(总共):"<<win_cnt+lose_cnt+tie_cnt<<endl;
}

void prn_help()
{
	cout<<endl
		<<" The following chatacters can be used:\n"
		<<”下面的字母可以被使用:\n”
		<<"		p for paper(布)\n"
		<<"		r for rock(石头)\n"
		<<"		s for scissors(剪刀)\n"
		<<"		g print the game status(输出战况)\n"
		<<"		h help,print this list(输出菜单)\n"
		<<"		q quie the game(退出游戏)\n";
}

void report(outcome result)
{
	switch(result)
	{
	case win:	++win_cnt; cout<<" You win(你赢啦). \n"; break;
	case lose: ++lose_cnt; cout<<" You lose(很遗憾你输了). \n"; break;
	case tie:  ++tie_cnt; cout<<"A tie(打平). \n"; break;
	default:	cout<< “程序错误:意想之外的结果!\n\n”;
				<<	"PROGRAM ERROR:Unexpected result!\n\n";
		exit(1);
	}
}

调试结果(截图):
 
 
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
里面一、课程设计(论文)题目 :石头-剪刀-游戏    二、课程设计(论文)工作自 2014 年 6 月23日起至 2014 年 6 月 27日止 三、课程设计(论文) 地点: 8-501 四、课程设计(论文)内容要求: 1. 本课程设计的目的 (1)进一步巩固和加深对“C++程序设计”课程基本知识的理解和掌握,了解C++语言在项目开发的应用。 (2)学习程序设计开发的一般方法,了解和掌握项目开发过程及方式,培养正确的设计思想和分析问题、解决问题的能力,特别是项目设计能力。 (3)通过对标准化、规范化文档的掌握并查阅有关技术资料等,培养项目设计开发 能力,同时提倡团队合作精神。 2. 课程设计的任务及要求 1) 基本要求: (1) 对系统功能进行需求分析; (2) 使用Visual C++编译器进行程序编译; (3) 提出系统的设计方案; (4) 编写源程序代码并进行调试。 2) 创新要求 在基本要求达到后,可进行创新设计。 3) 课程设计报告撰写及装订要求 课程设计报告的撰写要求表述简明,图表准确。 报告按如下内容和顺序用A4纸进行打印并装订成册。 (1)封面 采用统一的课程设计封面,并按要求填写好封面要求的个人信息和选题。 (2)设计任务书 (3)评阅书 (4)目录 (5)正文 (6)主要参考文献 4) 课程设计评分标准: 每人按指定题目进行设计,严禁抄袭,要求每人自己动手编写程序,采取同一组同时检查程序及运行结果,检查时同组成员每人陈述自己的分工,同一选题不同组如发现代码完全一样,则双方都作不及格处理。 (1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分; (2)能正确回答设计的老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加10分; (4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; 成绩评定实行优秀、良好、等、及格和不及格五个等级。不及格者需重做。 5) 课程设计进度安排 (1)准备阶段(3学时):选择设计题目、了解设计目的要求、查阅相关资料。 (2)程序模块设计分析阶段(4学时):程序总体设计、详细设计。 (3) 代码编写调试阶段(10学时):程序模块代码编写、调试、测试。 (4) 撰写论文阶段(3学时):总结课程设计任务和设计内容,撰写课程设计论文。 6)课程设计题目具体要求: 在游戏,孩子们用手表示石头剪刀的一个,由拳头表示石头,伸出根手指表示剪刀,伸手表示,孩子们面对面地从1数到3时做出他们的选择,如果所作选择是一样的,则表示平局,否则就按如下规则决定胜负。 (1)石头砸坏剪刀。 (2)剪刀 (3)覆盖石头 编程实现计算机与人进行游戏。并输出游戏结果。如果屏幕输出笑脸,则表示人胜利;如果屏幕输出哭脸,则表示人失败;输出无奈,则表示平局。并且统计结果。 包含着关于石头剪刀的设计方案以及改进等等问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值