Skip to content

jiedo/slingo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

投石车

使用golang实现的投石车AI对战平台。

sling catapult trebuchet

战场环境

多AI对战,3D战场,地面有起伏,地面摩擦系数有变化。

有固定重力加速度,有空气阻力,风向和风力有变化。

战车结构

战车有左右2个动力轮,可独立施加一个正向或反向力,使其正向反向转动,从而控制车体前进、后退和转向。

炮台的方向独立于战车方向控制,当车转向时炮台相对于地面不转动。炮台可转动和调整仰角,不可以水平升降。

炮弹通过纯机械装置发射,方向和速度可控,经过抛物线轨道靠动能物理打击目标。

战车上炮弹装载空间和重量有限。地面上完好的弹药可拾起利用。车上已有的弹药也可以丢下。

炮弹

炮弹为实心球状,分石弹和铅弹,铅弹和石弹占用不同空间和重量(混合装载时如何堆放更省空间?)。

炮弹破坏力通过动能计算,相同弹道的铅弹动能(当然)更大。

炮弹可躲避,可被拦截。 石弹拦截石弹后两个石弹都粉碎。 两铅弹拦截后弹性碰撞变换轨道,落下砸中战车依然具有破坏性。 铅弹可击碎石弹,击碎后的碎片无伤害,铅弹动能减弱,轨道改变。

掉落空地的石弹和铅弹完好。 砸中战车的石弹和铅弹完好。 砸中散落的弹药时,石弹都破碎,铅弹完好。

能量消耗

战车控制车轮转动、抬动或转动炮台瞄准、发射炮弹 都需要消耗一定能量。

初始时战车有一定能量储备,能量会慢慢收集增加,直到达到一个上限值。

战车重量为战车自身重量加弹药重量,重量大惯性大,将影响运动速度。

实现

分Server端和Client端。client通过独立channel向server通信,发送控制命令和应答channel。server端通过应答channel返回命令结果。

Server收到命令后将命令拆解成指令,并送入此client的指令channel。耗时更多的命令会被拆解成多条指令。

Server每一周期按随机顺序执行每个客户端的一条指令。当一个命令的最后一条指令执行完毕,server将向应答channel写入命令结果。

前期将client实现成一个模块,编译进server。server启动时接入所有client,每个client在独立的goroutine中运行。后期可将命令channel接入部分封装出来,提供mq接口或者api接口,client可以实现动态接入。

TODO:

如何精细控制运动?当需要不停调整转轮力度时候,频繁调用命令是否可行?

unit test

About

A catapult AI platform implement in golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages