有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

- 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.)

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

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

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    将映射器用于属性名称,例如,实例写入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字节的字符集保存数据