【问题标题】:Value isn't incrementing properly价值没有正确增加
【发布时间】:2013-08-10 00:45:14
【问题描述】:

这个应用程序的目的是模拟大量的掷骰子游戏。我有另一个版本,它玩一个游戏,要求用户输入和输出信息。此版本的目的是仅显示 10,000 场比赛后的结果。结果是房子赢了多少场比赛,玩家赢了多少场比赛以及每场比赛的平均掷骰数。我还没有实现滚动,因为我想首先让赢得的游戏正确递增。

当我执行这是一堵数字墙时会发生什么(这是由于 cout

即。 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 5 5 5 等

最终的结果通常是这样的:

经过 10,000 次掷骰子游戏:
玩家赢得了 2502 场比赛。
房子赢了 3625 场比赛。

我不太确定如何解决这个问题,据我所知,一切都应该是这样,尽管这只是我使用 C++ 的第四天。

#include <iostream>
#include <string>
#include "randgen.h"

using namespace std;

const int MAX_PLAYS = 10000;

int main() {

    int roll;
    RandGen rg;
    int die1 = rg(6) + 1;
    int die2 = rg(6) + 1;
    int point;
    int total = die1 + die2;
    bool playerwin;
    bool housewin;
    int playerwintotal = 0;
    int housewintotal = 0;

    for (int i = 0; i < MAX_PLAYS; ++i) {
        roll = 1;

        if (roll == 1 && (total == 7 || total == 11)) {
            playerwin = true;
            ++playerwintotal;
        }
        if (roll == 1 && (total == 2 || total == 3 || total == 12)) {
            housewin = true;
            ++housewintotal;
        }
        if (roll == 1 && (total != 2 || total != 3 || total != 12)) {
            point = total;
            playerwin = false;
            housewin = false;
        }

        die1 = rg(6) + 1;
        die2 = rg(6) + 1;
        total = die1 + die2;
        ++roll;
        if (total == point) {
            playerwin = true;
            ++playerwintotal;
        }
        if (total == 7) {
            housewin = true;
            ++housewintotal;
        }

        cout << playerwintotal;

    }
    cout << "After " << MAX_PLAYS << " games of craps:\n" << "Player won "
            << playerwintotal << " times\n" << "The house won " << housewintotal
            << " times\n";

    return 0;
}

【问题讨论】:

  • 如果你修正了缩进,这段代码会更容易阅读。
  • 另外,您可能希望通过使用单个 if (roll == 1) 语句和使用 else 关键字来简化您的 if 逻辑。

标签: c++


【解决方案1】:
total != 2 || total != 3 || total != 12

总是正确的。你可能是说

total != 2 && total != 3 && total != 12

【讨论】:

  • 但是 &&ing 这不是意味着所有三个值都必须为真才能执行主体吗?
  • @AndrewB 是的。但是,每个数字要么不等于 2,不等于 3,要么不等于 12。
  • 好吧,当我可以在我的家用电脑上获得与我在学校电脑上使用的类似版本的 Visual Studio 时,我会试一试
【解决方案2】:

数字是重复的,因为当房子赢或没有人赢时,playerwintotal 不变,因此会重复。也许您打算这样做:

cout << "Turn: " << i+1 << " Player wins: " << playerwintotal << ' ';

此外,正如塞巴斯蒂安在他的回答中指出的那样,“或”不是一个好主意,所以一定要给他一个赞成票。

【讨论】:

  • 但总会有胜利的,总是会是房子或玩家。该程序仅用于在 10,000 场比赛结束时显示结果。因此,当 for 循环完成时,它会显示房子和玩家在这 10,000 场比赛中获胜的次数。从来没有不赢,这是在原始游戏中得到保证的。
【解决方案3】:

但数字重复了 3-4 次

它们应该是 - 您不会打印当前游戏的数量,而是您的玩家赢得的次数(他每次都不会)。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多