热门标签 | 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中)并且一次进行一条消息.


推荐阅读
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
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社区 版权所有