我刚刚开始进行函数式编程。我目前要开始的小项目是一场基本的口袋妖怪战斗。
先写代码,再解释。
let choosePokemon () =
let mutable pokemon = DemoData.schiggy
let msg = Console.ReadLine()
match msg with
| "Schiggy" -> pokemon <- DemoData.schiggy
| "Pikachu" -> pokemon <- DemoData.pikachu
| "Kleinstein" -> pokemon <- DemoData.kleinstein
| "Karpador" -> pokemon <- DemoData.karpador
pokemon
Run Code Online (Sandbox Code Playgroud)
我目前要求人们输入 Pokemon 的名称,如果它与预定义的集合(Schiggy、Pikachu、Kleinstein 或 Karpador)相匹配,则会为他们提供相应的 Pokemon。或者它给他们默认的口袋妖怪。
我目前正在创建它,然后将其与“let mutable pokemon = DemoData.schiggy”匹配。我不想要这样。我只想根据它的名称来分配它。
如果我可以不使用该行,我将避免使其可变,无论如何,这是我不想要的。
进一步的问题是:当口袋妖怪互相攻击时,他们的生命值会减少。
面对不断变化的 int 值时,如何避免使用可变 int?
提前致谢 :)
首先感谢您昨天的回复。我能够继续。
我当前的问题是,我已经能够避免使除 Pokemon 的 currentHP 之外的所有变量都可变。先我的战斗代码,解释如下。
let angriffFighter(fighterPair:list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
fighterPair.[1].currentHP <- fighterPair.[1].currentHP-dmg
Run Code Online (Sandbox Code Playgroud)
函数“hit”计算所处理的伤害并返回一个 int。currentHP 是我似乎无法使其不可变的唯一剩余变量。我需要在每场战斗中减少它,并且我希望在战斗结束后将其重置为 maxHP。
我将如何解决这个问题?