【直播】我要做一个玩游戏自动机

ready方法调用了GameControl.revise(selfInfo);
我目前还不能识别出距离以及计算力度角度,
写死了45度 50力度。
先看看能不能跑一个流程再说




楼主 dtph007  发布于 2015-08-02 18:09:00 +0800 CST  
GameControl的当前代码:
public class GameControl {
static Robot robot;




static {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}


public static void revise(SelfInfo selfInfo) {
int count = selfInfo.getAngle() - 45;
if (count > 0) {
//up count次
while (count-- > 0) {
robot.keyPress(KeyEvent.VK_UP);
robot.keyRelease(KeyEvent.VK_UP);
}
} else {
//down count次
while (count++ < 0) {
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
}
}
selfInfo.setAngle(45);
selfInfo.setPower(50);
}


public static void keyPressSpace(){
robot.keyPress(KeyEvent.VK_SPACE);
}


public static void keyReleaseSpace(){
robot.keyRelease(KeyEvent.VK_SPACE);
}
}

楼主 dtph007  发布于 2015-08-02 18:11:00 +0800 CST  
现在跑完了一个流程。。。
不过角度貌似识别的不对。
READY 之前:READY
角度:18
PRE_SHOOT 之前:READY
fromReadyToPreShootOnPreShoot
之后状态:PRE_SHOOT
SHOOT 之前:PRE_SHOOT
fromPreShootToShootingOnShoot
之后状态:SHOOTING
SHOOT_DONE 之前:SHOOTING
fromShootingToSufShootOnShootDone
之后状态:SUF_SHOOT
之后状态:READY
角度:-4
SelfInfo{angle=-4, power=null, width=null, height=null}
0
READY 之前:READY
角度:-4
PRE_SHOOT 之前:READY
fromReadyToPreShootOnPreShoot
之后状态:PRE_SHOOT
SHOOT 之前:PRE_SHOOT
fromPreShootToShootingOnShoot
之后状态:SHOOTING
SHOOT_DONE 之前:SHOOTING
fromShootingToSufShootOnShootDone
之后状态:SUF_SHOOT
之后状态:READY
角度:-10
SelfInfo{angle=-10, power=null, width=null, height=null}
60
READY 之前:READY
角度:-10
PRE_SHOOT 之前:READY
fromReadyToPreShootOnPreShoot
之后状态:PRE_SHOOT
SHOOT 之前:PRE_SHOOT
fromPreShootToShootingOnShoot
之后状态:SHOOTING
SHOOT_DONE 之前:SHOOTING
fromShootingToSufShootOnShootDone
之后状态:SUF_SHOOT
之后状态:READY
角度:-10
SelfInfo{angle=-10, power=null, width=null, height=null}
60
READY 之前:READY
角度:-10
PRE_SHOOT 之前:READY
fromReadyToPreShootOnPreShoot
之后状态:PRE_SHOOT
SHOOT 之前:PRE_SHOOT
fromPreShootToShootingOnShoot
之后状态:SHOOTING

楼主 dtph007  发布于 2015-08-02 18:26:00 +0800 CST  
现在识别角度 2位数角度 非负数没问题了。
写死了一个45度,30多力,
竟然TMD打死了5级的菜鸟。

楼主 dtph007  发布于 2015-08-02 21:30:00 +0800 CST  
下一步是计算距离。
识别左右方向。
识别负数、1位数、3位数

楼主 dtph007  发布于 2015-08-02 21:30:00 +0800 CST  
github地址https://github.com/gaboolic/auto-machine

楼主 dtph007  发布于 2015-08-03 15:16:00 +0800 CST  
先求个精啊


@神宫寺铃香@SYQSYQQQ@windsun_ul

楼主 dtph007  发布于 2015-08-03 18:37:00 +0800 CST  
这周将实现距离的判定,左右的判断。
距离能计算的话,我就可以给机器人出公式了

楼主 dtph007  发布于 2015-08-06 06:23:00 +0800 CST  
现在距离应该是能算出来了,不过还没测。


但是计算……这个公式我TMD忘了,不会算了。
水平距离S = Vx * t
垂直距离怎么算来着。。。

楼主 dtph007  发布于 2015-08-07 21:49:00 +0800 CST  
水平距离S = Vx * t ,S 已知
竖直距离H = 1/2(Vy * t1 - Vy * g * t1)
t = 2 * t0 + t1
Vy = g * t0


应该能推导出来吧

楼主 dtph007  发布于 2015-08-07 22:00:00 +0800 CST  
我好牛逼,我算出来了。
不知道算的对不对,不管了。
去测试一把。


double radian = selfInfo.getAngle() * 2 * Math.PI / 360;
double tan = Math.tan(radian);
double up = distanceInfo.getWidth() * (1 - WorldInfo.getGravity()) * tan - 2 * distanceInfo.getHeight();
double down = (2 / WorldInfo.getGravity() - 2) * tan * tan;
double v = Math.sqrt(up / down * (1 + tan * tan));

楼主 dtph007  发布于 2015-08-07 22:34:00 +0800 CST  



楼主 dtph007  发布于 2015-08-07 22:35:00 +0800 CST  
费了5页纸算出来了,用最下面的公式计算。

楼主 dtph007  发布于 2015-08-07 22:37:00 +0800 CST  
昨天好像算错了。

楼主 dtph007  发布于 2015-08-08 13:31:00 +0800 CST  
算出来应该是这个


楼主 dtph007  发布于 2015-08-08 13:32:00 +0800 CST  
这个公式当H=0时,会退化成一个水平面上的情况,
公式变为Vx = 根号(S* g / 2tan(a) )


和按水平面直接计算的公式得到的结果相同,
S = Vx * t
Vy = g * 1/2t
Vy = tan(a) * Vx
也得到Vx = 根号(S* g / 2tan(a) )
所以我觉得这次计算的是对的

楼主 dtph007  发布于 2015-08-08 13:35:00 +0800 CST  
刚才用新公式打了一下,打的还不是太准,不过已经打死了一个悲剧的10级小菜。
READY高度105
宽度255
角度:15
速度44.02430361971539
revise
DistanceInfo{width=95, height=1, red=Point{h=72, w=87}, blue=Point{h=73, w=182}}
SelfInfo{angle=15, power=44, leftOrRight=null}
PRE_SHOOTfromReadyToPreShootOnPreShoot
SHOOTfromPreShootToShootingOnShoot
SHOOT_DONEfromShootingToSufShootOnShootDone
READY角度:23
速度36.24277795351789
revise
DistanceInfo{width=94, height=1, red=Point{h=75, w=87}, blue=Point{h=76, w=181}}
SelfInfo{angle=23, power=36, leftOrRight=null}
PRE_SHOOTfromReadyToPreShootOnPreShoot
SHOOTfromPreShootToShootingOnShoot
SHOOT_DONEfromShootingToSufShootOnShootDone
READY角度:38
速度27.915201295606305
revise
DistanceInfo{width=65, height=8, red=Point{h=75, w=87}, blue=Point{h=83, w=152}}
SelfInfo{angle=38, power=27, leftOrRight=null}
PRE_SHOOTfromReadyToPreShootOnPreShoot
SHOOTfromPreShootToShootingOnShoot
SHOOT_DONEfromShootingToSufShootOnShootDone

楼主 dtph007  发布于 2015-08-08 13:45:00 +0800 CST  
刚刚把距离公式修改了。
重力加速度我人工取了几个值。
现在打的有点准了,消灭了好几个菜鸡了

楼主 dtph007  发布于 2015-08-08 15:49:00 +0800 CST  
刚用一个4级小号玩和4级菜鸡打一直赢,没意思了。
换我16级大号去和人玩玩,看还能不能打的过

楼主 dtph007  发布于 2015-08-08 16:16:00 +0800 CST  
这个公式是下面5个公式推导出来的:
S = Vx * t
H = Vy*t1 + 1/2 * g * t1*t1
t = 2*t0 + t1
Vy = tan(a) * Vx
Vy = g * t0


待求的是V,就是Vx / cos(a),也等于根号(Vx*Vx + Vy*Vy)
其中S是两个玩家的水平距离,H是竖直距离
Vy是大炮分解到y轴的速度,Vx是分解到x轴的速度
g是重力加速度
t是开炮到落地总时间
t0是从开炮到最高点的时间
t1是炮弹落到水平线开始,击中敌人结束的时间

楼主 dtph007  发布于 2015-08-08 22:06:00 +0800 CST  

楼主:dtph007

字数:6969

发表时间:2015-07-31 05:32:00 +0800 CST

更新时间:2017-10-17 09:52:12 +0800 CST

评论数:603条评论

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

 

热门帖子

随机列表

大家在看