Моделирование бумажных ножниц с помощью цепочки Маркова - PullRequest
0 голосов
/ 07 апреля 2019

Для классного проекта мы с моим партнером создали симуляцию 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

Этот код является ближайшим к нам, и мы добавили кнопку, чтобы он работал, поскольку он не выполняет это автоматически.Но теперь каждый раз, когда мы добавляем счет, ход меняется для ПК из-за случайной функции, которую мы имеем для данных Маркова.Мы хотим сохранить счет и сбрасывать его каждый раз, когда игра заканчивается.

1 Ответ

1 голос
/ 07 апреля 2019

Вероятно, самый простой способ - создать глобальную переменную и увеличить счет по отдельным победам, а затем 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

Я не совсем уверен,если я правильно понял ваш вопрос, но это должно сработать.

В ваших будущих вопросах было бы желательно, если бы вы немного лучше объяснили, с какими данными вы работаете и как должен выглядеть ваш желаемый результат, согласно Минимум, Полный и Поддающийся проверке пример , потому что из вашего текущего вопроса не ясно:

  • , когда именно закончится игра
  • , где именно вы хотите обновить свой счет
  • при каком условии должен точно увеличиваться счет
  • , какие процедуры вы вызываете при вышеупомянутых событиях

Так что мне пришлось сделать много догадок в вашемвопрос.В любом случае, должно быть более чем достаточно, чтобы направить вас на правильный путь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...