骰子游戏源代码.docx
- 文档编号:24380220
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:14
- 大小:18.98KB
骰子游戏源代码.docx
《骰子游戏源代码.docx》由会员分享,可在线阅读,更多相关《骰子游戏源代码.docx(14页珍藏版)》请在冰豆网上搜索。
骰子游戏源代码
7.1程序的源代码
★Main()文件:
//文件路径名:
dice_game\main.cpp
#include"utility.h"//实用程序软件包
#include"dice_game.h"//骰子游戏
intmain(void)//主函数main(void)
{
DiceGameobjGame;//骰子游戏对象
objGame.Game();//运行游戏
system("PAUSE");//调用库函数system()
return0;//返回值0,返回操作系统
}
★dice_game.h文件:
//文件路径名:
dice_game\dice_game.h
#ifndef__DICE_GAME_H__//如果没有定义__DICE_GAME_H__
#define__DICE_GAME_H__//那么定义__DICE_GAME_H__
typedefenum{WIN,LOSE,TIE}GameStatus;//WIN:
赢,LOSE:
输,TIE:
平局
//骰子游戏类DiceGame声明
classDiceGame
{
private:
//数据成员:
intnumOfWin;//胜利数次
intnumOfLose;//失败数次
intnumOfTie;//平局数次
//辅助函数
intRollDice();//模拟投掷一次骰子
voidHelp();//获得帮助
voidShow();//显示统计结果
public:
//方法声明:
DiceGame();//无参数的构造函数
virtual~DiceGame(){}//析构函数
voidGame();//模拟游戏
};
//骰子游戏类DiceGame的实现部分
DiceGame:
:
DiceGame()//初始化骰子游戏
{
numOfWin=0;//胜利数次
numOfLose=0;//失败数次
numOfTie=0;//平局数次
cout<<"游戏开始"< } intDiceGame: : RollDice()//模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和 { intnumOfDice1;//所投掷的第1颗骰子向上一面的点数 intnumOfDice2;//所投掷的第2颗骰子向上一面的点数 intsum;//所投掷的两颗骰子向上一面的点数之和 numOfDice1=1+Rand: : GetRand(6);//模拟所投掷骰子1的点数 numOfDice2=1+Rand: : GetRand(6);//模拟所投掷骰子2的点数 sum=numOfDice1+numOfDice2;//计算所投掷两颗骰子向上一面的点数之和 cout<<"选手掷骰子: "< returnsum;//返回所掷骰子向上一面点数之和 } voidDiceGame: : Help()//获得帮助 { cout<<"游戏者每次投掷两颗骰子,每个骰子是一个正方体,有"< cout<<"6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时"< cout<<",将每个骰子朝上的点的数相加,在第一次投掷骰时,如果"< cout<<"所得到的和为7或11,那么游戏者为赢得胜利;如果所得到"< cout<<"的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6"< cout<<"、8、9或10,那么为游戏者的点数;如要想赢得胜利,必"< cout<<"须继续投掷骰子,直到取得自已的点数为止,但是如果投"< cout<<"掷出的和为7或投掷6次仍未赚到该点数,则游戏者为输了."< } voidDiceGame: : Show()//显示统计结果 { cout<<"选手游戏统计: "< cout<<"获胜"< cout<<"失败"< cout<<"平局"< } voidDiceGame: : Game()//模拟游戏 { intselect=1; intsum,myPoint; GameStatusstatus;//游戏状态 Rand: : SetRandSeed();//设置当前时间为随机数种子 Help();//获得帮助 while(select! =3) { cout< "< cout<<"1.获得帮助"< cout<<"2.玩一手游戏"< cout<<"3.退出游戏"< cin>>select;//输入选择 if(select! =1&&select! =2&&select! =3)//若输入不是1,2,3重新输入 { cout<<"请用1,2,3回答"< continue; } if (1) { while(select==1)//输入1,帮助 { Help(); break; } if(select==2)//输入2 { sum=RollDice();//模拟掷骰子 switch(sum) { case7: //掷得7或11胜利 case11: status=WIN; numOfWin++; break; case2: //投掷得2、3、12,输了 case3: case12: status=LOSE; numOfLose++; break; default: //投得其他数值,处于平局 status=TIE; myPoint=sum; numOfTie++; cout<<"点数"< } while (1) { if(status==WIN) { cout<<"恭喜你,赢得游戏! "< break; } if(status==LOSE) { cout<<"很遗憾,你输了! "< break; } while(status==TIE) { cout<<"你现在是平局,是否要继续游戏"; if(UserSaysYes()) { intagain; again=RollDice();//处于平局再次掷骰子 if(myPoint==again)//掷得自己的点数,赢得胜利 { status=WIN; numOfWin++; break; } elseif(again==7)//掷得7,输了 { status=LOSE; numOfLose++; break; } else//平局 { numOfTie++; if(numOfTie==6)//平局6次,输了 { status=LOSE; cout<<"你已平局6次,"; break; } } } } } } elseif(select==3)//输入为3 { if(UserSaysYes())//退出游戏 break; else select=1;//返回游戏 } } } Show();//显示统计结果 } #endif ★Utility.h文件: #ifndef__UTILITY_H__//如果没有定义__UTILITY_H__ #define__UTILITY_H__//那么定义__UTILITY_H__ //实用程序工具包 #ifdef_MSC_VER//表示是VisualC++ #if_MSC_VER==1200//表示VisualC++6.0 //标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include #else//其它版本的VisualC++ //ANSIC++标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include usingnamespacestd;//标准库包含在命名空间std中 #endif//_MSC_VER==1200 #else//非VisualC++ //ANSIC++标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include usingnamespacestd;//标准库包含在命名空间std中 #endif//_MSC_VER //实用函数 charGetChar(istream&inStream=cin);//从输入流inStream中跳过空格及制表符获取一字符 boolUserSaysYes();//当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false //函数模板 template voidSwap(ElemType&e1,ElemType&e2);//交换e1,e2之值 template voidDisplay(ElemTypeelem[],intn);//显示数组elem的各数据元素值 //实用类 classTimer;//计时器类Timer classError;//通用异常类 classRand;//随机数类Rand charGetChar(istream&in)//从输入流in中跳过空格及制表一字符 { charch;//临时变量 while((ch=in.peek())! =EOF//文件结束符(peek()函数从输入流中接受1 //字符,流的当前位置不变) &&((ch=in.get())==''//空格(get()函数从输入流中接受1字符,流 //的当前位置向后移1个位置) ||ch=='\t'));//制表符 returnch;//返回字符 } boolUserSaysYes()//当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false { charch;//用户回答字符 boolinitialResponse=true;//初始回答 do {//循环直到用户输入恰当的回答为止 if(initialResponse)cout<<"(y,n)? ";//初始回答 elsecout<<"用y或n回答: ";//非初始回答 while((ch=GetChar())=='\n');//跳过空格,制表符及换行符获取一字符 initialResponse=false;//非初始回答 }while(ch! ='y'&&ch! ='Y'&&ch! ='n'&&ch! ='N'); while(GetChar()! ='\n');//跳过当前行后面的字符 if(ch=='y'||ch=='Y')returntrue;//肯定回答返回true elsereturnfalse;//否定回答返回false } template voidSwap(ElemType&e1,ElemType&e2)//交换e1,e2之值 { ElemTypetemp;//临时变量 temp=e1;e1=e2;e2=temp;//循环赋值实现交换e1,e2 } template voidShow(ElemTypeelem[],intn)//显示数组elem的各数据元素值 { for(inti=0;i {//显示数组elem cout< } cout< } //计时器类Timer classTimer { private: //数据成员 clock_tstartTime; public: //方法声明 Timer(){startTime=clock();}//构造函数,由当前时间作为开始时间构造对象 doubleElapsedTime()const//返回已过的时间 { clock_tendTime=clock();//结束时间 return(double)(endTime-startTime)/(double)CLK_TCK; //计算已过时间 } voidReset(){startTime=clock();}//重置开始时间 }; //通用异常类Error #defineMAX_ERROR_MESSAGE_LEN100 classError { private: //数据成员 charmessage[MAX_ERROR_MESSAGE_LEN];//异常信息 public: //方法声明 Error(charmes[]="一般性异常! "){strcpy(message,mes);} //构造函数 voidShow()const{cout< };//随机数类Rand classRand { public: //方法声明 staticvoidSetRandSeed(){srand((unsigned)time(NULL));} //设置当前时间为随机数种子 staticintGetRand(intn){returnrand()%n;} //生成0~n-1之间的随机数 staticintGetRand(){returnrand();}//生成0~n-1之间的随机数 }; #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 骰子 游戏 源代码