会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
spring学习笔记
剪刀、石头、布游戏
石头、剪刀、布游戏 /*石头、剪刀、布是孩子们中很流行的一个游戏。在这个游戏中,孩子们用手表示石头、剪刀、布。伸手表示布、拳头表示石头、伸出两根手指表示剪刀。孩子们面对面地数到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); } } 调试结果(截图):
posted on
2012-01-08 12:08
spring学习笔记
阅读(
299
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
导航
博客园
首页
联系
订阅
管理
公告