从上述过程可以提取出第一层所需要的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
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
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); } }
调试结果(截图):
问题描述: 编写的游戏程序:猜拳游戏 – 人机大战 人出的手势包括:石头、剪刀、不 电脑出的手势包 […]...
很简单的一个程序,建议各位初学Java的同学可以试试写写这个程序: import javax.swing.JO […]...
剪刀、石头、布游戏大家都玩过,今天我们用Micro:bit建一个剪刀、石头、布游戏! 第一步,起始 当你摇动它 […]...
剪刀、石头、布游戏 石头、剪刀、布游戏 /*石头、剪刀、布是孩子们中很流行的一个游戏。在这个游戏中,孩子们用手 […]...
package judgment;import java.util.Scanner;/** * 模拟剪刀,石头 […]...
安装ghostscript然后运行以下命令:gs -sDEVICE=pdfwrite -dCompatibil […]...
本文转载自:http://blog.csdn.net/ikscher/article/details/4385 […]...
如果说数据是智能时代的生产资料,计算是智能时代的生产力,那么多元化的计算芯片毫无疑问就是智能时代生产力的动力引 […]...
通过锁可以实现受限制资源的共享,序列化共享资源的访问。java提供了一套用于锁的机制,这套机制里主要的锁就是关 […]...
统信电脑使用手册–统信UOS操作系统连接打印机详细教程 在统信UOS上连接打印机的操作步骤 统信U […]...
fork/join作为一个并发框架在jdk7的时候就加入到了我们的java并发包java.util.c […]...
spring cloud 使用 Feign 进行服务调用时,不支持对象参数。 通常解决方法是, […]...
创业4 年的苦与甜 2019-12-27 09:54 托尼老师 阅读(…) 评论(̷ […]...