热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

处理WorldState的函数/actor中的鸡或蛋

如何解决《处理WorldState的函数/actor中的鸡或蛋》经验,为你挑选了1个好方法。

我读过"Purely Functional Retrogames"系列

http://prog21.dadgum.com/23.html

它讨论了一些有趣的技术来构建(半)纯游戏世界更新循环.

但是,我有以下方面的评论,我似乎无法理解:

假设你有一个系统,每个敌人,每个玩家都是独立的演员,或者是单独的纯粹功能.

假设他们都得到一个"WorldState"作为输入,并输出一个New WorldState(或者,如果你用演员术语思考,将新的WorldState发送给下一个actor,以例如"Game Render"演员结束).

然后,有两种方法可以解决这个问题:

    要么你从一个演员开始,(对玩家来说),并向他提供"当前世界".然后,你将新世界,下一个敌人,等等,直到所有演员都改变了世界.然后,最后一个世界是你可以提供给渲染循环的新世界.(或者,如果您按照上面的文章,最终会得到世界上发生的可以处理的事件列表).

    第二种方式,就是同时给所有演员当前的WorldState.它们产生任何可能发生冲突的变化(例如,两个敌人和玩家可以在相同的动画帧中获取硬币) - >由游戏系统通过处理事件来解决这些冲突.通过处理所有事件,Game actor创建新世界,用于下一个更新框架.

我有一种感觉,我只是面对完全相同的"竞争条件"问题,我希望通过使用具有不可变数据的纯函数来避免这个问题.

有什么建议吗?



1> Pascal..:

我没有读过这篇文章,但是用硬币的例子你正在创建一种全局变量:你给所有演员一个世界状态的副本,你想每个演员都会评估游戏,做出决定并期望他们的无论最后阶段是解决冲突,行动都会成功.我不会称这是一种竞争条件,而是一种"盲目条件",是的,这是行不通的.

我想你来到这个解决方案是为了允许并行性,在解决方案1中没有.在我看来,问题在于责任.

硬币必须属于应用程序中的任何actor(作为资源管理器的服务器).这个演员是唯一负责决定硬币会发生什么的人.

应该将所有请求(有东西抓住,抓住它,丢弃东西......)发送给这个演员(每个单元一个演员,或每个地图,等级或任何对游戏有意义的分裂).

您管理它的方式取决于您:在接收顺序中提供所有请求,缓冲它们直到同步消息到来并做出随机决策或优先级决定......无论如何,服务器将能够回复所有成功或失败的参与者没有任何竞争条件的风险,因为服务器进程在单个核心上运行(至少在erlang中)并且一次进行一条消息.


推荐阅读
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • h5调用本地摄像头和麦克风一
    h5调用本地摄像头和麦克风一,Go语言社区,Golang程序员人脉社 ... [详细]
  • 事件是程序各部分之间的一种通信方式,也是异步编程的一种实现形式。本文将详细介绍EventTarget接口及其相关方法,以及如何使用监听函数处理事件。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
author-avatar
望尽天涯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有