- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在正在 Traveler 中尝试处理独立于玩家的游戏状态更新。作为引用,该项目是 here (开发分支是与此问题相关的分支)。
Libraries/Universe/GameState.hs
有一个函数 updateGS
,用于处理所有玩家对游戏状态的更新。 EventNetwork
现在看起来像这样。
makeNetworkDescription :: AddHandler PlayerCommand ->
AddHandler () ->
TChan GameState ->
IO EventNetwork
makeNetworkDescription addCommandEvent tickHandler gsChannel = compile $ do
eInput <- fromAddHandler addCommandEvent
eTick <- fromAddHandler tickHandler
let bGameState = accumB initialGS $ updateGS <$> eInput
eGameState <- changes bGameState
reactimate $ (\n -> (atomically $ writeTChan gsChannel n)) <$> eGameState
实现这个计时器的问题是,我看过的所有示例都有与我的物理模拟不同的用例。这个游戏不涉及物理。我正在尝试使用计时器来独立于玩家操作来评估游戏状态。目前,我唯一想要管理的就是超空间旅行。完全实现后,从一个星球移动到另一个星球会将特工
的位置
更改为右超空间
。现在需要发生的是,当发生 tick
时,distanceTraversed
就会增加 1。然后,如果 distanceTraversed
等于 totalDistance
,Agent
的位置将变为 Left Planet
。
那么从 EventNetwork
的角度来看,这会是什么样子?
let bHyperspace = accumB initialGS $ foo <$> eTick
现在组合行为
let bBaz = (++) <$> bGameState <*> bHyperspace
这是正确的道路吗?
最佳答案
这个问题有点模糊,不容易回答,但我会尽力。
首先,查看您的代码,我发现您将实际的游戏逻辑“外包”给了整体 GameState
类型和 updateGS
函数,这很奇怪。现在,这并不是一件坏事,只是以这种方式使用 FRP 没有任何好处。您可以完全删除 makeNetworkDescription
函数,并使用 addCommandEvent
手动注册偶数处理程序。
FRP 的好处是您可以将游戏状态建模为行为和事件的网络。如果状态足够模块化,那么这将显着简化代码。
其次,关于你关于超空间旅行建模的问题。
这是一种方法:
-- indicates whether hyperspace travel is currently happening
bTravelling :: Behavior t Bool
-- increment travel distance, but only when travelling
bTravelDistance :: Behavior t Distance
bTravelDistance = accumB 0 $ (+1) <$> whenE bTravelling eTick
-- calculate player location from travel distance
bPlayerLocation :: Behavior t Location
bPlayerLocation =
(\distance -> if distance > total then Left Planet else Right HyperSpace)
<$> bTravelDistance
不过,您可能想在游戏中多次重复此过程。不幸的是,reactive-banana 目前不提供“先做这个,然后做那个”的抽象。有动态事件切换,但可能有点笨拙。
关于haskell - 功能性 Banana Traveler - 独立于计时器和玩家的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484322/
这纯粹是一个练习,但给出以下代码: var someCondition = (....); var res = []; if (someCondition) { res.push("A"); }
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 6年前关闭。
Heinrich Apfelmus慷慨地插话this问题。我曾考虑过使用 accumB作为解决方案,但认为会出现类型错误。无论如何,在尝试了他的建议之后,我确实收到了类型错误。 let bGameSt
我需要访问 React 组件中的 window 对象以从查询字符串中获取某些内容。这就是我的组件的样子: export function MyComponent() { return (
我如何声明接受数字和数字列表的函数,如果列表中没有这样的数字则返回 NONE,否则返回列表选项(Haskell 中的“Maybe”)没有这个数字?如果有多个这样的数字,函数必须只删除其中的第一个。 a
类型的值如何: type Tree = | Node of int * Tree list 有一个以函数方式生成的引用自身的值? 对于合适的 Tree 定义,结果值应等于以下 Python 代
我一直在脚本(数据科学工作)中使用 F# 并开发与 C# 一起使用的类库。在后一种情况下,我一直在使用纯功能代码创建模块。 如果我想开始完全在 F# 中开发大型应用程序,我不确定我会如何构建它。我发现
对于用函数式语言创建 GUI 的方法已经有很多研究。有用于推/拉 FRP、基于箭头的 FRP 以及可能还有其他高级研究的库。 Many people似乎同意这是更原生的方式,但几乎每个人似乎都在使用命
我现在正在 Traveler 中尝试处理独立于玩家的游戏状态更新。作为引用,该项目是 here (开发分支是与此问题相关的分支)。 Libraries/Universe/GameState.hs 有一
这里有 2 个对象: object1: { email: somevalue url: somevalue description: somevalue } object2:
我正在使用 Keras 函数式 API 创建一个神经网络,它将词嵌入层作为句子分类任务的输入。但是我的代码在连接输入层和嵌入层的开始就中断了。按照 https://medium.com/tensorf
为什么不能编译? #include #include class A { A() { typedef boost::function FunctionCall;
我很清楚为什么我们需要函数式 setState 以及它是如何工作的,例如 this.setState((prevState, props) => ...); 您可以像上面那样获取先前的状态作为参数。
我最近一直在研究使用 Javascript 进行的函数式编程,对此我是个菜鸟。 在编写一些“map”、“reduce”和“find”函数时,我发现从 JS 1.5 版开始,这些函数已经可用(参见 ht
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我正在寻找一种用于 HTML 表管理的一体化解决方案。我想要完成的是为用户提供简单的表管理,该管理将提供按列排序、过滤数据(每列或每表全局)、移动列(更改其顺序)和切换列可见性。 基本上是 ExtJS
我不明白其中的错误。我正在尝试使用 std::function 将成员函数作为参数传递。除了第 4 种也是最后一种情况外,它工作正常。 void window::newGame() { } //sho
我是 Scala 和函数式编程的初学者,我有一些算法代码可能有一些味道,因为它使用了可变性,但也有一个错误,部分原因是它是可变的。我有两组二维点。第 1 组中的每个点都与第 2 组中最近的点相关联(给
我正在尝试使用 Keras 实现带有负采样的 Word2Vec CBOW,遵循发现的代码 here : EMBEDDING_DIM = 100 sentences = SentencesIterato
我绝对为此失去了理智。我不明白为什么会这样。每次我运行此测试时,该对象都会保存到正常的非测试数据库中。然而,测试结束时的两个断言无论如何都失败了,说他们无法在数据库中找到任何用户,即使每次测试运行时我
我是一名优秀的程序员,十分优秀!