首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于RPG中魔法物品创建的计算器

问用于RPG中魔法物品创建的计算器
EN

Code Review用户
提问于 2017-04-28 14:12:53
回答 1查看 94关注 0票数 4

我已经创建了一个简单的计算器,将帮助创建从桌面RPG探路者魔术项目。这里是完整的需求,如果您想要一个更简洁的版本,这里是一个播放器生成的流程摘要。

我一直在尝试进入F#和函数式编程。我来自一个强烈的面向对象的背景,很难忽视这些习惯。请关注这是否是惯用的F#。我很想听听是否有更好的方法来写它。如果你找到窃听器,我也很高兴知道。

问题

我觉得更好的几件事就是DC的计算。我不知道只有在项目被匆忙的情况下,才能使用rush函数。我也试图找到一个地方,我可以应用功能构图,但我认为我需要所有的中间步骤,我停止。

码

代码语言:javascript
复制
let baseDC casterLevel =
    5 + casterLevel

let rush dc =
    dc + 5

let ignoreRequirements requirements dc =
    dc + (5 * requirements)

let getBuildPrice basePrice =
    basePrice * 0.5

let getTime basePrice =
    floor (8.0 * basePrice / 1000.0)

let getMinBonusForNoCursed dc =
    dc - 6

let buildDaysWhileAdventuring isRushed buildTime =
    let adventuringBuildTime = buildTime / 4.0
    floor (if isRushed then adventuringBuildTime else adventuringBuildTime * 2.0)

[<EntryPoint>]
let main argv = 
    printfn "%A" argv

    let isRushed = true
    let casterLevel = 1
    let requirementsIgnored = 1

    let basePrice = 5000.0
    let buildPrice = getBuildPrice basePrice

    let buildTime = getTime basePrice
    let daysAdventuring = buildDaysWhileAdventuring isRushed buildTime

    let DC = 
        match isRushed with
        | false -> baseDC casterLevel |> ignoreRequirements requirementsIgnored
        | true -> baseDC casterLevel |> ignoreRequirements requirementsIgnored |> rush

    let minDC = getMinBonusForNoCursed DC

    printfn "Min/DC: %i/%i Cost: %.2f Days/Hours: %.1f/%.1f" minDC DC
        buildPrice daysAdventuring buildTime

    0 // Return code
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-05-01 00:40:19

我看到了一些问题,最值得注意的是,你有很多神奇的数字。

设baseDC casterLevel =5+ casterLevel if dc = dc +5 ignoreRequirements requirements dc = dc + (5 * requirements)让getBuildPrice basePrice = basePrice * basePrice getTime basePrice =楼层(8.0 *basePrice/ 1000.0)让getMinBonusForNoCursed dc = dc -6 buildDaysWhileAdventuring isRushed buildTime = let adventuringBuildTime = buildTime / 4.0层(if isRushed rush basePrice* 2.0)

按照顺序,我看到:

  1. 5 + casterLevel:5是什么?
  2. dc + 5:5是什么?和1号一样吗?
  3. 5 * requirements:5是什么?和1号或2号一样吗?
  4. basePrice * 0.5:0.5是什么?是1 / 2还是别的什么东西?
  5. 8.0 * basePrice:8.0是什么?
  6. #5 / 1000.0:1000.0是什么?
  7. dc - 6:6是什么?
  8. buildTime / 4.0:4.0是什么?
  9. adventuringBuildTime * 2.0:什么是2.0,是4.0 / 2,是#8 / 2中的4.0吗?

对于一个功能程序来说,这还不算太糟。我不喜欢您使用if多少次(我总是喜欢使用match),但是当处理布尔类型时,它做得很好。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/162040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档