【发布时间】:2013-04-13 02:14:39
【问题描述】:
我正在为我的 C 编程课程做一个学习任务,我被要求做以下事情:
任务 2。废话。
在掷骰子游戏中,“及格线”赌注如下进行。使用两个六面骰子, 掷骰子的第一轮骰子称为“Come out Roll”。投注 出局点数为 7 或 11 时立即获胜,出局点数为 7 或 11 时输 2、3 或 12。如果在出局掷骰上掷出 4、5、6、8、9 或 10,则该数字成为“点数”。玩家继续掷骰子,直到掷出 7 点或点数。如果点数先滚动,则玩家赢得赌注。如果玩家先掷出 7,那么玩家 输了。
使用上述规则编写一个玩掷骰子游戏的程序,以便它 模拟没有人工输入的游戏。该程序没有要求下注,而是 应该只计算玩家是否会赢或输。创建一个模拟的函数 掷两个骰子并返回总和。添加一个循环,让程序播放10,000 游戏。
添加计数器来计算玩家获胜的次数以及获胜次数 玩家输了。在 10,000 场比赛结束时,计算获胜的概率,即 Wins / (Wins + Losses) 并输出此值。从长远来看,谁会赢 掷骰子最多的游戏,是你还是房子?
这是我目前所写的:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
// Craps Program
// Written by Kane Charles
// Lab 2 - Task 2
// 7 or 11 indicates instant win
// 2, 3 or 12 indicates instant los
// 4, 5, 6, 8, 9, 10 on first roll becomes "the point"
// keep rolling dice until either 7 or "the point is rolled"
// if "the point" is rolled the player wins
// if 7 is rolled then the player loses
int wins = 0, losses = 0;
int r, i;
int N = 1, M = 12;
int randomgenerator();
main(void){
/* initialize random seed: */
srand (time(NULL));
/* generate random number 10,000 times: */
for(i=0; i < 10000 ; i++){
int r = randomgenerator();
if (r == 7 || r == 11) {
wins++;
}
else if (r == 2 || r == 3 || r == 12) {
losses++;
}
else if (r == 4 || r == 5 || r == 6 || r == 8 || r == 9 || r == 10) {
int point = r;
int temproll;
int *tr = &temproll;
do
{
*tr = randomgenerator();
}while (temproll != 7 || temproll != point);
if (temproll == 7) {
losses++;
}
else if (temproll == point) {
wins++;
}
}
}
printf("Wins\n");
printf("%d",&wins);
printf("\nLosses\n");
printf("%d",&losses);
}
int randomgenerator(){
r = M + rand() / (RAND_MAX / (N - M + 1) + 1);
return r;
}
程序总是以:
Wins:
0.000000
Losses:
0.000000
而它应该显示(共 10000 次)程序赢了多少次,输了多少次。有人能帮我解决这个问题吗?我怀疑我可能需要使用指针而不是 wins++ 和 losses++ 以便全局保存分数。
请记住,我是很多新手,因此我们将不胜感激。
【问题讨论】:
-
滚动两个六面骰子不会产生 2 到 12 之间的均匀加权概率。您将不匹配的值传递给您的打印语句,这就是您最终得到
0打印输出的原因 -调高你的警告级别! -
请不要这样编辑您的问题。它使人们的回答变得荒谬。您可以随意添加新信息,但请不要替换原来的信息。
-
@CarlNorum 对此感到抱歉,我什至没有想过这会给查看帖子的人带来什么影响。再次抱歉
标签: c random numbers generator