0

对于一个班级项目,我和我的搭档使用马尔可夫链创建了一个剪刀石头布模拟。我们有计算机做什么的输入,但我们不知道如何跟踪分数。

我们如何在每一轮之后使用 VBA 或函数来获得分数?

我们在 VBA 中尝试了一些东西,我们尝试了不同的功能。但是没有数据可以概括。

Sub Score()

Dim sVariable As String
Dim iNumber As Integer
Dim iPC As Variant
Dim iPlayer As Variant


    sVariable = Sheets("Model").Range("D10")
    iPC = Sheets("Model").Range("E6") + 1
    iPlayer = Sheets("Model").Range("F6") + 1
    iNumber = 1

    If sVariable = "PC Winner!" Then
        Sheets("Model").Range("E6") = iPC
    ElseIf sVariable = "Player Winner!" Then
        Sheets("Model").Range("F6") = iPlayer
    End If

End Sub

该代码是我们获得的最接近的代码,我们添加了一个按钮以使其运行,因为它不会自动执行。但是现在每次我们添加分数时,PC 的移动都会发生变化,因为我们对马尔可夫数据具有随机函数。我们希望保留分数并在每次游戏结束时重置它。

4

1 回答 1

1

可能最简单的方法是创建一个全局变量并在个人获胜时增加分数,然后Call在每一轮之后更新分数。

注意:根据您的实现,甚至可能不需要全局变量,并且可以通过参数轻松传递。如果没有提供更多详细信息,很难说

Public playerScore as Integer
Public pcScore as Integer

Private Sub update_score()
   Sheets("Model").Range("E6") = pcScore
   Sheets("Model").Range("F6") = playerScore
End Sub

Private Sub Score()
  ' ... your code here ...'
  If sVariable = "PC Winner!" Then
      pcScore = pcScore + 1
  Else
      playerScore = playerScore + 1
  End If

  update_score
End Sub

在新游戏中,您重新开始得分

Private Sub new_game()
  pcScore = 0
  playerScore = 0
  ' ... your code here ...'
End Sub

我不确定,如果我的问题是正确的,但这应该可行。

在您未来的问题中,如果您根据Minimal, Complete and Verifiable Example更好地解释您正在使用的数据以及您想要的结果应该是什么样子,那将是受欢迎的,因为从您当前的问题来看,它是不清楚:

  • 游戏到底什么时候结束
  • 你究竟想在哪里更新你的分数
  • 在什么条件下分数应该准确增加
  • 您在上述事件中调用了哪些程序

所以我不得不对你的问题做很多猜测。无论哪种方式,都足以引导您走上正确的道路:)

于 2019-04-07T18:59:09.537 回答