一个关于掷骰子的编程问题

yudejiezou 2003-07-04 02:29:07
题目如下
掷双骰子游戏
游戏规则是:游戏者掷两个骰子,每个骰子有六个面分别标有1、2、3、4、5、6个圆点。把两个骰子朝上的点数相加。如果第一次相加的和为7或11,游戏者赢;如果和为2、3或12,游戏者输;如果和为4、5、6、8、9、10,那么此和为游戏者点数。如果游戏者想赢,可继续掷两个骰子,直到新掷出的点数相加与第一次点数相同时为止。如果继续掷出的点数相加为7,游戏者则输了。有输、赢为一次游戏结束。
程序要求如下:
Ø 记录下游戏者的每一次游戏结果,每一条记录的信息内容有:掷骰子的次数、点数、结果,并保存在文件game.txt中。见如下范例:
workSum dicePoint result
1 7 w
10 7 f
5 8 w
Ø 加上一个浏览功能,使其能够浏览文件内的全部信息。如果记录比较多,可以考虑分屏显示

帮帮忙谢谢了!!
...全文
1674 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yudejiezou 2003-07-04
  • 打赏
  • 举报
回复
谢谢楼上的各位
ufouser 2003-07-04
  • 打赏
  • 举报
回复
文件写入方法(供参考)

第6行:#include<fstream.h>

12,13行间插入:ofstream savefile("game.txt",ios::ate);
int times=0,lastdice;
char finalresult;

44行插入: lastdice=sun;
if ( gameStatus == WON ) finalresult='w';
else finalresult='f';

16,17行间插入:times++;

49行插入: savefile<<times<<" "<<lastdice<<" "<<finaresult<<endl;
savefile.close();
ufouser 2003-07-04
  • 打赏
  • 举报
回复
C++大学教程1-11章:http://www.cstudyhome.com/wenzhang06/ReadNews.asp?NewsID=962
需要先注册。
后面的9章没贴出来。可能在他们卖的光盘里有。没办法。要全部就得买他们的光盘。20元/个
ufouser 2003-07-04
  • 打赏
  • 举报
回复
见原文:文件写入改一下就行了

3.9 案例:机会游戏与enum简介
一个最常见的机会游戏是投骰子游戏,游戏规则如下:
游戏者投两枚骰子,每个骰于有六面,这些面包含1、2、3、4、5、6个点。投两枚骰于之后,计算点数之和。如果第一次投时的和为7或11,则游戏者获胜。如果第一次投时的和2、3或12,则游戏者输,庄家赢。如果第一次投时的和为4、5、6、8、9或10,则这个和成为游戏者的点数。
要想赢,就要继续投骰子,直到赚到点数。如果投七次之后还没有赚到点数,则游戏者输。
图3.10中的程序模拟了投骰子游戏,图3.1l显示了几个示例的执行结果。
1 // Fig. 3.10: figO3_lO.cpp
2 // Craps
3 #include <iostream.h>
4 #include <stdlib.h>
5 #include <time.h>
6
7 int rollDice( void ); // function prototype
8
9 int main ( )
10 {
11 enum status{CONTINUE,WON,LOST};
12 int sum, myPoint;
13 status gameStatus;
14
15 srand( time( NULL ) );
16 sum = rollDice( ); // first roll of the dice
17
18 switch ( sum ) {
19 case 1:
20 case 11: // win on first roll
21 gameStatus = WON;
22 break;
23 case 2:
24 case 3:
25 case 12: // lose on first roll
26 gameStatus = LOST;
27 break;
28 default: // remember point
29 gameStatus = CONTINUE;
3O myPoint = sum;
31 cout << "point is "<< myPoint << endl;
32 break; // optional
33
34
35 while { gameStatus == CONTINUE ) { // keep rolling
36 sum = rollDice( );
37
38 if ( sum = myPoknt ) // win by making point
39 gameStatus = wON;
40 else
41 if ( sum == 7 } // lose by rolling 7
42 gameStatus = LOST;
43 }
44
45 if ( gameStatus == WON )
46 cout << "Player wins" << end1;
47 else
48 cout << "Player loses" << endl;
49
50 return 0;
51 }
52
53 int rollDice( void )
54 {
55 int diel, die2, workSum;
56
57 die1 = 1 + rand( ) % 6;
58 die2 = 1 + rand( ) % 6;
59 workSum = diel + die2;
60 cout << "Player rolled" << diel <<" + "<< die2
61 << " = " << workSum << endl;
62
63 return workSum;
64 }

图 3.10 模拟投骰子游戏的程序

Player rolled 6 + 5 = 11
Player wins

Player rolled 6 + 6 = 12
Player loses

Player rolled 4 + 6 = 10
Point is 10
Player rolled 2 + 4 = 6
Player rolled 6 + 5 11
Player rolled 3 + 3 = 6
Player rolled 6 + 4 10
Player wins

Player rolled 1 + 3 = 4
Point is q
Player rolled 1 + 4 = 5
Player rolled 5 + 4 9
Player rolled 4 + 6 - 10
Player rolled 6 + 3 - 9
Player rolled 1 + 2 = 3
Player rolled 5 + 2 = 7
Player loses



注意,游戏者首先要投两枚骰子,后面也是。我们定义rollDice函数投骰子、计算并打印点数和。函数rollDice定义一次,但可从程序的两个地方调用。有趣的是,rollDice不取参数,因此在参数表中用void表示。函数rollDice返回投两枚骰子的点数和,因此在函数首部定义的返回类型为int。
这个游戏相当复杂。游戏者第一次投两枚骰子时可能输也可能赢,也可能投好几次才会定出输赢。变量gameStatus跟踪这个状态,将其声明为Status类型。下列语句:
enum Status{ CONTIEUE,WON,LOST);
生成用户自定义类型(user-defined type)即枚举类型(enume ration)枚举类型由关键字enum和类型名(这里是Status)构成,是—组用标识符表示的整数常量。这些枚举常量(enume ration constant)的值从0开始,增量为1,但也可以指定其他的增量值。在上述枚举中,CONTINUE指定为数值0,WON指定为数值1,LOST指定为数值2。enum中的标识符必须惟一,但不同枚举常量可以取相同的值。

用户自定义类型Status的变量只能赋给枚举中声明的三个值之一。游戏获胜时,gameStatus设置为WON;游戏失败时,gameStatus设置为LOST;否则gameStatus设置为CONTINUE.可以再次投骰子。

另—个常用枚举是:
enum Months {JAN = 1,FEB,MAR,APR, MAY,JUN, JUL,AUG,SEP,OCT,NOV,DEC};
生成用户自定义类型Months,用枚举常量表示一年的月份。由于上述枚举中第一个值显式指定为1,因此其余值每次递增1,取值为1到12。任何枚举常量可以在枚举定义中指定一个整数值,后面的值用1递增。

第一次投骰子之后,如果游戏获胜,则跳过while结构体,因为gameStatus不等于CONTINUE。
程序进入if/else结构,在gameStatus等于WON时打印“Playerwins",在gameStatus等于LOST时打印“Playerloses"。
第一次投骰子之后,如果游戏没有结束,则sum保存在myPoint中,由于gameStatus等于CONTINUE,因此执行while结构中的程序。每次执行while结构中的程序时,调用rollDice产生新的sum。如果sum符合myPoint,则gameStatus设置为WON,while测试失败,if/else结构打印“Playerwins”,终止执行。如果sum等于7,则gameStatus设置为LOST,while测试失败,if/el~结构打印“Playerloses”,终止执行。
注意其中使用了前面介绍的各种程序控制机制。投骰子程序使用两个函数main和rollDice,并使用switch、while、if/else和嵌套if结构。练习中,我们要介绍投骰子程序的各种有趣的特点。
yudejiezou 2003-07-04
  • 打赏
  • 举报
回复
大学教程在哪找??
yudejiezou 2003-07-04
  • 打赏
  • 举报
回复
谁能帮忙写出来呀!!
titainium 2003-07-04
  • 打赏
  • 举报
回复
看看《C++大学教程》,上面有类似的示例。
yiminggw 2003-07-04
  • 打赏
  • 举报
回复
应该很好写
写入文件不会

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧