首先说一下,自己有需要想自己去玩的尽管用,就是得承认是我写的就可以了。我一般写了的代码都会开放原码,希望能够得到更好的指点。
我编写这段java代码的环境是eclipse,在这个环境下是可以执行的。
内容实际上比较简单,可以总结为,输入一些变量,通过我指定的算法得出结果。
我所选的案例是一款名为 弹弹堂3 (七道)的游戏,我将我所研究的高抛法作为核心算法,通过:用户输入的屏距和 风力最后得出 应该使用的 角度和 力度。
Main.java
class Main
{
public static void main(String args[])
{
new WindowTool();
}
}
WindowTool.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
class WindowTool extends JFrame
{
JLabel distanceV = new JLabel("屏距");
JTextField distance = new JTextField("0");
JLabel windV = new JLabel("风力");
JTextField wind = new JTextField("0");
JButton winds = new JButton("顺风力");
JButton windn = new JButton("逆风力");
JLabel result = new JLabel("Java Applicantion of Harry_Zhong");
public WindowTool()
{
setLayout( new FlowLayout());
getContentPane().add(distanceV);
getContentPane().add(distance);
getContentPane().add(windV);
getContentPane().add(wind);
getContentPane().add(winds);
getContentPane().add(windn);
getContentPane().add(result);
winds.addActionListener(new JAHC_01(distance,result,wind) );
windn.addActionListener(new JAHC_02(distance,result,wind) );
setSize(600,100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
}
JAHC_01.java
import java.awt.event.*;
import javax.swing.JLabel;
import javax.swing.JTextField;
class JAHC_01 implements ActionListener
{
JTextField distance = new JTextField();
JLabel result = new JLabel();
JTextField wind = new JTextField();
public JAHC_01(JTextField distance, JLabel result,JTextField wind)
{
this.distance=distance;
this.result=result;
this.wind=wind;
}
public void actionPerformed(ActionEvent e)
{
String s = distance.getText();
double d = Double.parseDouble(s);
String t = wind.getText();
double w = Double.parseDouble(t);
int d1=(int)d;
int w1=(int)w;
double a = 90-d1+2*w1;
double p = 95+(d%1)*5-((2*w)%1*5);
//判别是否进一估计
if(((2*w)%1)>=0.3)
{
a+=1;
p+=5;
}
if((d%1)>=0.6)
{
a-=1;
p-=5;
}
//确保有效力度
while(p<=90)
{
p+=5;
a+=1;
}
while(p>=100)
{
p-=5;
a-=1;
}
result.setText("角度:" + a + " 力度:" + p);
}
}
JAHC_02.java
import java.awt.event.*;
import javax.swing.JLabel;
import javax.swing.JTextField;
class JAHC_02 implements ActionListener
{
JTextField distance = new JTextField();
JLabel result = new JLabel();
JTextField wind = new JTextField();
public JAHC_02(JTextField distance, JLabel result,JTextField wind)
{
this.distance=distance;
this.result=result;
this.wind=wind;
}
public void actionPerformed(ActionEvent e)
{
String s = distance.getText();
double d = Double.parseDouble(s);
String t = wind.getText();
double w = Double.parseDouble(t);
int d1=(int)d;
int w1=(int)w;
double a = 90-d1-2*w1;
double p = 95-(d%1)*5+((2*w)%1*5);
//判别是否进一估计
if((d%1)>=0.6)
{
a-=1;
p-=5;
}
if(d-(d*10)/10>0.5)
{
a+=1;
p+=5;
}
//确保有效力度
while(p<=90)
{
p+=5;
a+=1;
}
while(p>=100)
{
p-=5;
a-=1;
}
result.setText("角度:" + a + " 力度:" + p);
}
}
以上即为的拙作,我所找的帮我测试的人反映的结果与预期是一样的,我目前所使用的算法在实战测试中不能应对高差(没有考虑y轴的变化),所以有类似建议的可以不用再提啦,
但是也有好的地方,看过代码的人应该注意到我的那几个变量是double类型的,因为我的算法最高精度是0.2屏距,而弹弹堂游戏自身提供的算法精度是1屏距,无法处理非整数情况,我
的这个可以进一步解决这个问题。
看完以后又想说的尽管说,我以后需要对它进行改进,不管是什么方面的我可以,我的e-mail:20070641@163.com QQ:739375514 (注意qq邮箱基本不用来干正事的,一般用163)
需要源文件的可以通过这两种方式找我(写明备注,不写的我一般会默认诈骗),我会发送一个名为 JAH的压缩包 内含 4个.java文件 (JAH:Java Application of Harry_Zhong)
写完了...