Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要为游戏创建演员动作和动作的回放_Java - Fatal编程技术网

Java 需要为游戏创建演员动作和动作的回放

Java 需要为游戏创建演员动作和动作的回放,java,Java,以下是关于游戏的一些基本知识: 存储多达5000个回合的最有效方式是什么,每个回合存储每个参与者的位置和相关信息。我希望能够在各轮之间来回擦洗,并能够调出该轮演员的相关信息(即某轮演员的健康状况) 我知道如何做到这一点,只需将信息写入.txt文件,然后从中读取(这就是我制作预设地图的方式),但对于5000轮比赛,.txt文件将是巨大的。在游戏开发中有没有更简单的方法来解决这个问题?我经常在RTS游戏中看到它 编辑-所有的命令都是在游戏开始之前发出的。例如,玩家可以命令类似于“如果你是一名战士—

以下是关于游戏的一些基本知识:

存储多达5000个回合的最有效方式是什么,每个回合存储每个参与者的位置和相关信息。我希望能够在各轮之间来回擦洗,并能够调出该轮演员的相关信息(即某轮演员的健康状况)

我知道如何做到这一点,只需将信息写入
.txt
文件,然后从中读取(这就是我制作预设地图的方式),但对于5000轮比赛,
.txt
文件将是巨大的。在游戏开发中有没有更简单的方法来解决这个问题?我经常在RTS游戏中看到它


编辑-所有的命令都是在游戏开始之前发出的。例如,玩家可以命令类似于“如果你是一名战士——每一轮——找到最近的敌人,如果你不能射击它,就朝它移动,如果你在射程内,就朝它移动。否则,向南移动。”因此,在第一轮开始后没有输入命令。相反,每一个参与者在每一轮中执行相同的逻辑

假设
数据库
不是一个选项,您可以创建一个
toXML()
toJSON()
方法,为每轮数据创建一个
XML
JSON
。之后,您必须决定是否可以存储为roundX。JSON或类似于
roundXtoY.JSON
的捆绑包。这取决于数据,但它是文本数据,一次存储100-500轮(可能更多)应该很容易。

使用属性名称的映射器,例如,instanced write h=100而不是playerHealth=100 仅保存更改,静态不可移动对象(如石头)不需要5000个条目。 使用LF而不是CRLF

Veery简化示例(其中r为圆形,p为玩家,a为动作,Bh为建造房屋): r=0[p=0,x=100,y=100,h=100,a=Bh(101102),p=1,x=105,y=105,h=99,a=Bh(106106)] 每轮两名玩家约77个字符=385000字节

或: 0P0X100Y100H100ABH101102、P1X105Y105H99ABH106106 存储相同的信息,需要花哨的代码,但5000轮中只有51字节=255'000字节,即0.2兆字节。假设您将数据存储量提高10倍,再乘以100名玩家,仍然只有200兆字节。如果你在回合结束后压缩它,我想它会减少到10MB左右


如果您希望使用文本文件而不是二进制数据,请尝试使用每个字符仅使用1字节的字符集保存数据。

仅此提示:您不需要记住每一位数据,只需记住从一轮到另一轮实际更改的数据即可。此外,许多数据可以通过重新应用游戏逻辑来替代——除了随机元素起作用的部分。还有一件事:也许这个可以帮助你?我不确定,但有一堆命令,然后以某种方式保存和/或序列化这些命令可能是有意义的?我只是想提出一些想法。@domdom只有在逻辑保持不变的情况下才起作用,但问题是可以解决的(而且很有趣).@domdom这可能很有用,尽管考虑到游戏的这一警告,我正在努力想如何实现这一点——所有命令都是在游戏开始之前发出的。例如,玩家可以命令类似于“如果你是一名战士,每一轮,找到最近的敌人,朝它移动,然后射击。否则,向南移动。”因此,每一轮本身没有输入命令,而是每一个单位每一轮都执行相同的逻辑。迪伦,这听起来好像整个游戏是非常确定的,也就是说,整个事件过程仅仅取决于一开始给出的命令。那么,记住这些命令(我实际上称之为规则)就足够了,然后让游戏逻辑做它自己的事情,以便重新玩游戏吗?同样,随机元素(如果有的话)也需要另外记住。那么立即完全二进制不是更好吗?这样,一些信息甚至可以被压缩成几位,这取决于需要多少。例如,如果某个动作可以完成也可以不完成,那么一个位就足够了。
- RTS (Real-time strategy)
- Every object on the game screen is an "actor".
- Every actor has an (x,y) position, HP, and type.
- Works in rounds. Every round, every actor takes one action (move, shoot, build, etc.)