提问人:user14807375 提问时间:12/19/2020 最后编辑:Turing85user14807375 更新时间:5/1/2022 访问量:178
如何让一个元组随机给出一个新元组?
How to make a tuple give a random new tuple?
问:
我正在尝试采取一个位置(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)位置。 谢谢!
答:
2赞
nilekirk
12/20/2020
#1
你的代码不起作用的原因是它永远不会改变 的位置; 只需将位置复制到两个局部变量中,并更新它们。Player
InteractWith
话虽如此,如果你想学习 F#,我强烈建议你不要用 OO 风格编程 - 你会更乐意选择函数式风格。
函数式编程 (FP) 的标志之一是不可变性。对于你的传送来说,这意味着不是要改变 的位置,而是要用新的位置创建一个新玩家。Player
尝试以下操作
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 }
另外,尽量不要把一个类作为每个问题的解决方案,而要伸手去拿一个函数;在上面,只是一个函数。teleport
Player -> Player
我真心希望你会喜欢 F#;它是在 .NET 上执行 FP 的绝佳语言。
上一个:F# 记录:ref 与可变字段
评论
let rand = System.Random()
InteractWith
InteractWith
posX
posY