【问题标题】:Choosing the two biggest pairs in a yatzhee game在 yahtzee 游戏中选择两个最大的对
【发布时间】:2014-11-24 22:10:14
【问题描述】:

您好,我想知道我们如何才能在 yatzee 游戏中获得 2 个最大的对子。 从之前的问题中,我通过找到一对得到了帮助,但现在我什至不知道。看起来我们只需要将 1 对代码中的数量加倍,但这样做我没有得到任何结果,或者只是 x4 的骰子

   Public Function parVerdier1(ByVal regel As Integer, tall As Object)
    Dim sum As Integer = 0

    For i As Integer = 0 To 4
        For j As Integer = (i + 1) To 4
            If tall(i) = tall(j) Then
                If tall(i) + tall(j) > sum Then
                    sum = tall(i) + tall(j)
                End If
            End If
        Next
    Next
    Return sum
End Function

如果有人想知道,这是 1 对代码,请帮助,谢谢 :) 此外,regel 还用于代码的其余部分。

yatzee 是一款您投掷 5 个骰子的游戏,眼睛 = 点数(您可以将其组合以获得更多点数等)。假设您投掷了 (3 3 4 4 5),将其选择为一对您将获得 8 分 (4+4),如果您将其选择为两对您将获得 14 分 (4+4+3+3) 您可以阅读更多如果你想了解所有规则http://en.wikipedia.org/wiki/Yahtzee,这里是一款非常简单的游戏,如果你觉得无聊也可以玩。

我的最新代码得到了很多帮助,谢谢 :) 仍然有一些问题,例如 http://imgur.com/ExpBb2Q 当我得到这些骰子时,我得到 40 分......

    Public Function parVerdier2(ByVal regel As Integer, tall As Object)

    Dim sum As Integer = 0
    Dim sum2 As Integer = 0
    For o As Integer = 0 To 4
        For l As Integer = (o + 1) To 4
            For i As Integer = (l + 1) To 4
                For j As Integer = (i + 1) To 4
                    If tall(i) = tall(j) And tall(o) = tall(l) Or tall(i) = tall(o) And tall(j) = tall(l) Or tall(i) = tall(l) And tall(j) = tall(o) Then
                        If tall(i) + tall(j) + tall(o) + tall(l) > sum Then
                            sum2 = sum
                            sum = tall(i) + tall(j) + tall(o) + tall(l)
                        ElseIf tall(i) + tall(j) + tall(o) + tall(l) > sum2 Then
                            sum2 = tall(i) + tall(j) + tall(o) + tall(l)
                        End If
                    End If
                Next
            Next
        Next
    Next
    sum += sum2
    Return sum
 End Function

【问题讨论】:

  • 为什么是垃圾标签?这似乎与 VBA 或 VisualStudio 无关
  • 不是 microsoft visual studio= vb.net 吗?哎呀,我很抱歉:(
  • 不熟悉yatzee游戏的朋友,能否请您在问题中解释一下?
  • ok 写了一个关于游戏的简短描述
  • 我会在您之前的问题中问,但是您的参数中未使用的regel 是什么?

标签: vb.net


【解决方案1】:

第二大总和只需要另一个变量:

Public Function parVerdier1(ByVal regel As Integer, tall As Object)

    Dim sum As Integer = 0
    Dim sum2 As Integer = 0

    For i As Integer = 0 To 4
        For j As Integer = (i + 1) To 4
            If tall(i) = tall(j) Then
                If tall(i) + tall(j) > sum Then
                    sum2 = sum
                    sum = tall(i) + tall(j)
                Else If tall(i) + tall(j) > sum2 Then
                    sum2 = tall(i) + tall(j)
                End If 

            End If
        Next
    Next
    Return sum + sum2
End Function

【讨论】:

  • 嗯,好吧,所以我尝试了这个,但似乎没有给出正确的结果我得到了这些骰子imgur.com/Z1my1VH (3 4 3 4 2) 通过选择 2 对我应该得到 (3+3 + 4 +4) = 14 分,但我得到 8 分 (4+4)。抱歉回复晚了,我的网络决定不工作
  • @bcil 好像你只是复制/粘贴到代码...这只是返回 sum 但你希望 sum 和 sum2 加在一起。
  • 是的,我一直在玩代码,也许我忘了把两者加在一起
  • 所以是的,当它的两对正确地添加时,但是当它的 1pair 时,如果我选择 2pairs 8points(4+4),它仍然添加到点 (3 4 4 5 2)。抱歉所有这些问题,我仍然是 vb 的初学者,我正在努力学习它...谢谢大家的帮助:)
【解决方案2】:

你可以使用 Linq 得到最大和的两对:

Public Shared Sub Main()
    Dim dieValues() As Integer = {3, 3, 4, 4, 5}

    Dim pairs = dieValues.GroupBy(Function(i) i).
                          Where(Function(g) g.Count() = 2).
                          OrderByDescending(Function(g) g.Sum()).
                          Select(Function(g) New With {.Value = g.Key, .Sum = g.Sum()}).
                          Take(2)


    For Each g In pairs
        Console.WriteLine("{0}: {1}", g.Key, g.Sum)
    Next

    Console.ReadLine()

End Sub

输出:

4: 8
3: 6

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多