鱼C论坛

 找回密码
 立即注册
查看: 5040|回复: 9

急需求解 用C++编译一个小游戏(骰子游戏)

 关闭 [复制链接]
发表于 2011-6-20 12:39:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 marlon 于 2011-6-23 20:44 编辑

老师布置的作业,现在想写,但是没得头绪,急求解。
最好是详细的思路!
要求:投掷两个骰子,将得到的两个点数相加,如果第一次投掷和为7、11,则游戏者赢;如果和为2、3、12,则输;如果和为4、5、6、8、9、10,那么此和为游戏者的点数,如果想赢得胜利,必须继续投掷骰子,直到取得自己的点数(也就是第一次投掷出的4、5、6、8、9、10)为止,如果投掷出的和为7,则为输。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-20 15:33:54 | 显示全部楼层
  1. #include<cstdlib>
  2. #include<ctime>
  3. #include<iostream>
  4. #include<string>
  5. using namespace std;

  6. class RandomNum{
  7. public:
  8.         RandomNum(int low=2,int high=12):lower(low),higher(high){
  9.                 srand(time(NULL));
  10.         };
  11.         int getNum()const{
  12.                 return rand()%(higher-lower+1)+lower;
  13.         }
  14. private:
  15.         int lower,higher;
  16. };
  17. class Game{
  18.         int first_number,cur_number;
  19.         RandomNum MyRandom;
  20. public:
  21.         void play(){
  22.                 int result = first();
  23.                 switch(result){
  24.                 case 1: Win();break;
  25.                 case -1: Lose();break;
  26.                 case 0: second();
  27.                 }
  28.         }
  29. private:
  30.         int first(){
  31.                 GetNumber();
  32.                 if(cur_number==7 || cur_number==11) return 1;
  33.                 else if(cur_number==2 || cur_number==3 || cur_number==12)
  34.                         return -1;
  35.                 else{
  36.                         first_number = cur_number;
  37.                         return 0;
  38.                 }
  39.         }
  40.         void echo()const{
  41.                 cout<<"你得到的点数是: "<<cur_number<<endl;
  42.         }
  43.         void again(){
  44.                 echo();
  45.                 cout<<"请继续摇骰子"<<endl;
  46.         }
  47.         void Win()const{
  48.                 echo();
  49.                 cout<<"你赢了!"<<endl;
  50.         }
  51.         void Lose()const{
  52.                 echo();
  53.                 cout<<"你输了!"<<endl;
  54.         }
  55.         void second(){
  56.                 do{
  57.                         again();
  58.                         GetNumber();
  59.                 }while(cur_number!=7&&cur_number!=first_number);
  60.                 if(cur_number==7) Lose();
  61.                 else Win();
  62.         }
  63.         void GetNumber(){
  64.                 cout<<"请按回车键摇骰子:";
  65.                 cin.get();
  66.                 cur_number = MyRandom.getNum();
  67.         }
  68. };
  69. int main(){
  70.         Game g;
  71.         g.play();
  72. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-20 15:54:26 | 显示全部楼层

谢谢!
可不可以再帮帮忙啊,给点注释,我是新手,不怎么看的懂。
而且还有一个要求给看掉了“为提高可读性,课声明胜负类型:typedef enum(WIN,LOSE,TIE) GameStatus;”
win:赢,lose:输,tie:平.
再次感谢!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-20 16:28:45 | 显示全部楼层
本帖最后由 marlon 于 2011-6-20 16:29 编辑

一开始,我也查过这个程序的相关信息,得知要用到“随机函数”,可是看了半天,不知道怎么用进去,看了阁下的代码,茅塞顿开,又长知识了,继续感谢!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-20 17:05:11 | 显示全部楼层
注释自己加吧
  1. #include<cstdlib>
  2. #include<ctime>
  3. #include<iostream>
  4. #include<string>
  5. using namespace std;

  6. class RandomNum{
  7. public:
  8.         RandomNum(int low=2,int high=12):lower(low),higher(high){
  9.                 srand(time(NULL));
  10.         };
  11.         int getNum()const{
  12.                 return rand()%(higher-lower+1)+lower;
  13.         }
  14. private:
  15.         int lower,higher;
  16. };
  17. class Game{
  18.                 typedef enum{WIN,LOSE,TIE} GameStatus;
  19.         int first_number,cur_number;
  20.         RandomNum MyRandom;
  21. public:
  22.         void play(){
  23.                 GameStatus result = first();
  24.                 switch(result){
  25.                 case WIN: Win();break;
  26.                 case LOSE: Lose();break;
  27.                 case TIE: second();
  28.                 }
  29.         }
  30. private:
  31.         GameStatus first(){
  32.                 GetNumber();
  33.                 if(cur_number==7 || cur_number==11) return WIN;
  34.                 else if(cur_number==2 || cur_number==3 || cur_number==12)
  35.                         return LOSE;
  36.                 else{
  37.                         first_number = cur_number;
  38.                         return TIE;
  39.                 }
  40.         }
  41.         void echo()const{
  42.                 cout<<"你得到的点数是: "<<cur_number<<endl;
  43.         }
  44.         void again(){
  45.                 echo();
  46.                 cout<<"请继续摇骰子"<<endl;
  47.         }
  48.         void Win()const{
  49.                 echo();
  50.                 cout<<"你赢了!"<<endl;
  51.         }
  52.         void Lose()const{
  53.                 echo();
  54.                 cout<<"你输了!"<<endl;
  55.         }
  56.         void second(){
  57.                 do{
  58.                         again();
  59.                         GetNumber();
  60.                 }while(cur_number!=7&&cur_number!=first_number);
  61.                 if(cur_number==7) Lose();
  62.                 else Win();
  63.         }
  64.         void GetNumber(){
  65.                 cout<<"请按回车键摇骰子:";
  66.                 cin.get();
  67.                 cur_number = MyRandom.getNum();
  68.         }
  69. };
  70. int main(){
  71.         Game g;
  72.         g.play();
  73. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-20 17:22:49 | 显示全部楼层
仰望天上的光 发表于 2011-6-20 17:05
注释自己加吧

呵呵呵。。。。。。。
好的,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-21 10:06:22 | 显示全部楼层
我XX,这样都行?孩纸,自己的工作不可偷懒哦:lol。那位大哥啊?还能不能帮小弟做一下?:lol
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-21 12:21:23 | 显示全部楼层

return rand()%(higher-lower+1)+lower;
麻烦你,请你帮忙解释一下这段代码,可以吗?谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-21 21:55:20 | 显示全部楼层
一般情况:
higher=12
lower=2
higher-lower+1=12-2+1=11
rand()%(higher-lower+1)这个余数范围是[0,10]
return rand()%(higher-lower+1)+lower范围是[0+2,10+2],也就是【2,12】。这个范围就是抛出的2个骰子点数之和的范围。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-23 20:45:35 | 显示全部楼层
忙了很久,加上耽误的时间,终于把这个“作业“完成了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 06:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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