Как заставить кортеж давать случайный новый кортеж?

Я пытаюсь занять позицию (a,b) и через код получить случайную новую позицию (a,b). У меня большие проблемы с реализацией кода, и то, что я получил, - это, безусловно, моя лучшая попытка.

      type Teleport (a,b) = 
    inherit Item (a, b, ' ', Color.White, Color.White)
    override this.FullyOccupy() = true
    override this.InteractWith (p: Player) =
        let mutable posX = p.X
        let mutable posY = p.Y
        let rand = System.Random()
        posX <- rand.Next()
        posY <- rand.Next()

Может кто-нибудь объяснить, почему он не работает?

Предполагается, что он работает как телепорт в игре, где, если игрок перемещается в первую (a,b), он должен быть перенесен в новую (случайную) (a,b) позицию. Спасибо!

1 ответ

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

Тем не менее, я настоятельно рекомендую вам не программировать в стиле OO, если вы хотите изучить F # - вы будете намного счастливее, выбрав функциональный стиль.

Одной из отличительных черт функционального программирования (ФП) является неизменность. Для вашего телепорта это означает НЕ мутировать позиции, но создать нового игрока с новой позицией.

Попробуйте что-нибудь в следующей строке

      type Player = { X: int; Y: int; Name: string }

let teleport player =
    let rand = System.Random()
    { player with X = rand.Next 100
                  Y = rand.Next 100 }

Кроме того, старайтесь не обращаться к классу как к решению каждой проблемы, вместо этого стремитесь к функции; выше, это просто функция .

Я искренне надеюсь, что вам понравится F#; это отличный язык для выполнения FP на .NET.

Другие вопросы по тегам