<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Collision Detection with a rotating square.</title>
		<link>http://www.allegro.cc/forums/view/613215</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 23 Sep 2013 00:07:05 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey there Allegro goers,</p><p>I have a square bitmap that I am able to move around the screen.  The left and right keys rotate the bitmap, the up key is to move the bitmap in the direction the bitmap is facing, and the down key is used to move the bitmap in the opposite direction the bitmap is facing.</p><p>Now that I have the movement down I am on to collision detection.  I learned from <a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Bitmaps">http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Bitmaps</a> about border detection, but that was with a square that did not rotate.</p><p>My question is how do I go about seeing if the square has collided with the display?</p><p>My first, and only, thought was to keep track of the four corners of the square and see if any of them are overlapping the display but I don&#39;t know how to keep track of the points through the rotation.</p><p>I also just don&#39;t know where to start with solving this problem.</p><p>Thanks,</p><p>Darren.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Wed, 04 Sep 2013 07:32:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The easiest way to do this is to use transforms right from the start, if you&#39;re not already. When you draw the square you&#39;d do something like:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, angle<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x1, y1, x2, y2, color<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Hold onto the transform, t. When you do collision detection, you&#39;d use the transform again:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> x <span class="k3">=</span> x1<span class="k2">;</span>
<span class="k1">float</span> y <span class="k3">=</span> y1<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, <span class="k3">&amp;</span>x, <span class="k3">&amp;</span>y<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> x <span class="k3">&gt;</span><span class="k3">=</span> SCREEN_WIDTH <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&gt;</span><span class="k3">=</span> SCREEN_HEIGHT<span class="k2">)</span> <span class="k2">{</span>
   <span class="c">/* collided */</span>
<span class="k2">}</span>
<span class="c">/* check another point... */</span>
x <span class="k3">=</span> x2<span class="k2">;</span>
y <span class="k3">=</span> y1<span class="k2">;</span>
<span class="c">/* and so on for all 4 points */</span>
</pre></div></div><p>

<span class="source-code"><a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a></span> will apply the same transform to the point x, y as was applied to the square, so you&#39;ll get the position after the rotation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 04 Sep 2013 08:11:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I never knew there was such a thing. I&#39;ll give it a try and reply back.  Thanks.  <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Wed, 04 Sep 2013 08:13:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could also use circular collision detection.  It&#39;s actually easier to use that a box, though perhaps not as accurate if you have a square object, it works quite well.</p><p>It&#39;s really easy.  In this case <span class="source-code">SPRITE</span> is just a <span class="source-code"><span class="k1">struct</span></span> containing the <span class="source-code">x</span>, <span class="source-code">y</span> co-ordinates on screen of the center of the sprite, and the radius (r) of  the circle from that center to check.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> collision<span class="k2">(</span>SPRITE <span class="k3">*</span>sprite1, SPRITE <span class="k3">*</span>sprite2<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">double</span> dist_x <span class="k3">=</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>sprite1-&gt;x <span class="k3">-</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>sprite2-&gt;x<span class="k2">;</span>
   <span class="k1">double</span> dist_y <span class="k3">=</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>sprite1-&gt;y <span class="k3">-</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>sprite2-&gt;y<span class="k2">;</span>

   <span class="c">// The distance of the vector between the two</span>
   <span class="k1">double</span> dist <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><span class="k2">(</span>dist_x <span class="k3">*</span> dist_x<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>dist_y <span class="k3">*</span> dist_y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

   <span class="c">// is the distance less than or equal to the absolute sum of the two radiuses?</span>
   <span class="c">// returns true is it is (collision) false if they're too far apart.</span>
   <span class="k1">return</span> dist <span class="k3">&lt;</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>sprite1-&gt;r <span class="k3">+</span> sprite2-&gt;r<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Edit: Sorry just realized you asked about a collision with the DISPLAY, this is with two sprites.  You could still use the same idea, test the radius and see if it is less than the left edge, greater than the right edge etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 04 Sep 2013 10:01:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did not know about al_transform_coordinates either, that is freakin awesome.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Sat, 07 Sep 2013 10:24:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you are interested in OBB (Oriented Bounding Box) collision, one way to do it that&#39;s not too complex is Separate Axis Theorem. </p><p><a href="http://www.jkh.me/files/tutorials/Separating%20Axis%20Theorem%20for%20Oriented%20Bounding%20Boxes.pdf">http://www.jkh.me/files/tutorials/Separating%20Axis%20Theorem%20for%20Oriented%20Bounding%20Boxes.pdf</a></p><p>It&#39;s beyond your needs for this, but it might be interesting for future projects.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sun, 08 Sep 2013 00:56:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Umm, I have tried and tried but I don&#39;t understand how to start using transformations.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sun, 08 Sep 2013 07:16:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Transforms aren&#39;t too difficult to understand if you know what they are doing.</p><p>First, start with an identity transform. This is a transform that will not alter any coordinates passed to it.
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Second, apply in order each transformation that you need.
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">-</span>camx , <span class="k3">-</span>camy<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_scale_transform"><span class="a">al_scale_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>SCREEN_WIDTH<span class="k3">/</span>BUFFER_WIDTH , <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>SCREEN_HEIGHT<span class="k3">/</span>BUFFER_HEIGHT<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
These two transforms apply a translation (movement) and a scale (stretching).</p><p>Now you need to use the transform :
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Now everything you draw will be shifted by (-camx , -camy) pixels and scaled from buffer size to screen size.</p><p>If you want to transform coordinates manually, use al_transform_coordinates.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> x <span class="k3">=</span> player.x<span class="k2">;</span>
<span class="k1">float</span> y <span class="k3">=</span> player.y<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>x , <span class="k3">&amp;</span>y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Now x and y hold the screen coordinates of the player after applying the camera transformation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Sep 2013 04:43:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, good news is I got it working.  Bad news is that it&#39;s not working correctly.  Here are the transformations I have now to rotate the square.</p><p>al_translate_transform(&amp;ShipTransformation, -Ships_X_Position, -Ships_Y_Position);<br />al_rotate_transform(&amp;ShipTransformation, -CHANGE_IN_ANGLE);<br />al_translate_transform(&amp;ShipTransformation, Ships_X_Position, Ships_Y_Position);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;UpperLeft.X, &amp;UpperLeft.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;UpperRight.X, &amp;UpperRight.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;LowerLeft.X, &amp;LowerLeft.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;LowerRight.X, &amp;LowerRight.Y);</p><p>And it works.  I then call al_draw-filled rectangle and pass in the x and y coordinates of the upper left, and lower right corners.</p><p>The problem is that as the square rotates the corners soon meet up on the same vertical or horizontal line.  I don&#39;t know how to explain it.  So I&#39;ll draw it.</p><p>-----<br />|   |<br />|   |<br />-----</p><p>--------<br />|      |<br />--------</p><p>----------</p><p>--------<br />|      |<br />--------</p><p>-----<br />|   |<br />|   |<br />-----</p><p>---<br />| |<br />| |<br />| |<br />---</p><p> |<br /> |<br /> |<br /> |<br /> |</p><p>The problem is with the al_draw_rectangle because it is defined on only two points.  Is there another drawing I can use that I can use all four points?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Tue, 10 Sep 2013 08:36:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m working on a similar task, I got my bounding box (rectange) to display correctly as follows:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2</span><a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans, <span class="k3">-</span>Origin.x, <span class="k3">-</span>Origin.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 3</span><a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans, RotationAngle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 4</span><a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans, Origin.x, Origin.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 5</span><a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>trans<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 6</span><a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>BoundingBox.x, BoundingBox.y, BoundingBox.x <span class="k3">+</span> BoundingBox.w, BoundingBox.y <span class="k3">+</span> BoundingBox.h, <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">6</span>, <span class="n">0</span>, <span class="n">0</span>.<span class="n">6</span>, <span class="n">0</span>.<span class="n">6</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 7</span><a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>identity<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Without seeing your draw call, I can only assume you are not using it correctly by adding the width to the x coordinate to get &quot;x2&quot; and the height to y to get &quot;y2&quot;.</p><p>Can you post your rectangle draw line of code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Werwolf696)</author>
		<pubDate>Wed, 11 Sep 2013 01:44:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can post my code.  Also, thank you for helping me.<br />I have structures that holds two floats, one for a X-coordinate and one for a Y-coordinate.</p><p>With this code I can see the square change shape</p><p>CHANGE_IN_ANGLE = 0.034906585 (rad)<br />al_translate_transform(&amp;ShipTransformation, -Ships_X_Position, -Ships_Y_Position);<br />al_rotate_transform(&amp;ShipTransformation, -CHANGE_IN_ANGLE);<br />al_translate_transform(&amp;ShipTransformation, Ships_X_Position, Ships_Y_Position);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;UpperLeft.X, &amp;UpperLeft.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;UpperRight.X, &amp;UpperRight.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;LowerLeft.X, &amp;LowerLeft.Y);<br />al_transform_coordinates(&amp;ShipTransformation, &amp;LowerRight.X, &amp;LowerRight.Y);</p><p>al_draw_filled_rectangle(UpperLeft.X, UpperLeft.Y, LowerRight.X, LowerRight.Y, al_map_rgb(255, 128, 64));<br />al_identity_transform(&amp;ShipTransformation);<br />al_use_transform(&amp;ShipTransformation);</p><p>But if you omit the al_transform_coordinates then the square rotates and move like the square is rotating but the square does not visually rotate.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Wed, 11 Sep 2013 04:59:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Darren - you&#39;re not using transformations quite right. Instead of manually transforming coordinates and then drawing a rectangle over them, let allegro use the transform to draw the rectangle from the original coordinates. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><div class="source-code snippet"><div class="inner"><pre>CHANGE_IN_ANGLE <span class="k3">=</span> <span class="n">0</span>.<span class="n">034906585</span> <span class="k2">(</span>rad<span class="k2">)</span>
<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k3">&amp;</span><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">-</span>Ships_X_Position, <span class="k3">-</span>Ships_Y_Position<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">-</span>CHANGE_IN_ANGLE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, Ships_X_Position, Ships_Y_Position<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>UpperLeft.X, UpperLeft.Y, LowerRight.X, LowerRight.Y, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">128</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Don&#39;t use these because they modify the contents of UpperLeft.X and UpperLeft.Y and so on
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">&amp;</span>UpperLeft.X, <span class="k3">&amp;</span>UpperLeft.Y<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">&amp;</span>UpperRight.X, <span class="k3">&amp;</span>UpperRight.Y<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">&amp;</span>LowerLeft.X, <span class="k3">&amp;</span>LowerLeft.Y<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">&amp;</span>LowerRight.X, <span class="k3">&amp;</span>LowerRight.Y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

<b>I think</b> this will work, try it. I got a paper I got to write.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 11 Sep 2013 22:44:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This might be an incredibly stupid question but how does al_rotate_transform know how big the rectangle is? Obviously a bigger rectangle means larger change in coordinates based on an angle
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Thu, 12 Sep 2013 06:08:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613215/989951#target">AmnesiA</a> said:</div><div class="quote"><p>This might be an incredibly stupid question but how does al_rotate_transform know how big the rectangle is? Obviously a bigger rectangle means larger change in coordinates based on an angle</p></div></div><p>
Actually, al_rotate_transform just multiplies the current transformation matrix with a rotation matrix. If you use al_use_transform, OpenGL/DirectX will multiply all coordinates it draws to with that matrix, thus performing the rotation.<br />It doesn&#39;t matter what you draw <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Thu, 12 Sep 2013 17:22:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That does work.  Almost.  The square is rotated and the square acts like it has been rotated when I move the square forward.  The only problem is that the display draws the square with only one rotation and when I let go of the left or right key the square returns to normal, but the rotation is kept. </p><p>But I am using what you gave me and it should work.</p><p>Any ideas?  I can give you the code so you can see what I am doing.</p><p>Also good luck on your paper.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sat, 14 Sep 2013 09:51:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, got it done and met all the reqs too.</p><p>If your code is not working still, post what you have. You have to rebuild the transform each time your rectangle changes angle or position, and reset it every time you don&#39;t need one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 15 Sep 2013 01:10:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Glad you got it done.  My school starts on the 26th.  I have started a new project so I can play with translations.  I&#39;ll post what I have in a few days.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sun, 15 Sep 2013 05:08:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>bump for reply...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 15 Sep 2013 05:22:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the bump.  Here is what I have.  I am only including the code for moving the square up and rotating it to the left.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">float</span> ULX <span class="k3">=</span> <span class="n">320</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">float</span> ULY <span class="k3">=</span> <span class="n">320</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">float</span> LRX <span class="k3">=</span> <span class="n">340</span><span class="k2">;</span>
<span class="number">  6</span><span class="k1">float</span> LRY <span class="k3">=</span> <span class="n">340</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">double</span> FPS <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  9</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>Timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>EventQueue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k1">bool</span> Stop <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 12</span><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>Timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span><span class="k1">bool</span> Redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 14</span><span class="k1">bool</span> Keys<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k1">float</span> Ships_X_Position <span class="k3">=</span> <span class="n">330</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k1">float</span> Ships_Y_Position <span class="k3">=</span> <span class="n">330</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span><a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>ULX, ULY, LRX, LRY, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">204</span>, <span class="n">153</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">float</span> ChangeInAngle <span class="k3">=</span> <span class="n">0</span>.<span class="n">034906585</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>Stop<span class="k2">)</span>
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> Event<span class="k2">;</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>EventQueue, <span class="k3">&amp;</span>Event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    <span class="k1">if</span><span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 28</span>    <span class="k2">{</span>
<span class="number"> 29</span>        <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>        <span class="k1">if</span><span class="k2">(</span>Keys<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 31</span>        <span class="k2">{</span>
<span class="number"> 32</span>             <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="n">0</span>, <span class="k3">-</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>            Ships_Y_Position <span class="k3">-</span><span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 34</span>        <span class="k2">}</span> 
<span class="number"> 35</span>        <span class="k1">if</span><span class="k2">(</span>Keys<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 36</span>        <span class="k2">{</span>
<span class="number"> 37</span>            <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">-</span>Ships_X_Position, <span class="k3">-</span>Ships_Y_Position<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>            <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, ChangeInAngle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>            <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, Ships_X_Position, Ships_Y_Position<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>        <span class="k2">}</span>
<span class="number"> 41</span>        Redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span>
<span class="number"> 43</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 44</span>    <span class="k2">{</span>
<span class="number"> 45</span>        <span class="k1">switch</span><span class="k2">(</span>Event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 46</span>        <span class="k2">{</span>
<span class="number"> 47</span>            <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 48</span>                Keys<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 49</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 50</span>            <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 51</span>                Keys<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 52</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 53</span>        <span class="k2">}</span>
<span class="number"> 54</span>    <span class="k2">}</span>
<span class="number"> 55</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 56</span>    <span class="k2">{</span>
<span class="number"> 57</span>        <span class="k1">switch</span><span class="k2">(</span>Event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 58</span>        <span class="k2">{</span>
<span class="number"> 59</span>            <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 60</span>                Keys<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span> 
<span class="number"> 61</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 62</span>            <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 63</span>                Keys<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 64</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 65</span>        <span class="k2">}</span>
<span class="number"> 66</span>    <span class="k2">}</span>
<span class="number"> 67</span>    <span class="k1">if</span><span class="k2">(</span>Redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>EventQueue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 68</span>    <span class="k2">{</span>
<span class="number"> 69</span>
<span class="number"> 70</span>        <span class="c">//al_transform_coordinates(&amp;ShipTransformation, &amp;ULX, &amp;ULY);</span>
<span class="number"> 71</span>        <span class="c">//al_transform_coordinates(&amp;ShipTransformation, &amp;LRX, &amp;LRY);</span>
<span class="number"> 72</span>        <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 73</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>ULX, ULY, LRX, LRY, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">204</span>, <span class="n">153</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span>        <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 75</span>        <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>        <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 77</span>        <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 78</span>        Redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 79</span>        <span class="k2">}</span>
<span class="number"> 80</span>    <span class="k2">}</span>
<span class="number"> 81</span><span class="k2">}</span>
</div></div><p>

Now...this works.  Kind of.  If I comment out the al_transform_coordinates then, when I hole the up key, the square will move five pixles up and stay there.  If I have al_transform_coordinates un-commented, then the square continuously moves up because the coordinates are being changed as well.</p><p>The square rotates correctly, but the square morphs because the ULX, ULY, LRX, and LRY are changing.  My only solution to this is to make a method that draws a square where I can define all four points and not two points.</p><p>So my question is, how do I successfully rotate a square and have the square keeps it&#39;s shape?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sun, 15 Sep 2013 06:43:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, you need to keep track of the angle too, you can&#39;t just display one angle and expect it to keep rotating, and yes your ship should move up 5 pix per frame but you&#39;re setting the view to 0,5 that&#39;s not really what you wanna do. And you need to update your ULX... variables. But better than that make a ship or player or object struct and store all the info in there. Have it store the rectangle of the ship and its angle.</p><p>Read, and try compiling this source code and running it. It should give you a basic example of transforms and movement :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="p">#include &lt;cstdlib&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;cmath&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">const</span> <span class="k1">float</span> SCREEN_WIDTH <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">   9</span><span class="k1">const</span> <span class="k1">float</span> SCREEN_HEIGHT <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="k1">int</span> TIMER_BPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  12</span><span class="k1">float</span> TIMER_FREQ <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k3">/</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>TIMER_BPS<span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">float</span> camera_xpos <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  15</span><span class="k1">float</span> camera_ypos <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="k1">const</span> <span class="k1">float</span> SHIP_WIDTH <span class="k3">=</span> <span class="n">50</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  18</span><span class="k1">const</span> <span class="k1">float</span> SHIP_HEIGHT <span class="k3">=</span> <span class="n">100</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  19</span><span class="k1">const</span> <span class="k1">float</span> SHIP_SPEED <span class="k3">=</span> <span class="n">120</span>.<span class="n">0f</span><span class="k3">/</span><span class="n">60</span>.<span class="n">0f</span><span class="k2">;</span><span class="c">// 120 pixels every 60 seconds</span>
<span class="number">  20</span>
<span class="number">  21</span>
<span class="number">  22</span><span class="k1">enum</span> KEYS <span class="k2">{</span>
<span class="number">  23</span>   KEY_MOVE_FORWARD <span class="k3">=</span> <span class="n">0</span>,
<span class="number">  24</span>   KEY_MOVE_BACKWARD <span class="k3">=</span> <span class="n">1</span>,
<span class="number">  25</span>   KEY_TURN_LEFT <span class="k3">=</span> <span class="n">2</span>,
<span class="number">  26</span>   KEY_TURN_RIGHT <span class="k3">=</span> <span class="n">3</span>
<span class="number">  27</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span><span class="c">// These match the KEYS enum</span>
<span class="number">  30</span><span class="k1">const</span> <span class="k1">int</span> NUMKEYS <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  31</span><span class="k1">int</span> keycodes<span class="k2">[</span>NUMKEYS<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>ALLEGRO_KEY_UP , ALLEGRO_KEY_DOWN , ALLEGRO_KEY_LEFT , ALLEGRO_KEY_RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  32</span>
<span class="number">  33</span><span class="k1">int</span> keys<span class="k2">[</span>NUMKEYS<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span><span class="c">// track key ups and downs</span>
<span class="number">  34</span>
<span class="number">  35</span>
<span class="number">  36</span>
<span class="number">  37</span><span class="k1">typedef</span> <span class="k1">struct</span> SHIP <span class="k2">{</span>
<span class="number">  38</span>   <span class="k1">float</span> x,y,w,h,rx,by,angle<span class="k2">;</span>
<span class="number">  39</span><span class="k2">}</span><span class="k2">;</span> 
<span class="number">  40</span>
<span class="number">  41</span>SHIP s<span class="k2">;</span>
<span class="number">  42</span><span class="k1">void</span> init_ship<span class="k2">(</span>SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  43</span>s-&gt;x <span class="k3">=</span> s-&gt;y <span class="k3">=</span> s-&gt;w <span class="k3">=</span> s-&gt;h <span class="k3">=</span> s-&gt;rx <span class="k3">=</span> s-&gt;by <span class="k3">=</span> s-&gt;angle <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  44</span><span class="k2">}</span>
<span class="number">  45</span>
<span class="number">  46</span><span class="k1">void</span> update_ship_corner<span class="k2">(</span>SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  47</span>   s-&gt;rx <span class="k3">=</span> s-&gt;x <span class="k3">+</span> s-&gt;w<span class="k2">;</span>
<span class="number">  48</span>   s-&gt;by <span class="k3">=</span> s-&gt;y <span class="k3">+</span> s-&gt;h<span class="k2">;</span>
<span class="number">  49</span><span class="k2">}</span>
<span class="number">  50</span>
<span class="number">  51</span><span class="k1">void</span> set_ship_rectangle<span class="k2">(</span>SHIP<span class="k3">*</span> s , <span class="k1">int</span> x , <span class="k1">int</span> y , <span class="k1">int</span> w , <span class="k1">int</span> h<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  52</span>   s-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  53</span>   s-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  54</span>   s-&gt;w <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  55</span>   s-&gt;h <span class="k3">=</span> h<span class="k2">;</span>
<span class="number">  56</span>   update_ship_corner<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span><span class="k2">}</span>
<span class="number">  58</span>
<span class="number">  59</span><span class="k1">void</span> set_ship_pos<span class="k2">(</span>SHIP<span class="k3">*</span> s , <span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>   s-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  61</span>   s-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  62</span>   update_ship_corner<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span><span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span><span class="k1">void</span> translate_ship<span class="k2">(</span>SHIP<span class="k3">*</span> s , <span class="k1">float</span> xshift , <span class="k1">float</span> yshift<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  66</span>   set_ship_pos<span class="k2">(</span>s , s-&gt;x <span class="k3">+</span> xshift , s-&gt;y <span class="k3">+</span> yshift<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span><span class="k2">}</span>
<span class="number">  68</span>
<span class="number">  69</span><span class="k1">void</span> set_angle<span class="k2">(</span>SHIP<span class="k3">*</span> s , <span class="k1">float</span> angle<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  70</span>   s-&gt;angle <span class="k3">=</span> angle<span class="k2">;</span>
<span class="number">  71</span><span class="k2">}</span>
<span class="number">  72</span>
<span class="number">  73</span><span class="k1">void</span> shift_angle<span class="k2">(</span>SHIP<span class="k3">*</span> s , <span class="k1">float</span> angle_delta<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  74</span>   set_angle<span class="k2">(</span>s , s-&gt;angle <span class="k3">+</span> angle_delta<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span><span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span><span class="k1">void</span> move_ship_forward<span class="k2">(</span>SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>   translate_ship<span class="k2">(</span>s , SHIP_SPEED<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>s-&gt;angle<span class="k2">)</span> , SHIP_SPEED<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>s-&gt;angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span><span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span><span class="k1">void</span> move_ship_backward<span class="k2">(</span>SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  82</span>   translate_ship<span class="k2">(</span>s , <span class="k3">-</span>SHIP_SPEED<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>s-&gt;angle<span class="k2">)</span> , <span class="k3">-</span>SHIP_SPEED<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>s-&gt;angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span><span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">void</span> set_transform_for_ship<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a><span class="k3">*</span> t , SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>   <span class="c">// center on ship</span>
<span class="number">  89</span>   <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span>t , <span class="k3">-</span><span class="k2">(</span>s-&gt;x <span class="k3">+</span> s-&gt;w<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span> , <span class="k3">-</span><span class="k2">(</span>s-&gt;y <span class="k3">+</span> s-&gt;h<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>   <span class="c">// rotate</span>
<span class="number">  91</span>   <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span>t , s-&gt;angle<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>   <span class="c">// move ship back where it was</span>
<span class="number">  93</span>   <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span>t , <span class="k3">+</span><span class="k2">(</span>s-&gt;x <span class="k3">+</span> s-&gt;w<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span> , <span class="k3">+</span><span class="k2">(</span>s-&gt;y <span class="k3">+</span> s-&gt;h<span class="k3">/</span><span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span><span class="k2">}</span>
<span class="number">  95</span>
<span class="number">  96</span><span class="k1">void</span> draw_ship<span class="k2">(</span>SHIP<span class="k3">*</span> s<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  97</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> transform, old<span class="k2">;</span>
<span class="number">  98</span>   set_transform_for_ship<span class="k2">(</span><span class="k3">&amp;</span>transform , s<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>   <span class="c">// follow our camera</span>
<span class="number"> 100</span>   <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform , <span class="k3">-</span>camera_xpos , <span class="k3">-</span>camera_ypos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>   <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>   <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>s-&gt;x , s-&gt;y , s-&gt;rx , s-&gt;by , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">127</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>   <span class="c">// theoretically, reset transformation matrix for allegro here,too lazy though</span>
<span class="number"> 104</span><span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>
<span class="number"> 108</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 109</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 110</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 111</span>   
<span class="number"> 112</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> disp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>SCREEN_WIDTH , SCREEN_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>
<span class="number"> 115</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>disp<span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a> <span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 116</span>   
<span class="number"> 117</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> events <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>events<span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">4</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 119</span>   
<span class="number"> 120</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span>TIMER_FREQ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span> <span class="k2">{</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 122</span>
<span class="number"> 123</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>events , <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>events , <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>disp<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>events , <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>   SHIP ship<span class="k2">;</span>
<span class="number"> 128</span>   init_ship<span class="k2">(</span><span class="k3">&amp;</span>ship<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>   set_ship_rectangle<span class="k2">(</span><span class="k3">&amp;</span>ship , <span class="n">100</span> , SCREEN_HEIGHT<span class="k3">/</span><span class="n">2</span> <span class="k3">-</span> SHIP_HEIGHT<span class="k3">/</span><span class="n">2</span> , SHIP_WIDTH , SHIP_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>   <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 132</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 133</span>   
<span class="number"> 134</span>   <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>   
<span class="number"> 136</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 137</span>      <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 138</span>         redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 139</span>         <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>         draw_ship<span class="k2">(</span><span class="k3">&amp;</span>ship<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>         <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>      <span class="k2">}</span>
<span class="number"> 143</span>      <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 144</span>         <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> e<span class="k2">;</span>
<span class="number"> 145</span>         <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>events , <span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 147</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 148</span>            <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>KEY_TURN_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 149</span>               shift_angle<span class="k2">(</span><span class="k3">&amp;</span>ship , TIMER_FREQ<span class="k3">*</span><span class="k2">(</span><span class="k3">-</span>M_PI<span class="k3">/</span><span class="n">3</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>            <span class="k2">}</span>
<span class="number"> 151</span>            <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>KEY_TURN_RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 152</span>               shift_angle<span class="k2">(</span><span class="k3">&amp;</span>ship , TIMER_FREQ<span class="k3">*</span><span class="k2">(</span>M_PI<span class="k3">/</span><span class="n">3</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>            <span class="k2">}</span>
<span class="number"> 154</span>            <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>KEY_MOVE_FORWARD<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 155</span>               move_ship_forward<span class="k2">(</span><span class="k3">&amp;</span>ship<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>            <span class="k2">}</span>
<span class="number"> 157</span>            <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>KEY_MOVE_BACKWARD<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 158</span>               move_ship_backward<span class="k2">(</span><span class="k3">&amp;</span>ship<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>            <span class="k2">}</span>
<span class="number"> 160</span>         <span class="k2">}</span>
<span class="number"> 161</span>         <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 162</span>            <span class="k1">if</span> <span class="k2">(</span>e.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 163</span>            <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> k <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> k <span class="k3">&lt;</span> NUMKEYS <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>k<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 164</span>               <span class="k1">if</span> <span class="k2">(</span>e.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> keycodes<span class="k2">[</span>k<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 165</span>                  keys<span class="k2">[</span>k<span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 166</span>               <span class="k2">}</span>
<span class="number"> 167</span>            <span class="k2">}</span>
<span class="number"> 168</span>         <span class="k2">}</span>
<span class="number"> 169</span>         <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 170</span>            <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> k <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> k <span class="k3">&lt;</span> NUMKEYS <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>k<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 171</span>               <span class="k1">if</span> <span class="k2">(</span>e.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> keycodes<span class="k2">[</span>k<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 172</span>                  keys<span class="k2">[</span>k<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 173</span>               <span class="k2">}</span>
<span class="number"> 174</span>            <span class="k2">}</span>
<span class="number"> 175</span>         <span class="k2">}</span>
<span class="number"> 176</span>         <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 177</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 178</span>         <span class="k2">}</span>
<span class="number"> 179</span>      <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>events<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>quit<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>   <span class="k2">}</span>
<span class="number"> 181</span>
<span class="number"> 182</span>
<span class="number"> 183</span>   <span class="c">/** Leak a bunch of memory here because I haven't called any of the al_destroy routines and cleaned up after myself */</span>
<span class="number"> 184</span>
<span class="number"> 185</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 186</span><span class="k2">}</span>
</div></div><p>

And if you learn anything from this code, it should be to use functions and compartmentalize your code.</p><p>Edit - the movement isn&#39;t quite right for some reason I haven&#39;t figured out yet
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 15 Sep 2013 12:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works.  I&#39;ll look it over and learn from it.  I know that I should use functions.  I do that at my job.  But I wanted to first get the rotation correct then I was going to worry about functions and the such.</p><p>EDIT:</p><p>I&#39;m going through you code and I have some questions.</p><p>I understand what  by are used for, but what do they stand for?<br />for init_ship(), why do you have SHIP x; before the method?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sun, 15 Sep 2013 22:24:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you mean why does he have <span class="source-code">SHIP s<span class="k2">;</span></span> before calling init? He&#39;s declaring an instance of the structure; s is an instance of SHIP...you need it to pass to init..</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">struct</span> SHIP<span class="k2">;</span> <span class="c">//the structure</span>

SHIP s<span class="k2">;</span>  <span class="c">//s is a SHIP</span>

initShip<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">//send ship to function</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Mon, 16 Sep 2013 14:33:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613215/990071#target">Dizzy Egg</a> said:</div><div class="quote"><p> Do you mean why does he have SHIP s; before calling init? He&#39;s declaring an instance of the structure; s is an instance of SHIP...you need it to pass to init..</p></div></div><p>Except that in the main function a SHIP called ship is declared and passed to the <span class="source-code">initShip<span class="k2">(</span><span class="k2">)</span></span> function.  </p><p>That line is not required at all. I&#39;m guessing it was part of an earlier revision and was not removed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Mon, 16 Sep 2013 15:47:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, what Lenny said.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Mon, 16 Sep 2013 15:54:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613215/990073#target">LennyLen</a> said:</div><div class="quote"><p>
That line is not required at all. I&#39;m guessing it was part of an earlier revision and was not removed.
</p></div></div><p>
Yes, you are correct. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Anybody know why the movement follows integer or rounded angles, but the orientation looks perfect all the time? Ie. why doesn&#39;t it go the direction it is facing? I don&#39;t get it. Anybody try the code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Sep 2013 03:16:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have tried the code yet I have not found out why it does that.  I&#39;m still wondering why doesn&#39;t the rectangle go flat when both x-coordinates are the same.  But when I find it our I&#39;ll give you a hollar.</p><p>Here is the code I used to make the rotating square work.  It doesn&#39;t have any functions or methods yet, but it works. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_native_dialog.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   8</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">const</span> <span class="k1">int</span> SCREEN_WIDTH <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">const</span> <span class="k1">int</span> SCREEN_HEIGTH <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">const</span> <span class="k1">int</span> SHIP_WIDTH <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  14</span><span class="k1">const</span> <span class="k1">int</span> SHIP_HEIGTH <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="k1">const</span> <span class="k1">double</span> CHANGE_IN_ANGLE <span class="k3">=</span> <span class="n">0</span>.<span class="n">034906585</span><span class="k2">;</span>
<span class="number">  17</span><span class="k1">const</span> <span class="k1">double</span> SPEED_OF_SHIP <span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="k1">const</span> <span class="k1">double</span> FRAMES_PER_SECOND <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="k1">const</span> <span class="k1">enum</span> KEYS <span class="k2">{</span>UP, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">//I keep track of the center and not a second point since the second point is never used.</span>
<span class="number">  24</span><span class="c">//To get the secodn point the program uses First_X_Position + SHIP_WIDTH</span>
<span class="number">  25</span>
<span class="number">  26</span><span class="c">//The Center_X_Position and Center_Y_Position is used in the redraw step near the end of the program.</span>
<span class="number">  27</span><span class="c">//The Center points are to make the square move around the center of the square.</span>
<span class="number">  28</span><span class="k1">struct</span> ShipStuff
<span class="number">  29</span><span class="k2">{</span>
<span class="number">  30</span>  <span class="k1">float</span> First_X_Position<span class="k2">;</span>
<span class="number">  31</span>  <span class="k1">float</span> First_Y_Position<span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">float</span> Width<span class="k2">;</span>
<span class="number">  33</span>  <span class="k1">float</span> Heigth<span class="k2">;</span>
<span class="number">  34</span>  <span class="k1">float</span> Center_X_Position<span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">float</span> Center_Y_Position<span class="k2">;</span>
<span class="number">  36</span>  <span class="k1">float</span> Angle<span class="k2">;</span>
<span class="number">  37</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  38</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number">  39</span><span class="k2">{</span>
<span class="number">  40</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>Display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  41</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>Timer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  42</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>EventQueue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>  ShipStuff Ship<span class="k2">;</span>
<span class="number">  45</span>  Ship.First_X_Position <span class="k3">=</span> SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  46</span>  Ship.First_Y_Position <span class="k3">=</span> SCREEN_HEIGTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  47</span>  Ship.Width <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  48</span>  Ship.Heigth <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  49</span>  Ship.Center_X_Position <span class="k3">=</span> Ship.First_X_Position <span class="k3">+</span> <span class="k2">(</span>SHIP_WIDTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>  Ship.Center_Y_Position <span class="k3">=</span> Ship.First_Y_Position <span class="k3">+</span> <span class="k2">(</span>SHIP_HEIGTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>  Ship.Angle <span class="k3">=</span> <span class="k3">-</span><a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  52</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  53</span>  <span class="k2">{</span>
<span class="number">  54</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Display, <span class="s">"Bad Init"</span>, <span class="s">"Bad Init"</span>, <span class="s">"Can't initilize allegro"</span>, NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  56</span>  <span class="k2">}</span>
<span class="number">  57</span>
<span class="number">  58</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>  Display  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>SCREEN_WIDTH, SCREEN_HEIGTH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Display<span class="k2">)</span>
<span class="number">  61</span>  <span class="k2">{</span>
<span class="number">  62</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Display, <span class="s">"Bad Display"</span>, <span class="s">"Bad Display"</span>, <span class="s">"Sorry, can't make the display"</span>, NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  64</span>  <span class="k2">}</span>
<span class="number">  65</span>
<span class="number">  66</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  67</span>  <span class="k2">{</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Display, <span class="s">"No Keyboard"</span>, <span class="s">"No Keyboard"</span>, <span class="s">"Sorry, can't install the keyboard"</span>, NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>Display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  71</span>  <span class="k2">}</span>
<span class="number">  72</span>
<span class="number">  73</span>  Timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FRAMES_PER_SECOND<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Timer<span class="k2">)</span>
<span class="number">  75</span>  <span class="k2">{</span>
<span class="number">  76</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Display, <span class="s">"Bad Timer"</span>, <span class="s">"Bad Timer"</span>, <span class="s">"Sorry, can't make the timer"</span>, NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>Display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  79</span>  <span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span>  EventQueue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>EventQueue<span class="k2">)</span>
<span class="number">  83</span>  <span class="k2">{</span>
<span class="number">  84</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Display, <span class="s">"Bad Queue"</span>, <span class="s">"Bad Queue"</span>, <span class="s">"Can't make the event queue."</span>, NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>Display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>Timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  88</span>  <span class="k2">}</span>
<span class="number">  89</span>
<span class="number">  90</span>  <span class="c">//UP, DOWN, LEFT, RIGHT</span>
<span class="number">  91</span>  <span class="k1">bool</span> KeyPresses<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  92</span>  <span class="k1">bool</span> Redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  93</span>  <span class="k1">double</span> Ships_X_Position <span class="k3">=</span> SCREEN_HEIGTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  94</span>  <span class="k1">double</span> Ships_Y_Position <span class="k3">=</span> SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>EventQueue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>Display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>EventQueue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>Timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>EventQueue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>Ship.First_X_Position, Ship.First_Y_Position, Ship.First_X_Position <span class="k3">+</span> SHIP_WIDTH, Ship.First_Y_Position <span class="k3">+</span> SHIP_HEIGTH, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">124</span>, <span class="n">68</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>Timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>  <span class="k1">float</span> AngleInRadians <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 103</span>  <span class="k1">bool</span> DoExit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 104</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>DoExit<span class="k2">)</span>
<span class="number"> 105</span>  <span class="k2">{</span>
<span class="number"> 106</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> Event<span class="k2">;</span>
<span class="number"> 107</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>EventQueue, <span class="k3">&amp;</span>Event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</span>    <span class="k1">if</span><span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 110</span>    <span class="k2">{</span>
<span class="number"> 111</span>      <span class="k1">if</span><span class="k2">(</span>KeyPresses<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 112</span>      <span class="k2">{</span>
<span class="number"> 113</span>        Ship.First_X_Position <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 114</span>        Ship.Center_X_Position <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span>        Ship.First_Y_Position <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 117</span>        Ship.Center_Y_Position <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 118</span>      <span class="k2">}</span>
<span class="number"> 119</span>      <span class="k1">if</span> <span class="k2">(</span>KeyPresses<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 120</span>      <span class="k2">{</span>
<span class="number"> 121</span>        Ship.First_X_Position <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>        Ship.Center_X_Position <span class="k3">-</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 123</span>
<span class="number"> 124</span>        Ship.First_Y_Position <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>        Ship.Center_Y_Position <span class="k3">-</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>Ship.Angle<span class="k2">)</span> <span class="k3">*</span> SPEED_OF_SHIP<span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>      <span class="k2">}</span>
<span class="number"> 128</span>      <span class="k1">if</span><span class="k2">(</span>KeyPresses<span class="k2">[</span>LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 129</span>      <span class="k2">{</span>
<span class="number"> 130</span>        Ship.Angle <span class="k3">-</span><span class="k3">=</span> CHANGE_IN_ANGLE<span class="k2">;</span>
<span class="number"> 131</span>        <span class="k1">if</span><span class="k2">(</span> Ship.Angle <span class="k3">&gt;</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <span class="n">3</span>.<span class="n">1415</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 132</span>        <span class="k2">{</span>
<span class="number"> 133</span>          Ship.Angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 134</span>        <span class="k2">}</span>
<span class="number"> 135</span>
<span class="number"> 136</span>      <span class="k2">}</span>
<span class="number"> 137</span>      <span class="k1">if</span><span class="k2">(</span>KeyPresses<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 138</span>      <span class="k2">{</span>
<span class="number"> 139</span>        Ship.Angle <span class="k3">+</span><span class="k3">=</span> CHANGE_IN_ANGLE<span class="k2">;</span>
<span class="number"> 140</span>        <span class="k1">if</span><span class="k2">(</span>Ship.Angle <span class="k3">&gt;</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <span class="n">3</span>.<span class="n">1415</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 141</span>        <span class="k2">{</span>
<span class="number"> 142</span>          Ship.Angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 143</span>        <span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</span>      <span class="k2">}</span>
<span class="number"> 146</span>      Redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 147</span>    <span class="k2">}</span>
<span class="number"> 148</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 149</span>    <span class="k2">{</span>
<span class="number"> 150</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 151</span>    <span class="k2">}</span>
<span class="number"> 152</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 153</span>    <span class="k2">{</span>
<span class="number"> 154</span>      <span class="k1">switch</span> <span class="k2">(</span>Event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 155</span>      <span class="k2">{</span>
<span class="number"> 156</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 157</span>        KeyPresses<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 158</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 159</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 160</span>        KeyPresses<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 161</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 162</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 163</span>        KeyPresses<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 164</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 165</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 166</span>        KeyPresses<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 167</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 168</span>      <span class="k2">}</span>
<span class="number"> 169</span>    <span class="k2">}</span>
<span class="number"> 170</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>Event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 171</span>    <span class="k2">{</span>
<span class="number"> 172</span>      <span class="k1">switch</span><span class="k2">(</span>Event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 173</span>      <span class="k2">{</span>
<span class="number"> 174</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 175</span>        KeyPresses<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 176</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 177</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 178</span>        KeyPresses<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 179</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 180</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 181</span>        KeyPresses<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 182</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 183</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 184</span>        KeyPresses<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 185</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 186</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 187</span>        DoExit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 188</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 189</span>      <span class="k2">}</span>
<span class="number"> 190</span>    <span class="k2">}</span>
<span class="number"> 191</span>
<span class="number"> 192</span>    <span class="k1">if</span><span class="k2">(</span>Redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>EventQueue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 193</span>    <span class="k2">{</span>
<span class="number"> 194</span>
<span class="number"> 195</span>      Redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 196</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> ShipTransformation, Old<span class="k2">;</span>
<span class="number"> 198</span>      <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>      <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k3">-</span><span class="k2">(</span>SCREEN_WIDTH <span class="k3">-</span> <span class="k2">(</span>SCREEN_WIDTH <span class="k3">-</span> Ship.Center_X_Position<span class="k2">)</span><span class="k2">)</span>, 
<span class="number"> 200</span>        <span class="k3">-</span><span class="k2">(</span>SCREEN_HEIGTH <span class="k3">-</span> <span class="k2">(</span>SCREEN_HEIGTH <span class="k3">-</span> Ship.Center_Y_Position<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>      <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, Ship.Angle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="k2">(</span>Ship.Center_X_Position<span class="k2">)</span>, <span class="k2">(</span>Ship.Center_Y_Position<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>      <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>      <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>ShipTransformation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>Ship.First_X_Position, Ship.First_Y_Position, Ship.First_X_Position <span class="k3">+</span> SHIP_WIDTH, Ship.First_Y_Position <span class="k3">+</span> SHIP_HEIGTH, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">127</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>      <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>Old<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>    <span class="k2">}</span>
<span class="number"> 209</span>  <span class="k2">}</span>
<span class="number"> 210</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>Timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>EventQueue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>Display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>
<span class="number"> 214</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 215</span><span class="k2">}</span>
</div></div><p>

Also, I found this very interesting.</p><p>Let&#39;s say you have these variables:<br />Upper_Left_X<br />Upper_Left_y<br />Lower_Right_X<br />Lower_RIght_Y</p><p>and you make a square by doing this<br />al_draw_filled_rectangle(Upper_Left_X, Upper_Left_y, Lower_Right_X, Lower_Right_Y,<br />al_map_rgb(255, 10, 13))</p><p>Than the square contorts and will become a straight line whenever the two X coordinates are the same.</p><p>But if you draw a rectangle like this.<br />al_draw_filled_rectangle(Upper_Left_X, Upper_Left_Y, SHIP_WIDTH, SHIP_HEIGTH,<br />al_map_rgb(255, 10, 13)) then the rectangle will always stay the same shape.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Sun, 22 Sep 2013 11:51:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey, you can post your code now Darren.</p><p>And if you click on the pen and paper icon at the top of your post you can edit it and then send to top.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 22 Sep 2013 14:50:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The transformations are done with the center of the square. That way the square will rotate around the center.  Because of that I don&#39;t know who to the stop the square from  moving if one point touches the border. </p><p>I&#39;m looking into this as well.  I just can&#39;t figure it out yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darren Hoehna)</author>
		<pubDate>Mon, 23 Sep 2013 00:07:05 +0000</pubDate>
	</item>
</rss>
