<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Silveira Neto &#187; Java Web Start</title>
	<atom:link href="http://silveiraneto.net/tag/java-web-start/feed/" rel="self" type="application/rss+xml" />
	<link>http://silveiraneto.net</link>
	<description></description>
	<lastBuildDate>Fri, 09 Mar 2012 04:13:27 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaFX, how to create a rpg like game</title>
		<link>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/</link>
		<comments>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 07:38:04 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[applet]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[jfx]]></category>
		<category><![CDATA[ogv]]></category>
		<category><![CDATA[openjfx]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=1861</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/" title="JavaFX, how to create a rpg like game"></a>JavaFX 1.0 is out and there are tons of new cool features, specially for game development.trans I&#8217;ll show in this tutorial how to create a very simple demo that shows how to load imtrages, handle sprites, collisions and keyboard events &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/" title="JavaFX, how to create a rpg like game"></a><p><a href="http://javafx.com">JavaFX 1.0</a> is out and there are tons of new cool features, specially for game development.trans</p>
<p>I&#8217;ll show in this tutorial how to create a very simple demo that shows how to load imtrages, handle sprites, collisions and keyboard events that you can use to create a game with a old school rpg like vision.</p>
<p>For the background scenario I&#8217;m using the house <a title="My Free Tileset version 2" href="http://silveiraneto.net/2008/08/31/my-free-tileset-version-2/">that I drew</a> and we&#8217;ll call as <strong>house.png</strong>.</p>
<p style="text-align: center;"><a title="Pixelart home" href="http://silveiraneto.net/wp-content/uploads/2008/08/silveira_neto_gpl_pixelart_kitchen_home1.png"><img class="size-full wp-image-1190 aligncenter" title="House pixelart free GPL" src="../wp-content/uploads/2008/08/silveira_neto_gpl_pixelart_kitchen_home1.png" alt="" width="416" height="384" /></a></p>
<p>That we load as a <a title="JavaFX API" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.image/javafx.scene.image.Image.html">Image</a> and place into a <a title="JavaFX API" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.image/javafx.scene.image.ImageView.html">ImageView</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">ImageView<span style="color: #009900;">&#123;</span>
   image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>For the character I&#8217;m using the last character I drew, <a title="The Nerdy Guy" href="http://silveiraneto.net/2008/12/07/nerdy-guy-my-free-charset-version-2/">the nerdy guy</a>.</p>
<p style="text-align: center;"><img class="size-full wp-image-1863 aligncenter" title="nerdyguy creative commons att share alike" src="../wp-content/uploads/2008/12/nerdyguy_from_silveiranetonet_creativecommons_att_share_alike.png" alt="" width="101" height="183" /></p>
<p>To make the animation easier, I spited it into 9 pieces:</p>
<p><strong>down0.png</strong>, <strong>down1.png</strong> and <strong>down2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/down0.png"><img class="alignnone size-full wp-image-1867" title="down0" src="http://silveiraneto.net/wp-content/uploads/2008/12/down0.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/down1.png"><img class="alignnone size-full wp-image-1868" title="down1" src="http://silveiraneto.net/wp-content/uploads/2008/12/down1.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/down2.png"><img class="alignnone size-full wp-image-1869" title="down2" src="http://silveiraneto.net/wp-content/uploads/2008/12/down2.png" alt="" width="30" height="39" /></a></p>
<p><strong>left0.png</strong>, <strong>left1.png</strong> and <strong>left2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/left0.png"><img class="alignnone size-full wp-image-1874" title="left0" src="http://silveiraneto.net/wp-content/uploads/2008/12/left0.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/left1.png"><img class="alignnone size-full wp-image-1875" title="left1" src="http://silveiraneto.net/wp-content/uploads/2008/12/left1.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/left2.png"><img class="alignnone size-full wp-image-1876" title="left2" src="http://silveiraneto.net/wp-content/uploads/2008/12/left2.png" alt="" width="30" height="39" /></a></p>
<p><strong>right0.png</strong>, <strong>right1.png</strong> and <strong>righ2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/right0.png"><img class="alignnone size-full wp-image-1872" title="right0" src="http://silveiraneto.net/wp-content/uploads/2008/12/right0.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/right1.png"><img class="alignnone size-full wp-image-1873" title="right1" src="http://silveiraneto.net/wp-content/uploads/2008/12/right1.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/right2.png"><img class="alignnone size-medium wp-image-1872" title="right2" src="http://silveiraneto.net/wp-content/uploads/2008/12/right2.png" alt="" width="30" height="40" /></a></p>
<p><strong>up0.png</strong>,<strong> up1.png </strong>and <strong>up2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/up0.png"><img class="alignnone size-full wp-image-1877" title="up0" src="http://silveiraneto.net/wp-content/uploads/2008/12/up0.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/up1.png"><img class="alignnone size-full wp-image-1878" title="up1" src="http://silveiraneto.net/wp-content/uploads/2008/12/up1.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/up2.png"><img class="alignnone size-full wp-image-1879" title="up2" src="http://silveiraneto.net/wp-content/uploads/2008/12/up2.png" alt="" width="30" height="40" /></a></p>
<blockquote><p><img class="alignnone size-full wp-image-1881" title="warning" src="http://silveiraneto.net/wp-content/uploads/2008/12/dialog-warning.png" alt="" width="16" height="16" /> All images I&#8217;m using should be in the same directory of source code.</p></blockquote>
<p>Let&#8217;s start loading the scenario and a single character sprite.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.stage.Stage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.Scene</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.*</span><span style="color: #339933;">;</span>
&nbsp;
Stage <span style="color: #009900;">&#123;</span>
   title<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RPG-like demo&quot;</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">424</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">412</span>
   visible<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
   scene<span style="color: #339933;">:</span> Scene<span style="color: #009900;">&#123;</span>
      content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
         ImageView<span style="color: #009900;">&#123;</span>
         image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>,
         ImageView<span style="color: #009900;">&#123;</span>
            x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">80</span>
            image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down1.png&quot;</span><span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#93;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Saved as Game.fx you can compile and run with in your terminal:</p>
<blockquote><p>$ javafxc Game.fx</p>
<p>$ javafx Game</p></blockquote>
<p style="text-align: center;"><a href="http://silveiraneto.net/wp-content/uploads/2008/12/screenshot1.png"><img class="size-full wp-image-1883 aligncenter" title="javafx rpg like game demo" src="http://silveiraneto.net/wp-content/uploads/2008/12/screenshot1.png" alt="" width="451" height="433" /></a></p>
<blockquote><p><img class="alignnone size-full wp-image-1881" title="warning" src="http://silveiraneto.net/wp-content/uploads/2008/12/dialog-warning.png" alt="" width="16" height="16" /> <strong>Hint:</strong> You can use <a title="JavaFX Downloads" href="http://javafx.com/downloads">NetBeans 6.5 JavaFX plugin</a> to easier the JavaFX development.</p></blockquote>
<p>To put animation on the character we load all sprites into four lists. Each list for each direction.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// sprites</span>
def up    <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}up{i}.png&quot;</span>    <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def right <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}right{i}.png&quot;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def down  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def left  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}left{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>And create vars to store the character position and frame of animation.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">var frame <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
var posx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">320</span><span style="color: #339933;">;</span>
var posy <span style="color: #339933;">=</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span></pre></div></div>

<p>Also store the house background.</p>
<pre>// house background
def house = ImageView{ image: Image {url: "{__DIR__}house.png"} };</pre>
<p>I create booleans to store some key states and at each interval of time I see how they are and do something about. You can handle keyboard event with less code but I like this way because keep visual and game logics a little bit more separated.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// keyboard</span>
var    upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// player</span>
var player <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span>
   x<span style="color: #339933;">:</span> bind posx y<span style="color: #339933;">:</span> bind posy
   image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down1.png&quot;</span><span style="color: #009900;">&#125;</span>
   onKeyPressed<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span><span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyPressed</span>
&nbsp;
   onKeyReleased<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span> <span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyReleased</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>See a video of the game working so far:</p>
<p style="text-align: center;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/Xv5z-9LGuOc&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Xv5z-9LGuOc&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Now we will add collisions. In a <a href="http://silveiraneto.net/2008/10/30/javafx-rectangular-collision-detection/">previous post</a> I showed some math behind bounding box game collisions. The good news are that you no longer need to worry about that. There are a lot of API improvements in JavaFX 1.0 that do all the hard work for you, specially the new classes on javafx.geometry package, <a href="http://java.sun.com/javafx/1/docs/api/javafx.geometry/javafx.geometry.Rectangle2D.html">Rectangle2D</a> and <a href="http://java.sun.com/javafx/1/docs/api/javafx.geometry/javafx.geometry.Point2D.html">Point2D</a>.</p>
<p>We create rectangles that represent the obstacles in the house.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// collidable obstacles</span>
def obstacles <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">414</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">384</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">255</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">170</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">257</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">295</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">60</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">327</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">23</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: center;"><img class="size-full wp-image-1887 aligncenter" title="bounding boxes" src="http://silveiraneto.net/wp-content/uploads/2008/12/boundingboxes.png" alt="" width="416" height="384" /></p>
<p>We just have to change a little bit the game logics in order to handle collisions.</p>
<p style="text-align: center;"><img class="size-full wp-image-1889 aligncenter" title="boudingbox" src="http://silveiraneto.net/wp-content/uploads/2008/12/boudingbox.png" alt="" width="200" height="260" /></p>
<p>We define a bounding box around the player, it&#8217;s a rectangle from (4, 25) at the player coordinates system and with width 19 and height 10. The idea is to prospect where the player will be in the next step, see if it&#8217;s bouding box don&#8217;t collide with any obstacle and so pass it to the real game position.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// game logics</span>
var gamelogics <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
   repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
   keyFrames<span style="color: #339933;">:</span> KeyFrame <span style="color: #009900;">&#123;</span>
      time <span style="color: #339933;">:</span> 1s<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>
      action<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         var nextposx <span style="color: #339933;">=</span> posx<span style="color: #339933;">;</span>
         var nextposy <span style="color: #339933;">=</span> posy<span style="color: #339933;">;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>downkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> down<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> up<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>rightkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> right<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>leftkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> left<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obst in obstacles<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obst.<span style="color: #006633;">boundsInLocal</span>.<span style="color: #006633;">intersects</span><span style="color: #009900;">&#40;</span>nextposx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span>, nextposy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span>, <span style="color: #cc66cc;">19</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
         posx <span style="color: #339933;">=</span> nextposx<span style="color: #339933;">;</span>
         posy <span style="color: #339933;">=</span> nextposy<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This is enough to do the trick but I also added a way to smoothly show the obstacles when pressing the space key.</p>
<p style="text-align: center;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/k-MHh6irvwE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/k-MHh6irvwE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Here is the complete source code.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">Game</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.stage.Stage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.input.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.paint.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.shape.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.animation.*</span><span style="color: #339933;">;</span>
&nbsp;
var frame <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
var posx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">320</span><span style="color: #339933;">;</span>
var posy <span style="color: #339933;">=</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// sprites</span>
def up    <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}up{i}.png&quot;</span>    <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def right <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}right{i}.png&quot;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def down  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def left  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}left{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// house background</span>
def house <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span> image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// keyboard</span>
var    upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// player</span>
var player <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span>
   x<span style="color: #339933;">:</span> bind posx y<span style="color: #339933;">:</span> bind posy image<span style="color: #339933;">:</span> down<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>
   onKeyPressed<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span><span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_SPACE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>fade<span style="color: #339933;">==</span><span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         	fadein.<span style="color: #006633;">playFromStart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>fade<span style="color: #339933;">==</span><span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				fadeout.<span style="color: #006633;">playFromStart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyPressed</span>
&nbsp;
   onKeyReleased<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span> <span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyReleased</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// collidable obstacles</span>
def obstacles <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">414</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">384</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">255</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">170</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">257</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">295</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">60</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">327</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">23</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// game logics</span>
var gamelogics <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
   repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
   keyFrames<span style="color: #339933;">:</span> KeyFrame <span style="color: #009900;">&#123;</span>
      time <span style="color: #339933;">:</span> 1s<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>
      action<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         var nextposx <span style="color: #339933;">=</span> posx<span style="color: #339933;">;</span>
         var nextposy <span style="color: #339933;">=</span> posy<span style="color: #339933;">;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>downkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> down<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> up<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>rightkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> right<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>leftkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> left<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obst in obstacles<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obst.<span style="color: #006633;">boundsInLocal</span>.<span style="color: #006633;">intersects</span><span style="color: #009900;">&#40;</span>nextposx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span>, nextposy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span>, <span style="color: #cc66cc;">19</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
         posx <span style="color: #339933;">=</span> nextposx<span style="color: #339933;">;</span>
         posy <span style="color: #339933;">=</span> nextposy<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
gamelogics.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// obstacles view</span>
var fade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
&nbsp;
var obstacleslayer <span style="color: #339933;">=</span> <span style="color: #003399;">Group</span> <span style="color: #009900;">&#123;</span>
   opacity<span style="color: #339933;">:</span> bind fade
   content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
      <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span><span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span><span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span><span style="color: #cc66cc;">500</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">500</span> fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span> <span style="color: #009900;">&#125;</span>,
      obstacles,
      <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span>
        x<span style="color: #339933;">:</span> bind posx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span> y<span style="color: #339933;">:</span> bind posy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">19</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">10</span>
        fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">LIME</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
var fadein <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
	keyFrames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
   	at <span style="color: #009900;">&#40;</span>0s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#125;</span>
   	at <span style="color: #009900;">&#40;</span>1s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
var fadeout <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
	keyFrames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
   	at <span style="color: #009900;">&#40;</span>0s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#125;</span>
   	at <span style="color: #009900;">&#40;</span>1s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// game stage</span>
Stage <span style="color: #009900;">&#123;</span>
	title<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RPG-like demo&quot;</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">424</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">412</span>
	visible<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
	scene<span style="color: #339933;">:</span> Scene<span style="color: #009900;">&#123;</span>
      fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span>
		content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>house, player, obstacleslayer<span style="color: #009900;">&#93;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Play Through Java Web Start<br />
</strong></p>
<p style="text-align: center;"><a title="Click to launch" href="http://silveiraneto.net/downloads/nerdy/dist/Nerdy.jnlp"><img class="size-full wp-image-1474 aligncenter" title="webstart" src="../wp-content/uploads/2008/10/webstart.png" alt="" width="88" height="23" /></a></p>
<p>or <a title="Applet Game" href="http://silveiraneto.net/downloads/nerdy/dist/Nerdy.html">click here to play via applet</a>, inside your browser.</p>
<p><small><strong>update: </strong>The applet version and Java Web Start versions should be working now.  The applet version on Linux seems to be having problems with the keyboard handling, use the Java Web Start version while I&#8217;m trying to fix it.</small></p>
<p><strong>Downloads:</strong></p>
<ul>
<li>Source, images and jars, <a title="Zipball with sources and images" href="http://silveiraneto.net/downloads/nerdy.zip">nerdy.zip</a></li>
<li><a title="Nerdy Game" href="http://silveiraneto.net/downloads/nerdy/">All content</a></li>
<li>First video, <a title="OGG Video" href="http://silveiraneto.net/downloads/javafx_nerdy_without_collision.ogv">javafx_nerdy_without_collision.ogv</a></li>
<li>Second video, <a title="OGG Video" href="http://silveiraneto.net/downloads/javafx_nerdy.ogv">javafx_nerdy.ogv</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>JavaFX, Defuse the Bomb</title>
		<link>http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/</link>
		<comments>http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 14:55:32 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[Bomb]]></category>
		<category><![CDATA[Collision]]></category>
		<category><![CDATA[defuse]]></category>
		<category><![CDATA[explosion]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JNLP]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[openjfx]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[sources]]></category>
		<category><![CDATA[webgame]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=1667</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/" title="JavaFX, Defuse the Bomb"></a>I continue to develop simple games demos to feel better the strengths and weakness of JavaFX for game development. Preview: Click to play via Java Web Start: There&#8217;s a little JavaFX game demo where you have to transport a bomb &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/" title="JavaFX, Defuse the Bomb"></a><p>I continue to develop simple games demos to feel better the strengths and weakness of JavaFX for game development.</p>
<p><strong>Preview:</strong></p>
<p><center><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/hR2LiKiBUgE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/hR2LiKiBUgE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></center></p>
<p><strong>Click to play via Java Web Start:</strong></p>
<p style="text-align: center;"><a title="Click to launch" href="http://silveiraneto.net/downloads/Defuse/dist/launch.jnlp"><img class="size-full wp-image-1474 aligncenter" title="webstart" src="../wp-content/uploads/2008/10/webstart.png" alt="" width="88" height="23" /></a></p>
<p>There&#8217;s a little JavaFX game demo where you have to transport a bomb to a defuse point without touching in the walls. I&#8217;m using the collision detection methods <a href="http://silveiraneto.net/2008/10/30/javafx-rectangular-collision-detection/">I described early in this post</a> to detect when the bomb hits a wall and then explode or when a bomb is inside the defuse point and the game ends. As it&#8217;s only a demo, it&#8217;s just one single level, but adding more levels would be easy.</p>
<p>Basically we have this four images:</p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/11/bomb.png"><img class="alignnone size-full wp-image-1684" title="bomb" src="http://silveiraneto.net/wp-content/uploads/2008/11/bomb.png" alt="" width="80" height="41" /><br />
bomb.png</a></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/11/goal.png"><img class="alignnone size-full wp-image-1686" title="goal" src="http://silveiraneto.net/wp-content/uploads/2008/11/goal.png" alt="" width="120" height="72" /><br />
goal.png</a></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/11/floor.png"><img class="alignnone size-thumbnail wp-image-1685" title="floor" src="http://silveiraneto.net/wp-content/uploads/2008/11/floor-150x150.png" alt="" width="150" height="150" /><br />
floor.png</a></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/11/wall.png"><img class="alignnone size-thumbnail wp-image-1687" title="wall" src="http://silveiraneto.net/wp-content/uploads/2008/11/wall-150x150.png" alt="" width="150" height="150" /><br />
wall.png</a></p>
<p>The code is petty simple. A little bit more than 300 lines with even with all comments and declarations. I transform the bomb image into a draggable node, create a list of collidable nodes and a especial node, the goal. I check the collisions when the bomb is dragged by mouse, if it hits something, it blows up.</p>
<p>I use extensively the TimeLine class from the animation framework (javafx.animation) to create chained animations and even to control some game logic.</p>
<p>As I focused in the simplicity, I don&#8217;t declared any classes to after instantiate their objects. I just was using common classes from JavaFX and putting logic on ir throught event and binding to external variables.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.application.Frame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.application.Stage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.animation.Timeline</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.animation.KeyFrame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.animation.Interpolator</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.ImageView</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.Image</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.Group</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.Node</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.paint.Color</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.geometry.Circle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.geometry.Rectangle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.geometry.Shape</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.text.Text</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.Font</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.FontStyle</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.input.MouseEvent</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Fade variable modified in some animations and used in the fadescreen */</span>
var fade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* The Bomb */</span>
var lock <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var tx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
var ty <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
var bomb<span style="color: #339933;">:</span>Node <span style="color: #339933;">=</span> <span style="color: #003399;">Group</span><span style="color: #009900;">&#123;</span>
    opacity<span style="color: #339933;">:</span> bind bombfade<span style="color: #339933;">;</span>
    content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        ImageView <span style="color: #009900;">&#123;</span>
            image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>
                url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}/bomb.png&quot;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>,
        Circle <span style="color: #009900;">&#123;</span>
            centerX<span style="color: #339933;">:</span> <span style="color: #cc66cc;">45</span>, centerY<span style="color: #339933;">:</span> <span style="color: #cc66cc;">21</span>, radius<span style="color: #339933;">:</span> <span style="color: #cc66cc;">7</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">LIME</span>
            opacity<span style="color: #339933;">:</span> bind led
        <span style="color: #009900;">&#125;</span>,
        Circle <span style="color: #009900;">&#123;</span>
            centerX<span style="color: #339933;">:</span> <span style="color: #cc66cc;">30</span>, centerY<span style="color: #339933;">:</span> <span style="color: #cc66cc;">30</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span>
            radius<span style="color: #339933;">:</span> bind fireradius
        <span style="color: #009900;">&#125;</span>,
    <span style="color: #009900;">&#93;</span>,
    var startX <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
    var startY <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
    translateX<span style="color: #339933;">:</span> bind tx
    translateY<span style="color: #339933;">:</span> bind ty
&nbsp;
    onMousePressed<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span> e<span style="color: #339933;">:</span> <span style="color: #003399;">MouseEvent</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">Void</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>lock<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
        startX <span style="color: #339933;">=</span> e.<span style="color: #006633;">getDragX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> tx<span style="color: #339933;">;</span>
        startY <span style="color: #339933;">=</span> e.<span style="color: #006633;">getDragY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> ty<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    onMouseDragged<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span><span style="color: #003399;">MouseEvent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">Void</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>lock<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
        tx <span style="color: #339933;">=</span> e.<span style="color: #006633;">getDragX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> startX<span style="color: #339933;">;</span>
        ty <span style="color: #339933;">=</span> e.<span style="color: #006633;">getDragY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> startY<span style="color: #339933;">;</span>
        checkcollissions<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Big rectangle that covers all the screen (bomb explosion or game end) */</span>
var fadescreen <span style="color: #339933;">=</span> <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span>
    x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">640</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">480</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span>
    opacity<span style="color: #339933;">:</span> bind fade
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* The wood floor image for the scenario. */</span>
var floor <span style="color: #339933;">=</span> ImageView <span style="color: #009900;">&#123;</span>
    image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>
        url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}/floor.png&quot;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* The goal image where the bomb should be placed. */</span>
var goal <span style="color: #339933;">=</span> ImageView <span style="color: #009900;">&#123;</span>
    x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">470</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">360</span>
    image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>
        url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}/goal.png&quot;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* List of obstacles nodes that the bomb can collide with. */</span>
var obstacles <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
    <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">120</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">100</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">300</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#125;</span>,
    <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">350</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">100</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">300</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#125;</span>,
    <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">370</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">50</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">50</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">50</span>, fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#125;</span>,
    <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span>
        x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span>, y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">120</span>, translateX<span style="color: #339933;">:</span> bind move, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">100</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">50</span>
        fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span>
    <span style="color: #009900;">&#125;</span>,
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Visible representations of obstacles */</span>
var wallimage <span style="color: #339933;">=</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>
    url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}/wall.png&quot;</span>
<span style="color: #009900;">&#125;</span>
var walls <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obs in obstacles<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    ImageView <span style="color: #009900;">&#123;</span>
        x<span style="color: #339933;">:</span> obs.<span style="color: #006633;">x</span>, y<span style="color: #339933;">:</span> obs.<span style="color: #006633;">y</span>, translateX<span style="color: #339933;">:</span> bind obs.<span style="color: #006633;">translateX</span>
        clip<span style="color: #339933;">:</span> obs, image<span style="color: #339933;">:</span> wallimage
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Animation for a blinking green led */</span>
var led <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
var bombclock <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
    repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
    autoReverse<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
    keyFrames <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 0s
            values <span style="color: #339933;">:</span> led <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span>
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 1s
            values <span style="color: #339933;">:</span> led <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Animation for the bomb explosion and game reset */</span>
var fireradius <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
var explosion<span style="color: #339933;">:</span>Timeline <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
    repeatCount<span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span>
    keyFrames <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 0s
            values <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                fireradius <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span>,
                fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 2s
            values <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                fireradius <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">200.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span>,
                fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span>
            <span style="color: #009900;">&#93;</span>
            action<span style="color: #339933;">:</span> gamereset
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 3s
            values<span style="color: #339933;">:</span> fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span>
        <span style="color: #009900;">&#125;</span>,
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Reset variables for initial values */</span>
function gamereset<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    lock <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    fireradius <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
    tx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
    ty <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
    bombfade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.0</span><span style="color: #339933;">;</span>
&nbsp;
    moveblock.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    specialcollison.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    bombclock.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Animation when the bomb reaches the goal. Bomb disapear. */</span>
var bombfade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1.0</span><span style="color: #339933;">;</span>
var bomdisapear <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
    repeatCount<span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span>
    keyFrames <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 1s
            values<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                        bombfade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span> tween Interpolator.<span style="color: #006633;">EASEBOTH</span>,
                        fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 2s
            values<span style="color: #339933;">:</span>
                    fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span><span style="color: #339933;">;</span>
            action<span style="color: #339933;">:</span> gamereset
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 3s
            values<span style="color: #339933;">:</span>
                    fade <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span> tween Interpolator.<span style="color: #006633;">LINEAR</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>,
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Animation for a moving block. */</span>
var move <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
var moveblock <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
    repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
    autoReverse<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
    keyFrames <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 0s
            values <span style="color: #339933;">:</span>
                    move <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0.0</span>
        <span style="color: #009900;">&#125;</span>,
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 3s
            values <span style="color: #339933;">:</span>
                    move <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">200.0</span> tween Interpolator.<span style="color: #006633;">EASEBOTH</span>
        <span style="color: #009900;">&#125;</span>,
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Check and handle possible collisions. */</span>
function checkcollissions<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #003399;">Void</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>checkobstacles<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        lock <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        specialcollison.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        moveblock.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        explosion.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>insidenode<span style="color: #009900;">&#40;</span>bomb,goal<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        lock <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        moveblock.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        bomdisapear.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* There was a bug, when the bomb is stopped, not been gragged, in front of
the moving block, it could pass through it because checkcollissions() was
only called on mouse moving. This make sure checking this special case. */</span>
var specialcollison<span style="color: #339933;">:</span>Timeline <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
    repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
    keyFrames <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        KeyFrame <span style="color: #009900;">&#123;</span>
            time <span style="color: #339933;">:</span> 1s<span style="color: #339933;">/</span><span style="color: #cc66cc;">5</span>
            action<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>hitnode<span style="color: #009900;">&#40;</span>obstacles<span style="color: #009900;">&#91;</span>sizeof obstacles<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>, bomb<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    lock <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
                    moveblock.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    explosion.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    specialcollison.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
* The next four functions are for collision detection.
* @See http://silveiraneto.net/2008/10/30/javafx-rectangular-collision-detection/
*/</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
 * Check collision between two rectangles.
 */</span>
function collission<span style="color: #009900;">&#40;</span>ax, ay, bx, by, cx, cy, dx, dy<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #003399;">Boolean</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> not <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ax <span style="color: #339933;">&gt;</span> dx<span style="color: #009900;">&#41;</span>or<span style="color: #009900;">&#40;</span>bx <span style="color: #339933;">&lt;</span> cx<span style="color: #009900;">&#41;</span>or<span style="color: #009900;">&#40;</span>ay <span style="color: #339933;">&gt;</span> dy<span style="color: #009900;">&#41;</span>or<span style="color: #009900;">&#40;</span>by <span style="color: #339933;">&lt;</span> cy<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
 * Check if the first rectangle are inside the second.
 */</span>
function inside <span style="color: #009900;">&#40;</span>ax, ay, bx, by, cx, cy, dx, dy<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">Boolean</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ax <span style="color: #339933;">&gt;</span> cx<span style="color: #009900;">&#41;</span> and <span style="color: #009900;">&#40;</span>bx <span style="color: #339933;">&lt;</span> dx<span style="color: #009900;">&#41;</span> and <span style="color: #009900;">&#40;</span>ay <span style="color: #339933;">&gt;</span> cy<span style="color: #009900;">&#41;</span> and <span style="color: #009900;">&#40;</span>by <span style="color: #339933;">&lt;</span> dy<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
function hitnode<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">:</span> Node, b<span style="color: #339933;">:</span>Node<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #003399;">Boolean</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>collission<span style="color: #009900;">&#40;</span>
        a.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, a.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        a.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> a.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, a.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> a.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        b.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, b.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        b.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> b.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, b.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> b.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
function insidenode<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">:</span>Node,b<span style="color: #339933;">:</span>Node<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">Boolean</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>inside<span style="color: #009900;">&#40;</span>
        a.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, a.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        a.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> a.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, a.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> a.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        b.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, b.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
        b.<span style="color: #006633;">getBoundsX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> b.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, b.<span style="color: #006633;">getBoundsY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> b.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
* Check collision of bomb against each obstacle.
*/</span>
function checkobstacles<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #003399;">Boolean</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obst in obstacles<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hitnode<span style="color: #009900;">&#40;</span>obst, bomb<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Pack visual game elements in a Frame's Stage, unresizable. */</span>
<span style="color: #003399;">Frame</span> <span style="color: #009900;">&#123;</span>
    title<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;Defuse the Bomb&quot;</span>
    width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">640</span>
    height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">480</span>
    resizable<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">false</span>
    closeAction<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    visible<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
&nbsp;
    stage<span style="color: #339933;">:</span> Stage <span style="color: #009900;">&#123;</span>
        content<span style="color: #339933;">:</span> bind <span style="color: #009900;">&#91;</span>floor, goal, walls, bomb, fadescreen<span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Call gamereset to set initial values and start animations */</span>
gamereset<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Downloads:</strong></p>
<ul>
<li>High definition video, <a href="http://http://silveiraneto.net/downloads/javafx_defuse.ogv">javafx_defuse.ogv</a>.</li>
<li>Entire project with sources and resources for NetBeans 6.1 with JavaFX pluggin, <a title="NetBeans project" href="http://silveiraneto.net/downloads/defuse.tar.bz2">defuse.tar.bz2</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/11/06/javafx-defuse-the-bomb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apache and JNLP files</title>
		<link>http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/</link>
		<comments>http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 14:43:26 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Network Launch Protocol]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JNLP]]></category>
		<category><![CDATA[MIME]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=1689</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/" title="Apache and JNLP files"></a>To Apache Web Server correctly handles yours JNLP (Java Network Launch Protocol) files, modify or create a .htaccess file in the top directory of your web site and add the following: AddType application/x-java-jnlp-file    .jnlp AddType application/x-java-archive-diff .jardiff Without these MIME-types, &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/" title="Apache and JNLP files"></a><p>To Apache Web Server correctly handles yours JNLP (Java Network Launch Protocol) files, modify or create a <strong>.htaccess</strong> file in the top directory of your web site and add the following:</p>
<pre>AddType application/x-java-jnlp-file    .jnlp
AddType application/x-java-archive-diff .jardiff</pre>
<p>Without these  MIME-types, the user would see the xml jnlp file as a plain text in the browser. After that you can link to yours Java Web Start applications with a icon like this one:</p>
<p style="text-align: center;"><a title="Click to launch" href="../downloads/dukepotato/launch.jnlp"><img class="size-full wp-image-1474 aligncenter" title="webstart" src="../wp-content/uploads/2008/10/webstart.png" alt="" width="88" height="23" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/11/06/apache-and-jnlp-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaFX, game demo</title>
		<link>http://silveiraneto.net/2008/08/24/javafx-game-demo/</link>
		<comments>http://silveiraneto.net/2008/08/24/javafx-game-demo/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 18:53:37 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JNLP]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[side scrolling]]></category>
		<category><![CDATA[Slidding]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=1138</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/08/24/javafx-game-demo/" title="JavaFX, game demo"></a>A simple demo using some techniques described in the post JavaFX side scrolling gaming. Original ogg video: blackdot.ogg Source (NetBeans project): BlackDot.tar.gz Source (one file only): blackdot.fx Java Web Start: launch.jnlp]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/08/24/javafx-game-demo/" title="JavaFX, game demo"></a><p>A simple demo using some techniques described in the post <a title="JavaFX Side Scrolling Gamming" href="http://silveiraneto.net/2008/08/18/javafx-side-scrolling-gamming/">JavaFX side scrolling gaming</a>.</p>
<p style="text-align: center;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/yNUfo538mfA&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/yNUfo538mfA&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Original ogg video: <a href="http://silveiraneto.net/downloads/blackdotdemo/blackdot.ogg">blackdot.ogg</a><br />
Source (NetBeans project): <a href="http://silveiraneto.net/downloads/blackdotdemo/BlackDot.tar.gz">BlackDot.tar.gz</a><br />
Source (one file only): <a href="http://silveiraneto.net/downloads/blackdotdemo/blackdot.fx">blackdot.fx</a><br />
Java Web Start: <a title="Launch" href="http://silveiraneto.net/downloads/blackdotdemo/launch.jnlp">launch.jnlp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/08/24/javafx-game-demo/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

