具有马尔可夫链保持得分的剪刀石头布仿真

时间:2019-04-07 18:18:15

标签: excel vba markov-chains

对于一个班级项目,我和我的搭档使用Markov Chain创建了Rock Paper Scissors仿真。我们输入了计算机的功能,但是我们不知道如何跟踪得分。

我们如何在每个回合之后使用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

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

1 个答案:

答案 0 :(得分: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

我不确定您的问题是否正确,但这应该可以。

  

在您将来的问题中,如果您做了一些   更好地解释您正在使用的数据以及如何使用   根据{{​​3}},期望的结果应该看起来像,因为   您当前的问题还不清楚:

     
      
  • 比赛什么时候结束
  •   
  • 您确切要更新分数的地方
  •   
  • 在哪种情况下分数应准确增加
  •   
  • 您要在上述事件上调用哪些程序
  •   

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