【问题标题】:C# Dice rollingC# 掷骰子
【发布时间】:2010-10-17 18:10:37
【问题描述】:

我正在尝试使用 5 个骰子进行 C# 编程。两名球员得到三个投掷。在得分之前,他必须按顺序获得 6、5 和 4。当他掷出这些特殊数字中的每一个时,这些骰子就会从游戏中移除。剩下的两个骰子的总和就是他的点。计算机必须打败它。骰子必须按顺序构建。即玩家必须在 5 之前或同时抛出 6,在 4 之前或同时抛出 5。

如何让它识别出 6、5、4 的骰子被读取,以及如何在满足条件后最小化骰子的数量?

【问题讨论】:

  • 到目前为止你有什么代码?
  • 您只需要生成足够多的随机数,然后扫描它们以找到 6、5、4。有什么困难?到目前为止你有什么?
  • 一些问题:这是作业吗?您对 C#(或其他编程语言)有多少经验?您使用的是哪个版本的 C#?如果您是 C# 新手,那么我建议您阅读一些书籍或在 Internet 上搜索,有很多资源可以学习。如果您自己解决问题并看看它是如何进行的,您将了解更多信息。

标签: c#


【解决方案1】:

听起来像是学习有限状态机的练习。

基本思想是你的“机器”以某种状态启动,我们称之为“START”。

您可以掷骰子 3 次以获得分数,因此您还必须记录掷骰子的次数。

每次掷骰后,您都会检查骰子,根据当前状态和掷出的骰子,您的“机器”可能会转换到新状态。

您说您必须按顺序滚动 6、5 和 4(这暗示状态将如何转换)或在同一滚动期间(告诉您可以跳过状态)。

那么这些其他状态是什么?由于您必须先掷出 6,然后再掷出 5,然后再掷出 4,因此我们只需将状态称为“六”、“五”和“四”。

在伪代码中:

int STATE_START = 6;
int STATE_SIX = 5;
int STATE_FIVE = 4;
int STATE_FOUR = 3;

int state = STATE_START;
int rolls = 0;
int[] dice
int score = 0;

do (while state != STATE_FOUR && rolls++ < 4) {
    dice = rollDice();

    do (while state != STATE_FOUR) {
        if (dice.Contains(state)) {
            state--;
        }
        else {
            break;
        }
    }
}

if (state == STATE_FOUR) {
    score = getScore(dice);
}

【讨论】:

  • TQ Chris.. 现在我明白了.. :)
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2019-03-09
  • 1970-01-01
  • 2017-04-09
  • 2016-04-18
  • 2015-06-26
相关资源
最近更新 更多