<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=Smoke%2FCode</id>
	<title>Smoke/Code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=Smoke%2FCode"/>
	<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Smoke/Code&amp;action=history"/>
	<updated>2026-05-02T14:06:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=17188&amp;oldid=prev</id>
		<title>Nat: Undo revision 17187 by Mastermind949 (Talk) Reverting vandalism, account blocking request</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=17188&amp;oldid=prev"/>
		<updated>2010-07-25T16:28:52Z</updated>

		<summary type="html">&lt;p&gt;Undo revision 17187 by &lt;a href=&quot;/wiki/Special:Contributions/Mastermind949&quot; title=&quot;Special:Contributions/Mastermind949&quot;&gt;Mastermind949&lt;/a&gt; (&lt;a href=&quot;/w/index.php?title=User_talk:Mastermind949&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Mastermind949 (page does not exist)&quot;&gt;Talk&lt;/a&gt;) Reverting vandalism, account blocking request&lt;/p&gt;
&lt;a href=&quot;http://robowiki.net/w/index.php?title=Smoke/Code&amp;amp;diff=17188&amp;amp;oldid=17187&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Nat</name></author>
		
	</entry>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=17187&amp;oldid=prev</id>
		<title>Mastermind949: Blanked the page</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=17187&amp;oldid=prev"/>
		<updated>2010-07-25T15:43:16Z</updated>

		<summary type="html">&lt;p&gt;Blanked the page&lt;/p&gt;
&lt;a href=&quot;http://robowiki.net/w/index.php?title=Smoke/Code&amp;amp;diff=17187&amp;amp;oldid=16808&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Mastermind949</name></author>
		
	</entry>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=16808&amp;oldid=prev</id>
		<title>RednaxelaBot: Using &lt;syntaxhighlight&gt;.</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=16808&amp;oldid=prev"/>
		<updated>2010-07-01T08:31:33Z</updated>

		<summary type="html">&lt;p&gt;Using &amp;lt;syntaxhighlight&amp;gt;.&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:31, 1 July 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l6&quot; &gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package cx.micro;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package cx.micro;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import java.awt.geom.Point2D;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import java.awt.geom.Point2D;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l243&quot; &gt;Line 243:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 243:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Source Code]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Source Code]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff::1.12:old-10398:rev-16808 --&gt;
&lt;/table&gt;</summary>
		<author><name>RednaxelaBot</name></author>
		
	</entry>
	<entry>
		<id>http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=10398&amp;oldid=prev</id>
		<title>Voidious: migrating from old wiki</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=Smoke/Code&amp;diff=10398&amp;oldid=prev"/>
		<updated>2009-08-13T18:26:25Z</updated>

		<summary type="html">&lt;p&gt;migrating from old wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Navbox small&lt;br /&gt;
| title        = Smoke Sub-pages&lt;br /&gt;
| parent       = Smoke&lt;br /&gt;
| page1        = Version History&lt;br /&gt;
| page2        = Code&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package cx.micro;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
import robocode.AdvancedRobot;&lt;br /&gt;
import robocode.Condition;&lt;br /&gt;
import robocode.DeathEvent;&lt;br /&gt;
import robocode.ScannedRobotEvent;&lt;br /&gt;
import robocode.util.Utils;&lt;br /&gt;
/**&lt;br /&gt;
 *-----------------------------------------------------------------&lt;br /&gt;
 * @author:iiley (iiley@hotmail.com)&lt;br /&gt;
 * http://www.robochina.org&lt;br /&gt;
 * Smoke:use MicroWave to do pattern analyzer and random movement&lt;br /&gt;
 *--------------------version 0.5 2003.1.5--------------&lt;br /&gt;
 * 0.5:Can only fire 3 power because MicroWave,so may west much power.(codesize 737)&lt;br /&gt;
 *--------------------version 0.55 2003.1.5--------------               &lt;br /&gt;
 * 0.55:improved movement a little.(codesize 749)&lt;br /&gt;
 *--------------------version 0.60 2003.1.8--------------&lt;br /&gt;
 * 0.60:changed a movement.it does better.(codesize 748)&lt;br /&gt;
 *--------------------version 0.70 2003.1.25-------------&lt;br /&gt;
 * 0.70:changed a movement similar to the new verion of Cigaret. (codesize 742)&lt;br /&gt;
 *--------------------version 0.80 2003.2.3-------------&lt;br /&gt;
 * 0.80:Squeezed much(MicroWave squeezed too) so added some in aim. (codesize 749)&lt;br /&gt;
 *--------------------version 0.82 2003.2.5-------------&lt;br /&gt;
 * 0.82:Squeezed again,added a judge to aim prediction points only in battle feild.&lt;br /&gt;
 *      and can set one color now(but have not set).(codesize 740)&lt;br /&gt;
  *--------------------version 0.91 2003.7.12-------------&lt;br /&gt;
 * 0.91:Squeezed again,tweaked movement as experience from Spark.(codesize 742)&lt;br /&gt;
  *--------------------version 0.95 2003.9.12-------------&lt;br /&gt;
 * 0.95:Squeezed again,can fire different power bullet and can fight in different battle fileds now.(codesize 748)&lt;br /&gt;
  *--------------------version 0.96 2004.10.24-------------&lt;br /&gt;
 * 0.96:Squeezed again,then add a trick to HOT bot, tweaked a little.(codesize 748)&lt;br /&gt;
 *-------------------------------------------------------&lt;br /&gt;
 * future:Squeeze so that i can do more and get my whole colors back.&lt;br /&gt;
 */&lt;br /&gt;
public class Smoke extends AdvancedRobot {&lt;br /&gt;
	&lt;br /&gt;
	private static final double BATTLE_WIDTH = 800;&lt;br /&gt;
	private static final double BATTLE_HEIGHT = 600;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * my usual fire power&lt;br /&gt;
	 */&lt;br /&gt;
	private static final double POWER = 3d;&lt;br /&gt;
	private static final double BULLET_VELOCITY = 20d - 3d * POWER;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * ESCPAE_ANGLE should be Math.asin(8/(enemy_bullet_velocity))*2; if enemy&lt;br /&gt;
	 * fire 3 power bullet, it should be 1.6286798842530508 but here i use 1.5&lt;br /&gt;
	 */&lt;br /&gt;
	private static final double ESCPAE_ANGLE = 1.5;&lt;br /&gt;
&lt;br /&gt;
	private static ArrayList waves = new ArrayList();&lt;br /&gt;
	&lt;br /&gt;
	private static double enemyEnergy;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * a trick to HOT, first it be 0, see the movement, it just move + dirction&lt;br /&gt;
	 * It is not very useful i am thinking to remove it next version&lt;br /&gt;
	 */&lt;br /&gt;
	private static double HOT_Trick;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * enemy's current position&lt;br /&gt;
	 */&lt;br /&gt;
	private static Point2D.Double enemyPosition;&lt;br /&gt;
&lt;br /&gt;
	public void run() {&lt;br /&gt;
&lt;br /&gt;
		setAdjustGunForRobotTurn(true);&lt;br /&gt;
		setAdjustRadarForGunTurn(true);&lt;br /&gt;
&lt;br /&gt;
		do {&lt;br /&gt;
			turnRadarRightRadians(1);&lt;br /&gt;
		} while (true);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * when i am dead, i think enemy is not a HOT bot, so i will only move one&lt;br /&gt;
	 * direction&lt;br /&gt;
	 */&lt;br /&gt;
	public void onDeath(DeathEvent event) {&lt;br /&gt;
		HOT_Trick = ESCPAE_ANGLE / 2;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// -------------------- function for event handle ---------------&lt;br /&gt;
	public void onScannedRobot(ScannedRobotEvent e) {&lt;br /&gt;
		double absBearing;&lt;br /&gt;
		double distanceToEnemy;&lt;br /&gt;
		double moveDistance;&lt;br /&gt;
		double moveAngle;&lt;br /&gt;
		Point2D.Double myPosition;&lt;br /&gt;
&lt;br /&gt;
		enemyPosition = nextPoint(myPosition = new Point2D.Double(getX(),&lt;br /&gt;
				getY()), absBearing = e.getBearingRadians()&lt;br /&gt;
				+ getHeadingRadians(), moveDistance = distanceToEnemy = e&lt;br /&gt;
				.getDistance());&lt;br /&gt;
		// Radar turn grabed from David Alves.&lt;br /&gt;
		setTurnRadarRightRadians(Math&lt;br /&gt;
				.sin(absBearing - getRadarHeadingRadians()));&lt;br /&gt;
&lt;br /&gt;
		//fire&lt;br /&gt;
		double power = Math.min(POWER, enemyEnergy / 5d);&lt;br /&gt;
		if (getEnergy() &amp;gt; power)&lt;br /&gt;
			setFire(power);&lt;br /&gt;
&lt;br /&gt;
		//--------------movement---------------------&lt;br /&gt;
&lt;br /&gt;
		//if enemy fired, and my last move will finish, start a new move&lt;br /&gt;
		if (enemyEnergy != (enemyEnergy = e.getEnergy())&lt;br /&gt;
				&amp;amp;&amp;amp; Math.abs(getDistanceRemaining()) &amp;lt; 53d) {&lt;br /&gt;
			Point2D.Double destination;&lt;br /&gt;
&lt;br /&gt;
			//random find a destination, random for the hit angle&lt;br /&gt;
			while (distanceToWall(destination = nextPoint(enemyPosition,&lt;br /&gt;
					absBearing&lt;br /&gt;
							+ (moveAngle = Math.random() * ESCPAE_ANGLE&lt;br /&gt;
									- HOT_Trick), -(moveDistance -= 10d)&lt;br /&gt;
							/ Math.cos(moveAngle))) &amp;lt; 24d);&lt;br /&gt;
			//thanks to David Alves and Dummy for this small code to find which&lt;br /&gt;
			// direction is shortest to our next destination&lt;br /&gt;
			//Thanx DrLoco of this usage&lt;br /&gt;
			//set move to the destination&lt;br /&gt;
			setAhead(((moveAngle = Utils.normalRelativeAngle(getAngle(&lt;br /&gt;
					destination, myPosition)&lt;br /&gt;
					- getHeadingRadians())) == (moveDistance = Math.atan(Math&lt;br /&gt;
					.tan(moveAngle))) ? 1 : -1)&lt;br /&gt;
					* myPosition.distance(destination)); //move towards point&lt;br /&gt;
			setTurnRightRadians(moveDistance);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//-----------------pattern analyser--------------------&lt;br /&gt;
		int size;&lt;br /&gt;
		size = waves.size();&lt;br /&gt;
&lt;br /&gt;
		MicroWave wave;&lt;br /&gt;
		waves.add(wave = new MicroWave());&lt;br /&gt;
		wave.absBearing = moveDistance = absBearing;&lt;br /&gt;
		&lt;br /&gt;
		//patterns into compareValue, compareValue.x be the distance,&lt;br /&gt;
		// compareValue.y be the lateralVelocity&lt;br /&gt;
		wave.compareValue = new Point2D.Double(distanceToEnemy / 64d, e&lt;br /&gt;
				.getVelocity()&lt;br /&gt;
				* Math.sin(e.getHeadingRadians() - absBearing));&lt;br /&gt;
		wave.startPosition = myPosition;&lt;br /&gt;
&lt;br /&gt;
		addCustomEvent(wave);&lt;br /&gt;
&lt;br /&gt;
		if (getGunHeat() &amp;lt; 0.4d) {&lt;br /&gt;
			//pattern analyser, find the most matching pattern&lt;br /&gt;
			//seach rang is from 4500 before to current&lt;br /&gt;
			for (int i = Math.max(71, size - 4500); i &amp;lt; size; i++) {&lt;br /&gt;
				//is a hitted wave&lt;br /&gt;
				if ((wave = (MicroWave) waves.get(i)).startPosition.x &amp;lt; 10) {&lt;br /&gt;
					int j = 0;&lt;br /&gt;
					double div = 0;&lt;br /&gt;
					double comVal = 0;&lt;br /&gt;
					//compare 10 waves step 7.&lt;br /&gt;
					do {&lt;br /&gt;
						comVal += ((MicroWave) waves.get(size - j)).compareValue&lt;br /&gt;
								.distanceSq(((MicroWave) waves.get(i - j)).compareValue)&lt;br /&gt;
								/ (div = div * 2 + 1);&lt;br /&gt;
					} while ((j += 7) &amp;lt; 71);&lt;br /&gt;
&lt;br /&gt;
					//find the most matched wave,distanceToEnemy is matchValue now&lt;br /&gt;
					if (comVal &amp;lt;= distanceToEnemy &lt;br /&gt;
							&amp;amp;&amp;amp; distanceToWall(nextPoint(&lt;br /&gt;
									myPosition,&lt;br /&gt;
									moveAngle = absBearing&lt;br /&gt;
											+ Math.asin(Math.sin(wave.startPosition.x) / ((20d - power * 3d) / BULLET_VELOCITY)),&lt;br /&gt;
									wave.startPosition.y)) &amp;gt; 17) {&lt;br /&gt;
						//record the hit angle&lt;br /&gt;
						//moveDistance is shoot bearing now,distanceToEnemy is matchValue now&lt;br /&gt;
						moveDistance = moveAngle;&lt;br /&gt;
						distanceToEnemy = comVal;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		//turn gun&lt;br /&gt;
		setTurnGunLeftRadians(Utils.normalRelativeAngle(getGunHeadingRadians()&lt;br /&gt;
				- moveDistance));&lt;br /&gt;
&lt;br /&gt;
		scan();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * return the next point from originPoint's certain angle certan distance&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Double nextPoint(Point2D.Double originPoint, double angle, double distance) {&lt;br /&gt;
		return new Point2D.Double(originPoint.x + Math.sin(angle) * distance,&lt;br /&gt;
				originPoint.y + Math.cos(angle) * distance);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * return the angle from p1 to p2&lt;br /&gt;
	 */&lt;br /&gt;
	public static double getAngle(Point2D.Double p2, Point2D.Double p1) {&lt;br /&gt;
		return Math.atan2(p2.x - p1.x, p2.y - p1.y);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static double distanceToWall(Point2D.Double p) {&lt;br /&gt;
		return Math.min(Math.min(p.x, BATTLE_WIDTH - p.x), Math.min(p.y, BATTLE_HEIGHT - p.y));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	class MicroWave extends Condition {&lt;br /&gt;
		//-------comparable varialbles&lt;br /&gt;
		Point2D.Double compareValue;&lt;br /&gt;
&lt;br /&gt;
		/**&lt;br /&gt;
		 * when wave started, this is the start position but after the wave hit&lt;br /&gt;
		 * enemy, this is the hit angle and hit distance&lt;br /&gt;
		 */&lt;br /&gt;
		Point2D.Double startPosition;&lt;br /&gt;
&lt;br /&gt;
		double absBearing;&lt;br /&gt;
&lt;br /&gt;
		double traveledDistance;&lt;br /&gt;
&lt;br /&gt;
		public boolean test() {&lt;br /&gt;
			traveledDistance += BULLET_VELOCITY;&lt;br /&gt;
&lt;br /&gt;
			//if the wave hit the enemy&lt;br /&gt;
			//when the wave hit enemy, record the angle and the distance into&lt;br /&gt;
			// startPosition&lt;br /&gt;
			if (traveledDistance &amp;gt; enemyPosition.distance(startPosition) - 18) {&lt;br /&gt;
				startPosition = new Point2D.Double(getAngle(enemyPosition, startPosition) - absBearing,&lt;br /&gt;
						traveledDistance);&lt;br /&gt;
				removeCustomEvent(this);&lt;br /&gt;
			}&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Source Code]]&lt;/div&gt;</summary>
		<author><name>Voidious</name></author>
		
	</entry>
</feed>