“史诗”级宇宙科幻大型多人在线网络游戏:《黑暗森林》

进度汇报:
[网络交互优化] 解决了“用户掉线再登录会有两个星球”的问题——大家可以愉快地登录登出啦。PS:重新登录后发现星球都被占领了不要怪我

楼主 Andy18650  发布于 2019-06-01 23:20:00 +0800 CST  
进度汇报:
[核心算法优化] 新的舰队攻击判定证明有效,删除ATTACK_DISTANCE。以下是修改前后的判定变化:
之前:舰队之间的距离低于一个常数ATTACK_DISTANCE就判定发起攻击。但是考虑以下情况:两支舰队以接近光速的速度相向而行,那么它们有可能在一个TICK中间“擦肩而过”。为了避免这种情况,ATTACK_DIATANCE必须大于光速。这就造成了舰队攻击的判定范围很广——一个光TICK(光在一TICK中走过的距离)。
现在:舰队之间的距离低于自身的速度大小就判定发起攻击。所以速度较快的舰队攻击范围会大一些。但是同样能避免“擦肩而过”的情况。具体证明比较繁琐,就不贴出来了。反正“容易证明”。

楼主 Andy18650  发布于 2019-06-01 23:42:00 +0800 CST  
进度汇报:
[用户界面制作] 删除了planetpredict指令,预测工作转为在客户端进行,为之后的图形界面打下基础。
服务器增加EXIT!指令,执行后强制断开所有用户并结束程序,主要是调试方便。。。
客户端增加exit指令,执行后断开连接并结束程序,主要是防止大家说我抠掉退出键。
这是对客户端命令行程序的最后一次维护。服务器端使用命令行的时间会长一点,但是也不会很久了,服务器端打算采用Swing,所以看不到星图。如果吧友希望能有一个“上帝视角”,也可以。在回复中告诉我,我考虑一下。

楼主 Andy18650  发布于 2019-06-01 23:51:00 +0800 CST  
新的游戏已编译,需要的留下邮箱

楼主 Andy18650  发布于 2019-06-01 23:59:00 +0800 CST  
游戏的几种玩法:
刚才有吧友提到这个游戏是否可以苟,但是“什么都不做”只能在人口为0时实现。不过,将人口设得很低的确是一个打法(楼主在设计这个游戏之初就在考虑各种打法,目的是为了避免一种简单的最优解的出现)。这种打法——我们叫它“持久”吧——主要仰赖于自身人口很低,不会被发现,主要致胜策略就是“耗死”大文明。但是,游戏末期很有可能具有上亿科技的超级文明的舰队游弋在整个星系中,如果系统有设置最低人口的话(下次的核心算法优化没准就是这个),那么“持久”的文明最终一定会“胁肩累足”而没有容身之地。

楼主 Andy18650  发布于 2019-06-02 09:45:00 +0800 CST  
所以,击败“持久”的方法在于高人口高科技、大量侵略以维持巨大的资源开支,同时主动搜索并消灭其他文明,我们叫它“进攻”吧。但是,资源会有两条消耗的路径——自身人口和庞大的侵略型舰队。就像传销一样,一旦停止发展就会飞快地自我消耗而灭亡(这个游戏遵循“Who laughs the last laughs the best”——笑到最后的笑得最好原则,所以一个巨大的文明可能像阿西莫夫的银河帝国一样摇摇欲坠,小文明也不一定就不能是赢家)。所以,如果这样的文明啃到了“硬骨头”——高科技、高人口,但是囤积资源,不派出舰队的文明,就会被“耗死”。

楼主 Andy18650  发布于 2019-06-02 09:54:00 +0800 CST  
但是,高人口、高科技而不派出舰队的文明——我们叫它“防御”吧——是奈何不了“持久”的。因为没有庞大的舰队,凭借星球很难搜索到低人口的文明,所以无法攻击。那就耗吧,然而“持久”就是“耗”的专业户,“防御”无论如何都耗不过低人口的“持久”。

楼主 Andy18650  发布于 2019-06-02 09:59:00 +0800 CST  
所以我们就有了一个将近十年前陀螺游戏动画片的铁三角逻辑——防御克进攻,进攻克持久,持久克防御。这个有点“文明分类”思想的逻辑虽然比较不符合这个游戏的设计理念。但是它实际告诉玩家们没有一种打法是最优的,在实际场合下,玩家的策略肯定是这三者的结合。比如进攻带点防御(只朝一个方向派舰队,其他方向星际长城),一些星球防御一些持久(没有敌人的方向,还可以吃一点科技支援福利),等等。而且,策略还需要及时调整,比如本来积极进攻,碰到一个星际长城啃不动立马转持久跟他耗,或者本来持久,到后场看大文明都差不多要收官了突然大发力,超高人口弯道超车。。。

楼主 Andy18650  发布于 2019-06-02 10:13:00 +0800 CST  
教大家一个秘籍:虽然本游戏中没有常规的血量系统,但是楼主在长期的模拟中发现了这样一个近似定律:星球的“血量”是资源,而舰队的“血量”是人口。这两者都是只会单向减少的属性,并且直接决定了这个文明单位“还能打多久”。因为如果星球遭到入侵,可以采用短期增加人口的方法来抵御。由于游戏是回合制,这个“短期”不可能无限短。所以增加人口防御的代价就是资源会快速消耗一大截。而且对方科技比己方高出越多,己方需要短期增加的人口就越大,资源消耗也就越多。这就很像传统游戏中被“打掉了血”。而舰队虽然可能“战斗力上升”,但是人口只可能减少,而且“上升”的条件是p1>2p2,这就表明了只有人口很多的舰队才可能“战斗力上升”,“残血”的舰队是不可能通过这个方法增加战斗力的。
再来讨论一下星球的资源。资源理论上也可以通过舰队补给,但是一个文明的总资源——无论怎么调配——都是恒定的。要增加资源,只有占领其他星球一条路。然而再考虑整个宇宙,那么资源的总量就一定了。黑暗森林公理。

楼主 Andy18650  发布于 2019-06-02 10:45:00 +0800 CST  
紧急通知:Bug report:
楼主在查代码时发现虽然endofline版本服务器加入了客户端断线重连的机制,但是!客户端并没有相应的代码支持!所以。。。

楼主 Andy18650  发布于 2019-06-02 11:25:00 +0800 CST  
要不求游戏的邮箱统一发50楼吧,这样方便自动接收更新。

楼主 Andy18650  发布于 2019-06-02 11:26:00 +0800 CST  
@仞兰为佩你的邮箱不存在是怎么回事?

楼主 Andy18650  发布于 2019-06-02 11:41:00 +0800 CST  
收到程序的几位吧友,如果有运行上的问题,欢迎在本楼提出,楼主会耐心解答

楼主 Andy18650  发布于 2019-06-02 11:43:00 +0800 CST  
进度汇报:
[核心算法优化] 这是一个迟到的汇报。由于星球和舰队搜索敌人的方法是一样的,所以整合进父类的方法里面去。这样的好处是代码简洁,方便维护,坏处是原来一支舰队遍历两次所有文明单位,现在要遍历四次。不过根据原来的测试,在10000舰队(每轮一亿次)的时候,我家的古董i7-2600还能每2秒一轮。而且就是这个更新导致了无论星球还是舰队发现了对方,系统都会说“Planet”,因为这个方法实际上是从Planet的复制过去的。现在的Planet都没有覆写这个方法,直接用父类的方法,只有舰队会再遍历一次寻找星球和舰队进行进攻。

楼主 Andy18650  发布于 2019-06-02 15:11:00 +0800 CST  
Bug report:
目前第九版还不要客户端exit,否则服务器会炸。。。


满屏的错误,惨痛的教训:异常并不是越早catch越好。。。

楼主 Andy18650  发布于 2019-06-02 15:55:00 +0800 CST  
进度报告:
[网络交互优化] 修复客户端断开服务器会鬼畜的Bug。

楼主 Andy18650  发布于 2019-06-02 16:07:00 +0800 CST  
@仞兰为佩您的邮箱不存在,已从50楼删除

楼主 Andy18650  发布于 2019-06-03 21:23:00 +0800 CST  
第十版Delicious(真香)上线!
本质上第十版就是一个紧急修复Bug的第九版,游戏规则上没有什么更新。由于我上次说“下一版抛弃控制台”并雄赳赳气昂昂地把名称设为EndOfLine,结果这次。。。所以真香。。。

楼主 Andy18650  发布于 2019-06-03 21:26:00 +0800 CST  


Debug截图,可以看见Bug被修复(断线重连没有表现出来)

楼主 Andy18650  发布于 2019-06-03 21:27:00 +0800 CST  

图形界面最新进展,已经可以绘制简单图形

楼主 Andy18650  发布于 2019-06-03 21:31:00 +0800 CST  

楼主:Andy18650

字数:13774

发表时间:2019-05-27 19:39:00 +0800 CST

更新时间:2019-07-08 18:34:45 +0800 CST

评论数:253条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看