gpt4 book ai didi

elm - 如何在此榆树效果示例中添加第二个骰子?

转载 作者:行者123 更新时间:2023-12-03 14:07:27 26 4
gpt4 key购买 nike

我是 Elm 的新手,一直在查看以下示例(注意这是在较新的 0.17 架构下,其中 Action 现在是 Command):
http://elm-lang.org/examples/random

有一个后续挑战是在示例中添加第二个骰子,以便单击按钮为每个骰子滚动一个新值。我的想法是更改模型以保存两个单独的值,每个骰子一个,ala

type alias Model =
{ dieFace1 : Int
, dieFace2 : Int
}

这工作正常,直到我到达更新 block 。我不确定如何更新随机数生成器以创建两个值。这个功能让我有点困惑。
type Msg
= Roll
| NewFace Int Int


update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Roll ->
**(model, Random.generate NewFace (Random.int 1 6))** <-- not sure what to do here

NewFace newFace1 newFace2 ->
(Model newFace1 newFace2, Cmd.none)

Random.generate 函数的文档有点简单——

generate : (a -> msg) -> Generator a -> Cmd msg

Create a command that will generate random values.



这甚至是处理两个骰子的正确方法,还是有更好的方法?我是榆树菜鸟,请友善:)

最佳答案

Random.int是一个原始生成器,可为您提供单个随机 int。你需要一个能正好给你两个随机整数的生成器。

随机数生成器可以从更原始的生成器构建,以创建更复杂的生成器。幸运的是,Elm 正好有这样的功能, Random.pair 它允许您为元组的每个部分指定您想要的两个生成器。

让我们将 die 生成器拉入它自己的函数中以避免重复:

dieGenerator : Random.Generator Int
dieGenerator =
Random.int 1 6

现在我们可以构建另一个生成器,它为我们提供一对骰子的随机值:

diePairGenerator : Random.Generator (Int, Int)
diePairGenerator =
Random.pair dieGenerator dieGenerator

由于我们正在处理整数元组,让我们更新您的 Msg NewFace Int Int的定义至 NewFaces (Int, Int) .这将允许您的 Roll处理程序要干净整洁:

Roll ->
(model, Random.generate NewFaces diePairGenerator)

如果您想尝试超越这一点,请考虑允许掷出任意数量的骰子需要什么。采用从更原始的生成器构建复杂生成器的想法,并使用 Random 的文档为我们提供指南。

关于elm - 如何在此榆树效果示例中添加第二个骰子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com