<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Best way for collision detection/bounding box collision</title>
		<link>http://www.allegro.cc/forums/view/615394</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 25 May 2015 18:36:10 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My level background is a bitmap with various obstacles on it</p><p>Whats the best way to say just put a square over that image and stop my player from moving into them</p><p>I started putting pink squares/rectangles over the item I want collision with, to get the x1, x2, y1, y2 co-ordinates but there are maybe around 25 squares and rectangles.</p><p>Do i just do it 1 by one or does it in an array (not done this before)</p><p>Also How do I overcome this
</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="k1">if</span> <span class="k2">(</span>Human.y <span class="k3">&lt;</span> <span class="n">90</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> Human.x <span class="k3">&lt;</span> <span class="n">860</span><span class="k2">)</span> <span class="c">//Check to see if he has hit a bound</span>
<span class="number">  2</span>  <span class="k2">{</span>
<span class="number">  3</span>    Human.y <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span> <span class="c">//Stop him going past the up bound</span>
<span class="number">  4</span>  <span class="k2">}</span>
<span class="number">  5</span>  <span class="k1">if</span> <span class="k2">(</span>Human.x <span class="k3">&lt;</span> <span class="n">860</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> Human.y <span class="k3">&lt;</span> <span class="n">90</span><span class="k2">)</span>
<span class="number">  6</span>  <span class="k2">{</span>
<span class="number">  7</span>    Human.x <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span> <span class="c">//Stop him going past the right bound</span>
<span class="number">  8</span><span class="c">//What happens is that if I approach from this side regardless of where I am at my player gets set to the above Human.y value.</span>
<span class="number">  9</span>  <span class="k2">}</span>
</div></div><p>
I know I need to somehow stop him moving in the x/y direction but I still need him to move in the other x/y direction </p><p>EDIT:- I found this forum post and going to try following it <a href="https://www.allegro.cc/forums/thread/613787">https://www.allegro.cc/forums/thread/613787</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Wed, 20 May 2015 02:27:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><h4>If you are deciding whether two OBJECTS are colliding</h4><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span> each objectA in array of objects
   <span class="k1">for</span> each objectB in array of objects
     <span class="k1">if</span><span class="k2">(</span>objectA <span class="k3">!</span><span class="k3">=</span> objectB<span class="k2">)</span> <span class="c">//we don't want to collide with ourself!</span>
<span class="c">// do bounding box collision</span>
</pre></div></div><p>

I don&#39;t recall the exact formula off the top of my head for bounding boxes, but the point here is you are doing an O(n^2) (&quot;n squared&quot;) algorithm that means the number of operations is equal to the square of the number of objects in the array.</p><p>You only need more elegant solutions when number of objects become very high. (1000 or more.) </p><p>As for the geometry of whether or not the collision has occured:</p><p><a href="https://wiki.allegro.cc/index.php?title=Bounding_Box">https://wiki.allegro.cc/index.php?title=Bounding_Box</a></p><p><a href="http://gamedev.stackexchange.com/questions/586/what-is-the-fastest-way-to-work-out-2d-bounding-box-intersection">http://gamedev.stackexchange.com/questions/586/what-is-the-fastest-way-to-work-out-2d-bounding-box-intersection</a></p><h4>If you are deciding whether an OBJECT is colliding with a BITMAP</h4><p>

You can use pixel-perfect collision detection (each pixel is tested), or you can use what I&#39;ll call &quot;finite point&quot; method where you a certain number of points that are relative to the center x,y position. So if you had a guy that was twice as tall as he was wide, you would test say [x,y-10],[x,y+10],[x-5,y],[x+5,y]. The number of points and their positions can very. So you can use more for a bigger object, or even change their positions as the sprites change. It&#39;s almost as good as pixel perfect, much faster, and in some cases, can behave even better. (A single stray pixel won&#39;t cause problems, only the pixel locations you want.)</p><p>[edit] I think I&#39;m going to learn HTML5/JS/whatever and then throw together some scripted examples so people can see/feel how they interact.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 20 May 2015 05:58:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cheers Chris, I&#39;ll have a read through those pages and see what I can work out
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Wed, 20 May 2015 06:08:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;d like to point out that the easiest collision detection is between points-circles and circles-circles, they only require very simple distance checks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Wed, 20 May 2015 11:42:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Some untested code for common collision cases:</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="k1">int</span> collide_point_circle<span class="k2">(</span><span class="k1">double</span> px, <span class="k1">double</span> py, <span class="k1">double</span> cx, <span class="k1">double</span> cy, <span class="k1">double</span> r<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>  <span class="c">/* Square of the distance between the circle's center and the point from Pythagroras' theorem. */</span>
<span class="number">  3</span>  <span class="k1">double</span> d2 <span class="k3">=</span> <span class="k2">(</span>cx <span class="k3">-</span> px<span class="k2">)</span> <span class="k3">*</span>  <span class="k2">(</span>cx <span class="k3">-</span> px<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>cy <span class="k3">-</span> py<span class="k2">)</span> <span class="k3">*</span>  <span class="k2">(</span>cy <span class="k3">-</span> py<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  <span class="c">/* collision if the square of the distance is less than the square </span>
<span class="number">  5</span><span class="c">     of the radius. */</span>
<span class="number">  6</span>  <span class="k1">return</span> <span class="k2">(</span>d2 <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>r<span class="k3">*</span>r<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span><span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">int</span> collide_circle_circle<span class="k2">(</span><span class="k1">double</span> c1x, <span class="k1">double</span> c1y, <span class="k1">double</span> r1 <span class="k1">double</span> c2x, <span class="k1">double</span> c2y, <span class="k1">double</span> r2<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>  <span class="c">/* Collision between circles if the distance between the centers is less than the sum of the radii. */</span>
<span class="number"> 11</span>  <span class="k1">return</span> collide_point_circle<span class="k2">(</span>c1x, c1y, c2x, c2y, r1<span class="k3">+</span>r2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span><span class="k2">}</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="c">/** AABB is an axis aligned bounds box, that is,  rectangle that is aligned with the x and y axis of the display. rw and rh are width and heigt, respectively.*/</span>
<span class="number"> 15</span><span class="k1">int</span> collide_point_aabb<span class="k2">(</span><span class="k1">double</span> px, <span class="k1">double</span> py, <span class="k1">double</span> rx, <span class="k1">double</span> ry, <span class="k1">double</span> rw, <span class="k1">double</span> rh<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>  <span class="k1">if</span> <span class="k2">(</span>px <span class="k3">&lt;</span> rx<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>   
<span class="number"> 17</span>  <span class="k1">if</span> <span class="k2">(</span>px <span class="k3">&gt;</span> <span class="k2">(</span>rx<span class="k3">+</span>rw<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 18</span>  <span class="k1">if</span> <span class="k2">(</span>py <span class="k3">&lt;</span> ry<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span>py <span class="k3">&gt;</span> <span class="k2">(</span>ry<span class="k3">+</span>rh<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">return</span> <span class="k3">!</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">int</span> collide_aabb_aabb<span class="k2">(</span><span class="k1">double</span> r1x, <span class="k1">double</span> r1y, <span class="k1">double</span> r1w, <span class="k1">double</span> r1h, <span class="k1">double</span> r2x, <span class="k1">double</span> r2y, <span class="k1">double</span> r2w, <span class="k1">double</span> r2h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>r1x <span class="k3">+</span> r1w<span class="k2">)</span> <span class="k3">&lt;</span> r2x<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>   
<span class="number"> 25</span>  <span class="k1">if</span> <span class="k2">(</span>r1x <span class="k3">&gt;</span> <span class="k2">(</span>r2x<span class="k3">+</span>r2w<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 26</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>r1y <span class="k3">+</span> r1h<span class="k2">)</span> <span class="k3">&lt;</span> r2y<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">if</span> <span class="k2">(</span>r1y <span class="k3">&gt;</span> <span class="k2">(</span>r2y<span class="k3">+</span>r2h<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span>  <span class="k1">return</span> <span class="k3">!</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 29</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 20 May 2015 12:04:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to get this collision working and it doesn&#39;t seem to be going right</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="k1">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">   2</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="k1">enum</span> KEYS<span class="k2">{</span> UP, DOWN, LEFT, RIGHT, ESCAPE, W, A, S, D, SPACE<span class="k2">}</span><span class="k2">;</span>
<span class="number">   5</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="k1">false</span>, <span class="k1">false</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">   6</span>
<span class="number">   7</span><span class="k1">struct</span> Player
<span class="number">   8</span><span class="k2">{</span>
<span class="number">   9</span>  <span class="k1">int</span> ID<span class="k2">;</span>
<span class="number">  10</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  11</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  12</span>  <span class="k1">int</span> bx<span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">int</span> by<span class="k2">;</span>
<span class="number">  14</span>  <span class="k1">int</span> w <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number">  15</span>  <span class="k1">int</span> h <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> speed <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span>
<span class="number">  19</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  20</span>Player Human1<span class="k2">;</span>
<span class="number">  21</span>Player Human2<span class="k2">;</span>
<span class="number">  22</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span><span class="k1">void</span> MoveHumanDown<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span><span class="k1">void</span> MoveHumanLeft<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k1">void</span> MoveHumanRight<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="k1">int</span> BoundingBox<span class="k2">(</span><span class="k1">int</span> b1_x, <span class="k1">int</span> b1_y, <span class="k1">int</span> b1_w, <span class="k1">int</span> b1_h, <span class="k1">int</span> b2_x, <span class="k1">int</span> b2_y, <span class="k1">int</span> b2_w, <span class="k1">int</span> b2_h<span class="k2">)</span>
<span class="number">  28</span><span class="k2">{</span>
<span class="number">  29</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>b1_x <span class="k3">&gt;</span> b2_x <span class="k3">+</span> b2_w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>b1_y <span class="k3">&gt;</span> b2_y <span class="k3">+</span> b2_h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>b2_x <span class="k3">&gt;</span> b1_x <span class="k3">+</span> b1_w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>b2_y <span class="k3">&gt;</span> b1_y <span class="k3">+</span> b1_h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  30</span>  <span class="k2">{</span>
<span class="number">  31</span>    <span class="c">//no collision</span>
<span class="number">  32</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  33</span>  <span class="k2">}</span>
<span class="number">  34</span>  <span class="c">//collision</span>
<span class="number">  35</span>  <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  36</span><span class="k2">}</span>
<span class="number">  37</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>  <span class="c">//==========================================</span>
<span class="number">  41</span>  <span class="c">//PROJECT VARIABLES</span>
<span class="number">  42</span>  <span class="c">//==========================================</span>
<span class="number">  43</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  44</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>  <span class="k1">bool</span> bound <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">bool</span> collision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>  Player Human1<span class="k2">;</span>
<span class="number">  50</span>  Player Human2<span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span>  Human1.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  53</span>  Human1.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>  Human2.x <span class="k3">=</span> WIDTH <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  56</span>  Human2.y <span class="k3">=</span> HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">int</span> b1_x<span class="k2">;</span>
<span class="number">  59</span>  <span class="k1">int</span> b1_y<span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">int</span> b1_w<span class="k2">;</span>
<span class="number">  61</span>  <span class="k1">int</span> b1_h<span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>  <span class="k1">int</span> b2_x<span class="k2">;</span>
<span class="number">  64</span>  <span class="k1">int</span> b2_y<span class="k2">;</span>
<span class="number">  65</span>  <span class="k1">int</span> b2_w<span class="k2">;</span>
<span class="number">  66</span>  <span class="k1">int</span> b2_h<span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>  b1_x <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number">  69</span>  b1_y <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number">  70</span>  b1_w <span class="k3">=</span> Human1.w<span class="k2">;</span>
<span class="number">  71</span>  b1_h <span class="k3">=</span> Human1.h<span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>  b2_x <span class="k3">=</span> Human2.x<span class="k2">;</span>
<span class="number">  74</span>  b2_y <span class="k3">=</span> Human2.y<span class="k2">;</span>
<span class="number">  75</span>  b2_w <span class="k3">=</span> Human2.w<span class="k2">;</span>
<span class="number">  76</span>  b2_h <span class="k3">=</span> Human2.h<span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>  
<span class="number">  79</span>  
<span class="number">  80</span>
<span class="number">  81</span>  <span class="c">//==========================================</span>
<span class="number">  82</span>  <span class="c">//ALLEGRO VARIABLES</span>
<span class="number">  83</span>  <span class="c">//==========================================</span>
<span class="number">  84</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">  85</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  86</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  87</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>font18 <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  88</span>
<span class="number">  89</span>  <span class="c">//==========================================</span>
<span class="number">  90</span>  <span class="c">//ALLEGRO INIT FUNCTIONS</span>
<span class="number">  91</span>  <span class="c">//==========================================</span>
<span class="number">  92</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">  93</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  98</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>  <span class="c">//==========================================</span>
<span class="number"> 101</span>  <span class="c">//ADDON INSTALL</span>
<span class="number"> 102</span>  <span class="c">//==========================================</span>
<span class="number"> 103</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"> 104</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</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"> 108</span>
<span class="number"> 109</span>  <span class="c">//==========================================</span>
<span class="number"> 110</span>  <span class="c">//PROJECT INIT</span>
<span class="number"> 111</span>  <span class="c">//==========================================</span>
<span class="number"> 112</span>  font18 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">18</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>
<span class="number"> 114</span>  Human1.image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"NPC1.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>Human1.image, <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">105</span>, <span class="n">74</span>, <span class="n">46</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>  Human2.image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"NPC1.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>Human2.image, <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">105</span>, <span class="n">74</span>, <span class="n">46</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>
<span class="number"> 119</span>  Human1.w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  Human1.h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>
<span class="number"> 122</span>  Human2.w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>Human2.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  Human2.h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>Human2.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>  
<span class="number"> 125</span>  <span class="c">//==========================================</span>
<span class="number"> 126</span>  <span class="c">//TIMER INIT AND STARTUP</span>
<span class="number"> 127</span>  <span class="c">//==========================================</span>
<span class="number"> 128</span>  event_queue <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"> 129</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> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</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>event_queue, <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"> 132</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>event_queue, <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"> 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="k1">while</span> <span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number"> 136</span>  <span class="k2">{</span>
<span class="number"> 137</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 138</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>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>
<span class="number"> 140</span>    <span class="c">//==========================================</span>
<span class="number"> 141</span>    <span class="c">//INPUT</span>
<span class="number"> 142</span>    <span class="c">//==========================================</span>
<span class="number"> 143</span>    <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 144</span>    <span class="k2">{</span>
<span class="number"> 145</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 146</span>      <span class="k2">{</span>
<span class="number"> 147</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 148</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 149</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 150</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 151</span>        keys<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"> 152</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 153</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 154</span>        keys<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"> 155</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 156</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 157</span>        keys<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"> 158</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 159</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 160</span>        keys<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"> 161</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 162</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 163</span>        keys<span class="k2">[</span>SPACE<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_W:
<span class="number"> 166</span>        keys<span class="k2">[</span>W<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="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 169</span>        keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 170</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 171</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number"> 172</span>        keys<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 173</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 174</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number"> 175</span>        keys<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</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="k2">}</span>
<span class="number"> 178</span>    <span class="k2">}</span>
<span class="number"> 179</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 180</span>    <span class="k2">{</span>
<span class="number"> 181</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 182</span>      <span class="k2">{</span>
<span class="number"> 183</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 184</span>        done <span class="k3">=</span> <span class="k1">true</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_UP:
<span class="number"> 187</span>        keys<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"> 188</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 189</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 190</span>        keys<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"> 191</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 192</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 193</span>        keys<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"> 194</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 195</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 196</span>        keys<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"> 197</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 198</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 199</span>        keys<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 200</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 201</span>      <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number"> 202</span>        keys<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 203</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 204</span>      <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 205</span>        keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 206</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 207</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number"> 208</span>        keys<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 209</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 210</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number"> 211</span>        keys<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 212</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 213</span>      <span class="k2">}</span>
<span class="number"> 214</span>    <span class="k2">}</span>
<span class="number"> 215</span>    <span class="c">//==========================================</span>
<span class="number"> 216</span>    <span class="c">//GAME UPDATE</span>
<span class="number"> 217</span>    <span class="c">//==========================================</span>
<span class="number"> 218</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 219</span>    <span class="k2">{</span>
<span class="number"> 220</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 221</span>      <span class="k1">if</span> <span class="k2">(</span>BoundingBox<span class="k2">(</span>b1_x, b1_y, b1_w, b1_h, b2_x, b2_y, b2_w, b2_h<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 222</span>      <span class="k2">{</span>
<span class="number"> 223</span>        <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 224</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 226</span>          MoveHumanDown<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>A<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 228</span>          MoveHumanLeft<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>D<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 230</span>          MoveHumanRight<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>      <span class="k2">}</span>
<span class="number"> 232</span>    <span class="k2">}</span>
<span class="number"> 233</span>    <span class="c">//==========================================</span>
<span class="number"> 234</span>    <span class="c">//RENDER</span>
<span class="number"> 235</span>    <span class="c">//==========================================</span>
<span class="number"> 236</span>    <span class="k1">if</span><span class="k2">(</span>render <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>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 237</span>    <span class="k2">{</span>
<span class="number"> 238</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 239</span>
<span class="number"> 240</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Human2.image, Human2.x <span class="k3">-</span> Human2.w <span class="k3">/</span> <span class="n">2</span>, Human2.y <span class="k3">-</span> Human2.h <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"> 241</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Human1.image, Human1.x <span class="k3">-</span> Human1.w <span class="k3">/</span> <span class="n">2</span>, Human1.y <span class="k3">-</span> Human1.h <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"> 242</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"> 243</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"> 244</span>    <span class="k2">}</span>
<span class="number"> 245</span>  <span class="k2">}</span>
<span class="number"> 246</span>  <span class="c">//==========================================</span>
<span class="number"> 247</span>  <span class="c">//DESTROY ALLEGRO OBJECTS</span>
<span class="number"> 248</span>  <span class="c">//==========================================</span>
<span class="number"> 249</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>Human2.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font18<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 252</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"> 253</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>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</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"> 255</span>
<span class="number"> 256</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 257</span><span class="k2">}</span>
<span class="number"> 258</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 259</span><span class="k2">{</span>
<span class="number"> 260</span>  Human1.y <span class="k3">-</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 261</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 262</span>    Human1.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 263</span><span class="k2">}</span>
<span class="number"> 264</span><span class="k1">void</span> MoveHumanDown<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 265</span><span class="k2">{</span>
<span class="number"> 266</span>  Human1.y <span class="k3">+</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 267</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> HEIGHT<span class="k2">)</span>
<span class="number"> 268</span>    Human1.y <span class="k3">=</span> HEIGHT<span class="k2">;</span>
<span class="number"> 269</span><span class="k2">}</span>
<span class="number"> 270</span><span class="k1">void</span> MoveHumanLeft<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 271</span><span class="k2">{</span>
<span class="number"> 272</span>  Human1.x <span class="k3">-</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 273</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 274</span>    Human1.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 275</span><span class="k2">}</span>
<span class="number"> 276</span><span class="k1">void</span> MoveHumanRight<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 277</span><span class="k2">{</span>
<span class="number"> 278</span>  Human1.x <span class="k3">+</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 279</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> WIDTH<span class="k2">)</span>
<span class="number"> 280</span>    Human1.x <span class="k3">=</span> WIDTH<span class="k2">;</span>
<span class="number"> 281</span><span class="k2">}</span>
</div></div><p>

Not sure if I got things in the wrong place or just doing it wrong entirely
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Fri, 22 May 2015 03:27:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re not using the BoundingBox function correctly. It should be used to check whether the player overlaps with something when a key is pressed by checking for the future (one step ahead) position of the player versus the future position of the game objects and walls. Also don&#39;t case the bounds in variables, use the player and game object&#39;s positions directly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Fri, 22 May 2015 08:44:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks beoran. After that I re worked the code and I do have collision being detected and correctly stops my player on the collision.</p><p>However, once collision had been detected I cannot move my player anymore.</p><p>Removed alot of code and left the Collision section in
</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="k1">bool</span> hasCollision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">struct</span> Player
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span>  <span class="k1">int</span> ID<span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  8</span>  <span class="k1">int</span> bx<span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">int</span> by<span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">int</span> w <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">int</span> h <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">int</span> speed <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span>Player Human1<span class="k2">;</span>
<span class="number"> 17</span>Player Human2<span class="k2">;</span>
<span class="number"> 18</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k1">void</span> MoveHumanDown<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k1">void</span> MoveHumanLeft<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k1">void</span> MoveHumanRight<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k1">void</span> Collision<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Player <span class="k3">&amp;</span>Human2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</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"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 27</span>    <span class="k2">{</span>
<span class="number"> 28</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 29</span>      
<span class="number"> 30</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 31</span>      <span class="k2">{</span>
<span class="number"> 32</span>        Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>hasCollision<span class="k2">)</span>
<span class="number"> 34</span>            MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>      <span class="k2">}</span>
<span class="number"> 36</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 37</span>      <span class="k2">{</span>
<span class="number"> 38</span>        Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>hasCollision<span class="k2">)</span>
<span class="number"> 40</span>            MoveHumanDown<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>      <span class="k2">}</span>
<span class="number"> 42</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>A<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 43</span>      <span class="k2">{</span>
<span class="number"> 44</span>        Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>hasCollision<span class="k2">)</span>
<span class="number"> 46</span>          MoveHumanLeft<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>      <span class="k2">}</span>
<span class="number"> 48</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>D<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 49</span>      <span class="k2">{</span>
<span class="number"> 50</span>        Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>hasCollision<span class="k2">)</span>
<span class="number"> 52</span>          MoveHumanRight<span class="k2">(</span>Human1<span class="k2">)</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="k2">}</span>
<span class="number"> 56</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 57</span><span class="k2">}</span>
<span class="number"> 58</span><span class="k1">void</span> Collision<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Player <span class="k3">&amp;</span>Human2<span class="k2">)</span>
<span class="number"> 59</span><span class="k2">{</span>
<span class="number"> 60</span>  hasCollision <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 61</span>
<span class="number"> 62</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> Human2.x <span class="k3">+</span> Human2.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 63</span>    hasCollision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 64</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> Human2.y <span class="k3">+</span> Human2.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 65</span>    hasCollision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 66</span>  <span class="k1">if</span> <span class="k2">(</span>Human2.x <span class="k3">&gt;</span> Human1.x <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 67</span>    hasCollision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 68</span>  <span class="k1">if</span> <span class="k2">(</span>Human2.y <span class="k3">&gt;</span> Human1.y <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 69</span>    hasCollision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 70</span><span class="k2">}</span>
</div></div><p>

I think I understand it, As it now calls to check collision after a key press and before movement. I also changed the variable to hold the player rather than extra variables.</p><p>Although I did change everything into a function now, (Hope that&#39;s heading along the right line).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Fri, 22 May 2015 09:35:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That global variable hasCollision is a bad idea, it&#39;s bound to get out of date. In stead, make the Collide function return an int for C89 or bool for C++ or C99, and then check that in your if.  </p><p>Secondly, the reason your player is getting stuck is because Collision checks the <i>current</i> position of the objects. This means that once a collision happens the object will not be able to move anymore because it will always keep colliding since the overlap already happened, like  bullet stuck in the wall. It&#39;s necessary to check the <i>next</i> position of the game objects by taking their speed into consideration. </p><p>Alternatively, you can leave the collision as it is now, but then, you have to move the player back out of collision whenever collision happens.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Fri, 22 May 2015 10:07:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hope I&#39;m heading in the right direction which this now</p><p>I removed the global hasCollision</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="c">//Player movement</span>
<span class="number">  2</span><span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number">  3</span>      <span class="k2">{</span>
<span class="number">  4</span>        <span class="k1">if</span> <span class="k2">(</span>Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number">  5</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>        <span class="k1">else</span>
<span class="number">  7</span>                                        <span class="c">//Confused here at the moment</span>
<span class="number">  8</span>          Human1.y <span class="k3">+</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number">  9</span>      <span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">//My function now a boolean</span>
<span class="number"> 12</span><span class="k1">bool</span> Collision<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Player <span class="k3">&amp;</span>Human2<span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span><span class="c">//I hope this is what is meant by checking the future position</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">+</span> Human1.speed <span class="k3">&gt;</span> Human2.x <span class="k3">+</span> Human2.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 16</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">+</span> Human1.speed <span class="k3">&gt;</span> Human2.y <span class="k3">+</span> Human2.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 18</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span>Human2.x <span class="k3">&gt;</span> Human1.x <span class="k3">-</span> Human1.speed <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 20</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">if</span> <span class="k2">(</span>Human2.y <span class="k3">&gt;</span> Human1.y <span class="k3">-</span> Human1.speed <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 22</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">else</span>
<span class="number"> 24</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k2">}</span>
</div></div><p>
I know the Human1.y += Human1.speed; is wrong at the moment and as such make my character&#39;s controls reserve after collision, which I&#39;m trying to fix.</p><p>Although now I can collide with something and still move (albeit in the wrong direction haha).</p><p>Does this look slightly better now ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Fri, 22 May 2015 10:55:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, this looks better. What you are doing is actually not so bad at all. There are several ways to do collision handling. The main distinction between these ways is how objects are kept from getting stuck. </p><p>This can be done in general in two ways: 
</p><ul><li><p>Check where the objects will be after moving and if they will collide, don&#39;t move them.
</p></li><li><p>Check if the objects are colliding and were moving before. If thy collide and were moving, put the objects back at their previous position.</p></li></ul><p>The way you are trying is the second correcting approach, which can work if done correctly.  In such an approach you could give the player struct an extra old_x and old_y to keep track of the previous position and restore that on collision.</p><p>Hope that helps. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Fri, 22 May 2015 13:24:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Beoran, long delay as I had stayed up all night trying to get my head around all this bounding box/collision stuff, and so many people write things which are slightly different or totally different to how I have it done and then I get confused <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />.</p><p>I have tried to add in the old_x and old_y value which you mentioned although I still get stuck on the bounding box.</p><p>There is this i found which I think explains what you said about old_x and old_y</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>vector2 oldPos <span class="k3">=</span> currentPos<span class="k2">;</span>
<span class="number">  2</span><span class="n">02</span>
<span class="number">  3</span> 
<span class="number">  4</span><span class="n">03</span>
<span class="number">  5</span>vector2 newPos <span class="k3">=</span> currentPos <span class="k3">+</span> someValue<span class="k2">;</span>
<span class="number">  6</span><span class="n">04</span>
<span class="number">  7</span> 
<span class="number">  8</span><span class="n">05</span>
<span class="number">  9</span><span class="k1">if</span><span class="k2">(</span>collides<span class="k2">(</span>currentPos<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 10</span><span class="n">06</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span><span class="n">07</span>
<span class="number"> 13</span>  currentPos <span class="k3">=</span> oldPos<span class="k2">;</span>
<span class="number"> 14</span><span class="n">08</span>
<span class="number"> 15</span><span class="k2">}</span>
<span class="number"> 16</span><span class="n">09</span>
<span class="number"> 17</span><span class="k1">else</span>
<span class="number"> 18</span><span class="n">10</span>
<span class="number"> 19</span><span class="k2">{</span>
<span class="number"> 20</span><span class="n">11</span>
<span class="number"> 21</span>  currentPos <span class="k3">=</span> newPos<span class="k2">;</span>
<span class="number"> 22</span><span class="n">12</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span><span class="n">13</span>
<span class="number"> 25</span> 
<span class="number"> 26</span><span class="n">14</span>
<span class="number"> 27</span><span class="c">// draw at currentPos</span>
</div></div><p>

Which didn&#39;t seem to work for me</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="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  2</span>    <span class="k2">{</span>
<span class="number">  3</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>      Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span> <span class="c">//This is his vector2 oldPos = curPos</span>
<span class="number">  6</span>      Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span> 
<span class="number">  7</span>
<span class="number">  8</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number">  9</span>      <span class="k2">{</span>
<span class="number"> 10</span>        
<span class="number"> 11</span>        <span class="k1">if</span> <span class="k2">(</span>Collision<span class="k2">(</span>Human1, Human2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 12</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span> <span class="c">// And this would be his currentPos = newPos;</span>
<span class="number"> 13</span>        <span class="k1">else</span>
<span class="number"> 14</span>        <span class="k2">{</span>
<span class="number"> 15</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span> <span class="c">//And he currentPos = oldPos;</span>
<span class="number"> 16</span>        <span class="k2">}</span>
<span class="number"> 17</span>      <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="c">// My move up function, I have 4 one for each x,y direction (not the best way, just how Im learning)</span>
<span class="number"> 20</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>  Human1.y <span class="k3">-</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 24</span>    Human1.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k2">}</span>
</div></div><p>
He states it should work, but I just get stuck again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sat, 23 May 2015 14:53:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re doing this too soon!</p><div class="source-code snippet"><div class="inner"><pre>Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span> 
Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
</pre></div></div><p>

You can only do this <i>after</i> checking that Human1 is not colliding with anything at it&#39;s x and y position. Otherwise you&#39;re just storing the &quot;stuck&quot; coordinates in the oldx and oldy , which makes them useless.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sat, 23 May 2015 19:45:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Got it now, Beoran ty.</p><p>You make me think :-)</p><p>I do like to know that code is correct and what the error is and it helps me figure it out, sometimes it just takes forever, but I have a somewhat working collision</p><p>Although (Sorry another issue) </p><p>My player now kinda bounces back and forth between pixels on collision and if I release the movement key while he is furthest away from the collision he can carry on moving as normal, but if i release the movement key when he is closest to collision he gets stuck.</p><p>What area of the code would/could causes this issue ?</p><p>I&#39;ve tried to add/subtract numbers from various x/y values to compensate for this but haven&#39;t fixed it yet</p><p>EDIT, I kinda got the bouncing to stop, but it then stops me moving in the other axis, so if I collided --&gt; i cant move up or down.  Still working on it though :-)</p><p>EDIT AGAIN, I think I have solved it now, seems to be working fine.</p><p>EDIT AGAIN: Any idea how I go about adding around 20 different x, y, w, h values for Human2 (There not humans, just keeping it that way for this purpose) Mine seems to be a long long way
</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="k1">void</span> Human2Bounds<span class="k2">(</span>Player Human2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
<span class="number">  8</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">920</span><span class="k2">;</span>
<span class="number"> 11</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number"> 13</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">210</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k2">}</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sat, 23 May 2015 20:27:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In C++, you normally set initial conditions with a constructor.</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="k1">class</span> human<span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>public: <span class="c">//ignore this for now, it just means anyone can access the </span>
<span class="number">  4</span><span class="c">//following code from anywhere in the program.</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">float</span> x<span class="k2">;</span>
<span class="number">  7</span><span class="k1">float</span> y<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">//default constructor, note no return name OR void. Takes no arguments. </span>
<span class="number"> 10</span><span class="c">//This one is automatically made by the compiler (and empty) unless you </span>
<span class="number"> 11</span><span class="c">//override it. It's ALWAYS called when you make an object.</span>
<span class="number"> 12</span>human<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>x <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span> <span class="c">//all humans spawn here unless specified (see next)</span>
<span class="number"> 15</span>y <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span> <span class="c">//custom constructor, same as before but allows you to specify arguments.</span>
<span class="number"> 19</span>human<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>human::x <span class="k3">=</span> x<span class="k2">;</span> <span class="c">//human:: selects the HUMAN class variable "x", needed because we</span>
<span class="number"> 22</span><span class="c">// also have a FUNCTION "x". The other solution is to just use different </span>
<span class="number"> 23</span><span class="c">// names like _x and _y for all class member variables so you can always </span>
<span class="number"> 24</span><span class="c">// tell the difference.</span>
<span class="number"> 25</span>
<span class="number"> 26</span>human::y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>human new_human<span class="k2">;</span> <span class="c">//will be at 200,300</span>
<span class="number"> 34</span>human new_human2<span class="k2">(</span><span class="n">350</span>,<span class="n">350</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//will be at 350,350</span>
<span class="number"> 35</span>
<span class="number"> 36</span>human human_array<span class="k2">[</span><span class="n">100</span><span class="k2">]</span><span class="k2">;</span> <span class="c">//CANNOT use a custom constructor here. How would you specify them?</span>
<span class="number"> 37</span><span class="c">//Solutions:</span>
<span class="number"> 38</span>
<span class="number"> 39</span>human <span class="k3">*</span>human_array<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span> <span class="c">//array of ten pointers to UNASSIGNED humans. Need to create AND assign them.</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span> <span class="n">10</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 42</span><span class="k2">{</span>
<span class="number"> 43</span>human next_human <span class="k3">=</span> <span class="k1">new</span> human<span class="k2">(</span><span class="n">352</span>, <span class="n">250</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//can call custom constructor!</span>
<span class="number"> 44</span>human_array<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> next_human<span class="k2">;</span> <span class="c">//array position i now points to our next human.</span>
<span class="number"> 45</span><span class="k2">}</span> <span class="c">//this creates ten humans all at 352, 250, but we could specify </span>
<span class="number"> 46</span><span class="c">// anything else such as using rand() to randomly populate them.</span>
<span class="number"> 47</span>
<span class="number"> 48</span><span class="c">//CAVEAT. Anything that has a "new" MUST have a "delete."</span>
<span class="number"> 49</span><span class="c">//Because they don't disappear when they go out of scope</span>
<span class="number"> 50</span><span class="c">// like a local (non new) variable will.</span>
<span class="number"> 51</span><span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span> <span class="n">10</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 52</span><span class="k2">{</span>
<span class="number"> 53</span><span class="k1">delete</span> human_array<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 54</span><span class="k2">}</span>
<span class="number"> 55</span>
<span class="number"> 56</span><span class="k2">}</span>
</div></div><p>

[edit] DOH, I confused your post with someone else, so I thought you were using C++.</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="k1">void</span> Human2Bounds<span class="k2">(</span>Player Human2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
<span class="number">  8</span>    Human2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">920</span><span class="k2">;</span>
<span class="number"> 11</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number"> 13</span>    Human2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">210</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k2">}</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>
This actually works fine. But it should be like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> Human2Bounds<span class="k2">(</span>Player Human2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
  <span class="k2">{</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//note i</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>

  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
I don&#39;t understand what &quot;human2bounds&quot; means, but if you&#39;re just setting up coordinates that will work. The gigantic width also confuses me.</p><p>Now as for specific coordinates. You can read in a list of coordinates from a file, from a hand-written array, or, the easiest, use <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html">rand</a>() to randomly select positions:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> Human2Bounds<span class="k2">(</span>Player Human2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
  <span class="k2">{</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">300</span><span class="k2">;</span> <span class="c">//rand() returns 0 to 299</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">300</span><span class="k2">;</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
    Human2<span class="k2">[</span>i<span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>

  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Sat, 23 May 2015 23:52:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Tbh I posted this with 2 human images on to try and get the bounding box collision working, now that seems to be fine I want to try and implement the code into my game.</p><p>Its nothing to to with a Human, the bounding boxes will be for terrain on screen I want collision on (hence the 25 items and strange sizes)</p><p>I just thought I&#39;d keep with the &quot;Humans&quot; so if anyone looked over previous code they could kinda understand it more.</p><p>What I have been doing is drawing rectangles and squares on screen for these items and just need to add them into an array for the bounding boxes.</p><p>Ill read over you help and try and get it working.</p><p>As of now I can only get 1 of the rectangles to work any others I add in the player just goes through them
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 00:12:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have to compare every moving object with every other object it could possibly collide with. There are ways to prune the number of potential collisions but that&#39;s a more advanced topic.</p><p>What you want is a Rectangle struct that stores the rectangle of whatever kind of object needs one. Then you compare rectangles instead of humans.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 May 2015 00:19:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is what I have as of now</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_primitives.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number">   8</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">720</span><span class="k2">;</span>
<span class="number">   9</span><span class="k1">const</span> <span class="k1">int</span> NUM_BOUNDS <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">enum</span> KEYS<span class="k2">{</span> W, A, S, D, SPACE<span class="k2">}</span><span class="k2">;</span>
<span class="number">  11</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="k1">false</span>, <span class="k1">false</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">  12</span>
<span class="number">  13</span><span class="k1">struct</span> Player
<span class="number">  14</span><span class="k2">{</span>
<span class="number">  15</span>  <span class="k1">int</span> ID<span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  17</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  18</span>  <span class="k1">int</span> bx<span class="k2">;</span>
<span class="number">  19</span>  <span class="k1">int</span> by<span class="k2">;</span>
<span class="number">  20</span>  <span class="k1">int</span> oldx<span class="k2">;</span>
<span class="number">  21</span>  <span class="k1">int</span> oldy<span class="k2">;</span>
<span class="number">  22</span>  <span class="k1">int</span> w <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">int</span> h <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number">  24</span>  <span class="k1">int</span> speed <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</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="k1">struct</span> Bounds
<span class="number">  30</span><span class="k2">{</span> <span class="c">//I guess this is what you mean by a rectangle struct that stores the information</span>
<span class="number">  31</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  33</span>  <span class="k1">int</span> w<span class="k2">;</span>
<span class="number">  34</span>  <span class="k1">int</span> h<span class="k2">;</span>
<span class="number">  35</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  36</span>Player Human1<span class="k2">;</span>
<span class="number">  37</span>Bounds b2<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span><span class="k1">void</span> MoveHumanDown<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span><span class="k1">void</span> MoveHumanLeft<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span><span class="k1">void</span> MoveHumanRight<span class="k2">(</span>Player <span class="k3">&amp;</span>Human<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span><span class="k1">void</span> BoundingBoxes<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span><span class="k1">void</span> TestBounds<span class="k2">(</span>Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>
<span class="number">  47</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">  48</span><span class="k2">{</span>
<span class="number">  49</span>  <span class="c">//PROJECT VARIABLES</span>
<span class="number">  50</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  51</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  52</span>
<span class="number">  53</span>  Player Human1<span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>  Human1.x <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number">  56</span>  Human1.y <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">int</span> b1_x<span class="k2">;</span>
<span class="number">  59</span>  <span class="k1">int</span> b1_y<span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">int</span> b1_w<span class="k2">;</span>
<span class="number">  61</span>  <span class="k1">int</span> b1_h<span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>  b1_x <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number">  64</span>  b1_y <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number">  65</span>  b1_w <span class="k3">=</span> Human1.w<span class="k2">;</span>
<span class="number">  66</span>  b1_h <span class="k3">=</span> Human1.h<span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>  Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number">  69</span>  Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>  <span class="c">//ALLEGRO VARIABLES</span>
<span class="number">  72</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">  73</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  74</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  75</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>font18 <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  76</span>
<span class="number">  77</span>  <span class="c">//ALLEGRO INIT FUNCTIONS</span>
<span class="number">  78</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">  79</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  80</span>
<span class="number">  81</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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  84</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>  <span class="c">//ADDON INSTALL</span>
<span class="number">  87</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">  88</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</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">  92</span>
<span class="number">  93</span>  <span class="c">//PROJECT INIT</span>
<span class="number">  94</span>  font18 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">18</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>  Human1.image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"NPC1.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>Human1.image, <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">105</span>, <span class="n">74</span>, <span class="n">46</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>
<span class="number">  99</span>  Human1.w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>  Human1.h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>
<span class="number"> 102</span>  Human1.bx <span class="k3">=</span> Human1.w <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 103</span>  Human1.by <span class="k3">=</span> Human1.h <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 104</span>  
<span class="number"> 105</span>  <span class="c">//TIMER INIT AND STARTUP</span>
<span class="number"> 106</span>  event_queue <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"> 107</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> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</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>event_queue, <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"> 110</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>event_queue, <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"> 111</span>
<span class="number"> 112</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"> 113</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number"> 114</span>  <span class="k2">{</span>
<span class="number"> 115</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 116</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>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>
<span class="number"> 118</span>    <span class="c">//INPUT</span>
<span class="number"> 119</span>    <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 120</span>    <span class="k2">{</span>
<span class="number"> 121</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 122</span>      <span class="k2">{</span>
<span class="number"> 123</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 124</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 125</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 126</span>      <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number"> 127</span>        keys<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 128</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 129</span>      <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 130</span>        keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 131</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 132</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number"> 133</span>        keys<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 134</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 135</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number"> 136</span>        keys<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 137</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 138</span>      <span class="k2">}</span>
<span class="number"> 139</span>    <span class="k2">}</span>
<span class="number"> 140</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 141</span>    <span class="k2">{</span>
<span class="number"> 142</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 143</span>      <span class="k2">{</span>
<span class="number"> 144</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 145</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 146</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 147</span>      <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number"> 148</span>        keys<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 149</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 150</span>      <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 151</span>        keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 152</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 153</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number"> 154</span>        keys<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 155</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 156</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number"> 157</span>        keys<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</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="k2">}</span>
<span class="number"> 160</span>    <span class="k2">}</span>
<span class="number"> 161</span>    <span class="c">//GAME UPDATE</span>
<span class="number"> 162</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 163</span>    <span class="k2">{</span>
<span class="number"> 164</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 165</span>      TestBounds<span class="k2">(</span>b2, NUM_BOUNDS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 168</span>      <span class="k2">{</span>
<span class="number"> 169</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, b2, NUM_BOUNDS<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 170</span>        <span class="k2">{</span>
<span class="number"> 171</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 172</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 173</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>        <span class="k2">}</span>
<span class="number"> 175</span>        <span class="k1">else</span>
<span class="number"> 176</span>        <span class="k2">{</span>
<span class="number"> 177</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 178</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 179</span>        <span class="k2">}</span>
<span class="number"> 180</span>      <span class="k2">}</span>
<span class="number"> 181</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 182</span>      <span class="k2">{</span>
<span class="number"> 183</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, b2, NUM_BOUNDS<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 184</span>        <span class="k2">{</span>
<span class="number"> 185</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 186</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 187</span>          MoveHumanDown<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>      <span class="k2">}</span>
<span class="number"> 189</span>        <span class="k1">else</span>
<span class="number"> 190</span>        <span class="k2">{</span>
<span class="number"> 191</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 192</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 193</span>        <span class="k2">}</span>
<span class="number"> 194</span>      <span class="k2">}</span>
<span class="number"> 195</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>A<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 196</span>      <span class="k2">{</span>
<span class="number"> 197</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, b2, NUM_BOUNDS<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 198</span>        <span class="k2">{</span>
<span class="number"> 199</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 200</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 201</span>          MoveHumanLeft<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>        <span class="k2">}</span>
<span class="number"> 203</span>        <span class="k1">else</span>
<span class="number"> 204</span>        <span class="k2">{</span>
<span class="number"> 205</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 206</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 207</span>        <span class="k2">}</span>
<span class="number"> 208</span>      <span class="k2">}</span>
<span class="number"> 209</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>D<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 210</span>      <span class="k2">{</span>
<span class="number"> 211</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, b2, NUM_BOUNDS<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 212</span>        <span class="k2">{</span>
<span class="number"> 213</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 214</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 215</span>          MoveHumanRight<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>        <span class="k2">}</span>
<span class="number"> 217</span>        <span class="k1">else</span>
<span class="number"> 218</span>        <span class="k2">{</span>
<span class="number"> 219</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 220</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 221</span>        <span class="k2">}</span>
<span class="number"> 222</span>      <span class="k2">}</span>
<span class="number"> 223</span>    <span class="k2">}</span>
<span class="number"> 224</span>    <span class="c">//RENDER</span>
<span class="number"> 225</span>    <span class="k1">if</span><span class="k2">(</span>render <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>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 226</span>    <span class="k2">{</span>
<span class="number"> 227</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 228</span>      BoundingBoxes<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>
<span class="number"> 230</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Human2.image, Human2.x <span class="k3">-</span> Human2.w <span class="k3">/</span> <span class="n">2</span>, Human2.y <span class="k3">-</span> Human2.h <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"> 231</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Human1.image, Human1.x <span class="k3">-</span> Human1.w <span class="k3">/</span> <span class="n">2</span>, Human1.y <span class="k3">-</span> Human1.h <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"> 232</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"> 233</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"> 234</span>    <span class="k2">}</span>
<span class="number"> 235</span>  <span class="k2">}</span>
<span class="number"> 236</span>  <span class="c">//DESTROY ALLEGRO OBJECTS</span>
<span class="number"> 237</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>Human1.image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font18<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 239</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"> 240</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>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 241</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"> 242</span>
<span class="number"> 243</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 244</span><span class="k2">}</span>
<span class="number"> 245</span><span class="k1">void</span> MoveHumanUp<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 246</span><span class="k2">{</span><span class="c">//Movement</span>
<span class="number"> 247</span>  Human1.y <span class="k3">-</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 248</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 249</span>    Human1.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 250</span><span class="k2">}</span>
<span class="number"> 251</span><span class="k1">void</span> MoveHumanDown<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 252</span><span class="k2">{</span><span class="c">//Movement</span>
<span class="number"> 253</span>  Human1.y <span class="k3">+</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 254</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> HEIGHT<span class="k2">)</span>
<span class="number"> 255</span>    Human1.y <span class="k3">=</span> HEIGHT<span class="k2">;</span>
<span class="number"> 256</span><span class="k2">}</span>
<span class="number"> 257</span><span class="k1">void</span> MoveHumanLeft<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 258</span><span class="k2">{</span><span class="c">//Movement</span>
<span class="number"> 259</span>  Human1.x <span class="k3">-</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 260</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 261</span>    Human1.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 262</span><span class="k2">}</span>
<span class="number"> 263</span><span class="k1">void</span> MoveHumanRight<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1<span class="k2">)</span>
<span class="number"> 264</span><span class="k2">{</span><span class="c">//Movement</span>
<span class="number"> 265</span>  Human1.x <span class="k3">+</span><span class="k3">=</span> Human1.speed<span class="k2">;</span>
<span class="number"> 266</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> WIDTH<span class="k2">)</span>
<span class="number"> 267</span>    Human1.x <span class="k3">=</span> WIDTH<span class="k2">;</span>
<span class="number"> 268</span><span class="k2">}</span>
<span class="number"> 269</span><span class="k1">void</span> BoundingBoxes<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 270</span><span class="k2">{</span>
<span class="number"> 271</span>  <span class="c">//Only here to draw rectangles on screen to get co-ords (Will be removed once im done)</span>
<span class="number"> 272</span>
<span class="number"> 273</span>  <span class="c">//Top Mountains</span>
<span class="number"> 274</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><span class="n">0</span>, <span class="n">0</span>, <span class="n">860</span>, <span class="n">90</span>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</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><span class="n">920</span>, <span class="n">0</span>, <span class="n">1280</span>, <span class="n">210</span>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 276</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><span class="n">1160</span>, <span class="n">210</span>, <span class="n">1280</span>, <span class="n">280</span>, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 277</span><span class="k2">}</span>
<span class="number"> 278</span><span class="k1">void</span> TestBounds<span class="k2">(</span>Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 279</span><span class="k2">{</span> <span class="c">//Give the x,y,w,h values</span>
<span class="number"> 280</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 281</span>  <span class="k2">{</span>
<span class="number"> 282</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 283</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 284</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
<span class="number"> 285</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>
<span class="number"> 286</span>
<span class="number"> 287</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">920</span><span class="k2">;</span>
<span class="number"> 288</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 289</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">360</span><span class="k2">;</span>
<span class="number"> 290</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">210</span><span class="k2">;</span>
<span class="number"> 291</span>  <span class="k2">}</span>
<span class="number"> 292</span><span class="k2">}</span>
<span class="number"> 293</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 294</span><span class="k2">{</span><span class="c">//Test for collision</span>
<span class="number"> 295</span>
<span class="number"> 296</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 297</span>  <span class="k2">{</span>
<span class="number"> 298</span>    <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">+</span> b2<span class="k2">[</span>i<span class="k2">]</span>.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 299</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 300</span>    <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">+</span> b2<span class="k2">[</span>i<span class="k2">]</span>.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 301</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 302</span>    <span class="k1">if</span> <span class="k2">(</span>b2<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">&gt;</span> Human1.x <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 303</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 304</span>    <span class="k1">if</span> <span class="k2">(</span>b2<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">&gt;</span> Human1.y <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 305</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 306</span>    <span class="k1">else</span>
<span class="number"> 307</span>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 308</span>  <span class="k2">}</span>
<span class="number"> 309</span><span class="k2">}</span>
</div></div><p>


@ Chris<br />I used (Changed your code to match mine)
</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="k1">void</span> TestBounds<span class="k2">(</span>Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    b2<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//note i</span>
<span class="number">  6</span>    b2<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>    b2<span class="k2">[</span>i<span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
<span class="number">  8</span>    b2<span class="k2">[</span>i<span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  <span class="k2">}</span>
<span class="number"> 11</span><span class="k2">}</span>
</div></div><p>
But this didn&#39;t seem to allow any collision, probably my coding somewhere, it always is.<br />And again I really appreciate all your help guys, it is helping me learn, albeit slow at times.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 00:35:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allow me to explain in code :
</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="k1">typedef</span> <span class="k1">struct</span> Rectangle <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">int</span> x,y,w,h<span class="k2">;</span>
<span class="number">  3</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">void</span> RectSet<span class="k2">(</span>Rectangle<span class="k3">*</span> r , <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">  6</span>   r-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  7</span>   r-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  8</span>   r-&gt;w <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  9</span>   r-&gt;h <span class="k3">=</span> h<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> RectInit<span class="k2">(</span>Rectangle<span class="k3">*</span> r<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>   RectSet<span class="k2">(</span>r , <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"> 14</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">bool</span> RectanglesCollide<span class="k2">(</span>Rectangle<span class="k3">*</span> r1 , Rectangle<span class="k3">*</span> r2<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>   <span class="k1">return</span> <span class="k2">(</span><span class="k3">!</span> <span class="k2">(</span> <span class="k2">(</span><span class="k2">(</span>r2-&gt;x <span class="k3">+</span> r2-&gt;w<span class="k2">)</span> <span class="k3">&lt;</span> r1-&gt;x<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="c">// check r2 right x against r1 left x</span>
<span class="number"> 18</span>               <span class="k2">(</span><span class="k2">(</span>r1-&gt;x <span class="k3">+</span> r1-&gt;w<span class="k2">)</span> <span class="k3">&lt;</span> r2-&gt;x<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="c">// check r1 right x against r2 left x</span>
<span class="number"> 19</span>               <span class="k2">(</span><span class="k2">(</span>r2-&gt;y <span class="k3">+</span> r2-&gt;h<span class="k2">)</span> <span class="k3">&lt;</span> r1-&gt;y<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="c">// check r2 bottom y against r1 top y</span>
<span class="number"> 20</span>               <span class="k2">(</span><span class="k2">(</span>r1-&gt;y <span class="k3">+</span> r1-&gt;h<span class="k2">)</span> <span class="k3">&lt;</span> r2-&gt;y<span class="k2">)</span> <span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">// check r1 bottom y against r2 top y</span>
<span class="number"> 21</span><span class="k2">}</span>
</div></div><p>

Then you include a Rectangle member in your Human or other structs if they need one. 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> Human <span class="k2">{</span>
   <span class="c">// ...</span>
   Rectangle pos<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

And you test for collision between Humans and other objects (such as Humans) by checking their rectangles.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> HumansCollide<span class="k2">(</span>Human<span class="k3">*</span> h1 , Human<span class="k3">*</span> h2<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">return</span> RectCollide<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>h1-&gt;pos<span class="k2">)</span> , <span class="k3">&amp;</span><span class="k2">(</span>h2-&gt;pos<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 May 2015 01:11:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You certainly seem to know what your talking about Edgar in the way you respond with your coding, although at times I don&#39;t understand your code especially for this newbie (Bearing in mind my C++/Allegro5 knowledge was none existent a month - 6 weeks ago and I only watched Mike Geigs tutorials and some of CodingMadeEasy).</p><p>If I do get what you mean, should it be like this for me ? I&#39;m trying not to change too much as I need to be able to take this code and put it straight into my game&#39;s code.</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="k1">typedef</span> <span class="k1">struct</span> Bounds <span class="c">//Not sure what typedef is for :-(</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">int</span> x, y, w, h<span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">typedef</span> <span class="k1">struct</span> Player
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span><span class="c">//Other Player things in here too</span>
<span class="number">  8</span>  Bounds<span class="k3">*</span> b2<span class="k2">;</span>
<span class="number">  9</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 10</span>Bounds<span class="k3">*</span> b2<span class="k2">;</span> <span class="c">//Not sure if I still need this, I think I do</span>
<span class="number"> 11</span><span class="k1">int</span> main
<span class="number"> 12</span><span class="k2">{</span><span class="c">//Example piece of code to show how I call the function in main.</span>
<span class="number"> 13</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 14</span>    <span class="k2">{</span>
<span class="number"> 15</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 16</span>      TestBounds<span class="k2">(</span><span class="k3">*</span>b2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 19</span>      <span class="k2">{</span>
<span class="number"> 20</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, <span class="k3">*</span>b2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 21</span>        <span class="k2">{</span>
<span class="number"> 22</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 23</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 24</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>        <span class="k2">}</span>
<span class="number"> 26</span>        <span class="k1">else</span>
<span class="number"> 27</span>        <span class="k2">{</span>
<span class="number"> 28</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 29</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 30</span>        <span class="k2">}</span>
<span class="number"> 31</span>      <span class="k2">}</span>
<span class="number"> 32</span><span class="k2">}</span>
<span class="number"> 33</span><span class="k1">void</span> BoundsSet<span class="k2">(</span>Bounds<span class="k3">*</span> b2, <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="number"> 34</span><span class="k2">{</span>
<span class="number"> 35</span>  b2-&gt;x <span class="k3">=</span> x<span class="k2">;</span> <span class="c">// Not sure what -&gt;x means either, im guessing the value b2 has stored for x.</span>
<span class="number"> 36</span>  b2-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 37</span>  b2-&gt;w <span class="k3">=</span> w<span class="k2">;</span>
<span class="number"> 38</span>  b2-&gt;h <span class="k3">=</span> h<span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span><span class="k1">void</span> TestBounds<span class="k2">(</span>Bounds<span class="k3">*</span> b2<span class="k2">)</span>
<span class="number"> 41</span><span class="k2">{</span>
<span class="number"> 42</span>  BoundsSet<span class="k2">(</span>b2, <span class="n">0</span>, <span class="n">0</span>, <span class="n">860</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>  BoundsSet<span class="k2">(</span>b2, <span class="n">920</span>, <span class="n">0</span>, <span class="n">360</span>, <span class="n">210</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span><span class="k2">}</span>
<span class="number"> 45</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Bounds<span class="k3">*</span> b2<span class="k2">)</span>
<span class="number"> 46</span><span class="k2">{</span>
<span class="number"> 47</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2-&gt;x <span class="k3">+</span> b2-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 48</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 49</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2-&gt;y <span class="k3">+</span> b2-&gt;h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 50</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 51</span>  <span class="k1">if</span> <span class="k2">(</span>b2-&gt;x <span class="k3">&gt;</span> Human1.x <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 52</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 53</span>  <span class="k1">if</span> <span class="k2">(</span>b2-&gt;y <span class="k3">&gt;</span> Human1.y <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 54</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 55</span>  <span class="k1">else</span>
<span class="number"> 56</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 57</span><span class="k2">}</span>
</div></div><p>
If this is somewhat correct then it breaks at my BoundsSet function @ b2-&gt;x = x; saying Unhandled exception at 0x01352644 in Testing.exe: Access violation writing location 0x00000000.</p><p>I think I have all your code in place, and again I&#39;m sorry if I don&#39;t fully grasp everything you helping me on.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 01:53:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Take a look at the highlighted lines (which have problems) and the comments I made
</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="k1">typedef</span> <span class="k1">struct</span> Player <span class="k2">{</span>
<span class="number">  2</span> Bounds<span class="k3">*</span> b2<span class="k2">;</span>
<span class="number">  3</span><span class="k2">}</span><span class="k2">;</span> 
<span class="number">  4</span>
<span class="number">  5</span><span class="c">// This is shadowed (has the same name as another variable)</span>
<span class="number">  6</span><span class="c">// and uninitialized (you never give it a value)</span>
<div class="highlight"><span class="number">  7</span>Bounds<span class="k3">*</span> b2<span class="k2">;</span></div><span class="number">  8</span>
<span class="number">  9</span>Player p1<span class="k2">;</span><span class="c">// our bounds is inside the player struct</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">//...</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="c">//Example piece of code to show how I call the function in main. </span>
<span class="number"> 14</span><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span> render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span> 
<span class="number"> 16</span>
<span class="number"> 17</span> <span class="c">// This is unitialized. Accessing it will crash</span>
<div class="highlight"><span class="number"> 18</span> TestBounds<span class="k2">(</span><span class="k3">*</span>b2<span class="k2">)</span><span class="k2">;</span></div><span class="number"> 19</span>
<span class="number"> 20</span> <span class="c">// This is what you want</span>
<span class="number"> 21</span> TestBounds<span class="k2">(</span>p1-&gt;b2<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Please note that this code still has problems. p1-&gt;b2 is still unitialized. You never allocate memory for the Bounds struct. What you want is probably a member variable for Bounds that isn&#39;t a pointer.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> Player <span class="k2">{</span>
   Bounds b<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
TestBounds<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>p1-&gt;b<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 May 2015 02:24:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry, just not getting this, i just keep getting faced with errors
</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="k1">typedef</span> <span class="k1">struct</span> Bounds
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">int</span> x, y, w, h<span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">typedef</span> <span class="k1">struct</span> Player
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>  <span class="k1">int</span> ID<span class="k2">;</span>
<span class="number">  8</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">int</span> bx<span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">int</span> by<span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">int</span> oldx<span class="k2">;</span>
<span class="number"> 13</span>  <span class="k1">int</span> oldy<span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">int</span> w <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">int</span> h <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">int</span> speed <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 17</span>  Bounds b<span class="k2">;</span>
<span class="number"> 18</span>  Bounds<span class="k3">*</span> b2<span class="k2">;</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 21</span>Player Human1<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">void</span> BoundsSet<span class="k2">(</span>Bounds<span class="k3">*</span> b2, <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"> 24</span><span class="k1">void</span> TestBounds<span class="k2">(</span>Bounds<span class="k3">*</span> b2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Bounds b2, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span><span class="k1">int</span> main
<span class="number"> 28</span><span class="k2">{</span>
<span class="number"> 29</span><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 30</span>    <span class="k2">{</span>
<span class="number"> 31</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 32</span>      TestBounds<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>Human1-&gt;b<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//Error Player Human1 Error: expression must have a pointer type.</span>
<span class="number"> 33</span>
<span class="number"> 34</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 35</span>      <span class="k2">{</span>
<span class="number"> 36</span>        <span class="c">//if (Collision(Human1, Human2) == false)</span>
<span class="number"> 37</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, <span class="k3">&amp;</span><span class="k2">(</span>Human1-&gt;b<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span><span class="c">//Error Player Human1 Error: expression must have a pointer type</span>
<span class="number"> 38</span>        <span class="k2">{</span>
<span class="number"> 39</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 40</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 41</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</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="number"> 44</span>        <span class="k2">{</span>
<span class="number"> 45</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 46</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 47</span>        <span class="k2">}</span>
<span class="number"> 48</span>      <span class="k2">}</span>
<span class="number"> 49</span><span class="k2">}</span>
<span class="number"> 50</span><span class="k1">void</span> BoundsSet<span class="k2">(</span>Bounds<span class="k3">*</span> b2, <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="number"> 51</span><span class="k2">{</span>
<span class="number"> 52</span>  b2-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 53</span>  b2-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 54</span>  b2-&gt;w <span class="k3">=</span> w<span class="k2">;</span>
<span class="number"> 55</span>  b2-&gt;h <span class="k3">=</span> h<span class="k2">;</span>
<span class="number"> 56</span><span class="k2">}</span>
<span class="number"> 57</span><span class="k1">void</span> TestBounds<span class="k2">(</span>Bounds<span class="k3">*</span> b2<span class="k2">)</span>
<span class="number"> 58</span><span class="k2">{</span>
<span class="number"> 59</span>  BoundsSet<span class="k2">(</span>b2, <span class="n">0</span>, <span class="n">0</span>, <span class="n">860</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>  BoundsSet<span class="k2">(</span>b2, <span class="n">920</span>, <span class="n">0</span>, <span class="n">360</span>, <span class="n">210</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span><span class="k2">}</span>
<span class="number"> 62</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Player<span class="k3">*</span> b2<span class="k2">)</span>
<span class="number"> 63</span><span class="k2">{</span>
<span class="number"> 64</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.x <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2-&gt;x <span class="k3">+</span> b2-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 65</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 66</span>  <span class="k1">if</span> <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> b2-&gt;y <span class="k3">+</span> b2-&gt;h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 67</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 68</span>  <span class="k1">if</span> <span class="k2">(</span>b2-&gt;x <span class="k3">&gt;</span> Human1.x <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 69</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 70</span>  <span class="k1">if</span> <span class="k2">(</span>b2-&gt;y <span class="k3">&gt;</span> Human1.y <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 71</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 72</span>  <span class="k1">else</span>
<span class="number"> 73</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 74</span><span class="k2">}</span>
</div></div><p>

I though I nearly had it when I did it earlier which was this way, but I&#39;m guessing this way can&#39;t work which is a shame
</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="k1">void</span> TestBounds<span class="k2">(</span>Bounds b2<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span> <span class="c">//Give the x,y,w,h values</span>
<span class="number">  3</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">860</span><span class="k2">;</span>
<span class="number">  8</span>    b2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">90</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">920</span><span class="k2">;</span>
<span class="number"> 11</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.w <span class="k3">=</span> <span class="n">360</span><span class="k2">;</span>
<span class="number"> 13</span>    b2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.h <span class="k3">=</span> <span class="n">210</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k2">}</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>
I think the problem I am having it that I don&#39;t fully understand the setup up between having a struct then calling information from it inside another struct and linking everything together and I only have 2 days left before I finish the game:-(
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 04:49:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What you really need is a primer on C.</p><p>Given this declaration :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> Rectangle <span class="k2">{</span>
  <span class="k1">int</span> x,y,w,h<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
<span class="k1">struct</span> Player <span class="k2">{</span>
   Rectangle r<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

You can create an array of one of them like this :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">const</span> <span class="k1">int</span> array_size <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>

Rectangle rects<span class="k2">[</span>array_size<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
   <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span>,
   <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span>,
   <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span>,
   <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
You don&#39;t have to specify a size in this case but it never hurts to specify it directly.</p><p>You access data members either through the struct or through a pointer.</p><div class="source-code snippet"><div class="inner"><pre>Rectangle r <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span><span class="k2">;</span>
Rectangle<span class="k3">*</span> prect <span class="k3">=</span> <span class="k3">&amp;</span>r<span class="k2">;</span>

r.x <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
prect-&gt;y <span class="k3">=</span> <span class="n">15</span><span class="k2">;</span>
</pre></div></div><p>

And when you have nested structs you follow from outer to inner members :
</p><div class="source-code snippet"><div class="inner"><pre>Player p <span class="k3">=</span> <span class="k2">{</span><span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span><span class="k2">}</span><span class="k2">;</span>
Player<span class="k3">*</span> pplayer <span class="k3">=</span> <span class="k3">&amp;</span>p<span class="k2">;</span>

p.r.x <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
pplayer-&gt;r.y <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
</pre></div></div><p>

And you&#39;ll need a for loop as well :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> array_size <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>v<span class="k2">)</span> <span class="k2">{</span>

<span class="k2">}</span>
</pre></div></div><p>

It has the syntax :
</p><pre>
for (VAR v = initial_value ; v comparison_operator v2 ; v expression) {
</pre><p>

And finally, you access array elements using an index ie <span class="source-code">array<span class="k2">[</span>i<span class="k2">]</span></span> where i is from 0 to size - 1. It is zero indexed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 May 2015 07:31:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to work through you code again Edgar, and I appreciate your time on this</p><p>Taking things 1 step at a time</p><p>If I do </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="k1">struct</span> Rectangle <span class="k2">{</span>
<span class="number"> 2</span>  <span class="k1">int</span> x,y,w,h<span class="k2">;</span>
<span class="number"> 3</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 4</span><span class="k1">struct</span> Player <span class="k2">{</span>
<span class="number"> 5</span>   Rectangle r<span class="k2">;</span>
<span class="number"> 6</span><span class="c">//Rectangle errors with:- BOOL_stdcall Rectangle(HDC hdc, int left, int top, int right, int bottom)Error:function "Rectangle" is not a type name</span>
<span class="number"> 7</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>
I read into this and 1 person fixed it they said<br />They added:<br />#using &lt;system.drawing.dll&gt;<br />at the top<br />However if I add this I get : Error:&quot;#using&quot; requires C++/CLI mode
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 21:46:03 +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/615394/1013524#target">Lasaqus7</a> said:</div><div class="quote"><p>
I read into this and 1 person fixed it they said<br />They added:<br />#using &lt;system.drawing.dll&gt;<br />at the top<br />However if I add this I get : Error:&quot;#using&quot; requires C++/CLI mode 
</p></div></div><p>
That is not how you fix it. :/</p><p>The error has to do with Microsoft so helpfully defining a function named Rectangle which conflicts with naming the struct Rectangle as well. If you #define NOGDI before including windows headers then the Rectangle function won&#39;t be visible.</p><p>Try this code with and without NOGDI defined :
</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="number">  3</span>
<span class="number">  4</span><span class="p">#define NOGDI</span>
<span class="number">  5</span><span class="p">#include "windows.h"</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">struct</span> Rectangle <span class="k2">{</span>
<span class="number">  8</span>   <span class="k1">int</span> x,y,w,h<span class="k2">;</span>
<span class="number">  9</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">struct</span> Player <span class="k2">{</span>
<span class="number"> 12</span>   Rectangle r<span class="k2">;</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>   
<span class="number"> 17</span>   Player p<span class="k2">;</span>
<span class="number"> 18</span>   Player<span class="k3">*</span> pp <span class="k3">=</span> <span class="k3">&amp;</span>p<span class="k2">;</span>
<span class="number"> 19</span>   Rectangle<span class="k3">*</span> pr <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>pp-&gt;r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   
<span class="number"> 21</span>   pr-&gt;x <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 22</span>   pr-&gt;y <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 23</span>   
<span class="number"> 24</span>   p.r.w <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 25</span>   p.r.h <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 26</span>   
<span class="number"> 27</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
</div></div><p>

You should get comfortable working with both member access using the dot operator . and dereferencing pointers with the dereference operator -&gt;. &amp; means &quot;the address of&quot; an object, and is what a pointer stores. That&#39;s why I set pp to &amp;p in the code above. It now holds the value of the address of the Player object p. And you can also dereference a pointer with *. *pointer means &quot;the data pointed to by&quot; pointer. And so to access the Player p through pp you would use *pp = Player object.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 May 2015 23:10:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s slowly making some kind of sense to me. Thanks</p><p>I saw the difference between #define NOGDI and without it too, I&#39;d never heard of this till now.</p><p>I have no implemented code which you gave previously and tried to do it the best I could, it now runs without errors, although no collision detected.</p><p>I&#39;m now going to try and see what is not working and hopefully fix it. It is quite difficult to learn as it&#39;s a lot of new things to take in. </p><p>Edit: I think I&#39;m slowly getting there, but having an issue with the array (Not sure where to put it or code it);
</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="k1">struct</span> Rectangle
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">int</span> x, y, w, h<span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">struct</span> Player
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>  Rectangle r<span class="k2">;</span> <span class="c">//Working now</span>
<span class="number">  8</span>  <span class="c">//Other Player Variables</span>
<span class="number">  9</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k1">void</span> RectSet<span class="k2">(</span>Rectangle<span class="k3">*</span> pr, <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"> 11</span><span class="k1">void</span> RectInit<span class="k2">(</span>Rectangle<span class="k3">*</span> pr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Rectangle<span class="k3">*</span> pr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</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"> 15</span><span class="k2">{</span>
<span class="number"> 16</span>  Player p<span class="k2">;</span>
<span class="number"> 17</span>  Player<span class="k3">*</span> pp <span class="k3">=</span> <span class="k3">&amp;</span>p<span class="k2">;</span>
<span class="number"> 18</span>  Rectangle<span class="k3">*</span> pr <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>pp-&gt;r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  RectInit<span class="k2">(</span>pr<span class="k2">)</span><span class="k2">;</span> <span class="c">// Not 100% this goes here</span>
<span class="number"> 20</span><span class="k2">}</span>
<span class="number"> 21</span><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number"> 22</span>  <span class="k2">{</span>
<span class="number"> 23</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 24</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>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 30</span>      <span class="k2">{</span>
<span class="number"> 31</span>        <span class="c">//if (Collision(Human1, Human2) == false)</span>
<span class="number"> 32</span>        <span class="k1">if</span> <span class="k2">(</span>Collision2<span class="k2">(</span>Human1, <span class="k3">&amp;</span><span class="k2">(</span>pp-&gt;r<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 33</span>        <span class="k2">{</span>
<span class="number"> 34</span>          Human1.oldy <span class="k3">=</span> Human1.y<span class="k2">;</span>
<span class="number"> 35</span>          Human1.oldx <span class="k3">=</span> Human1.x<span class="k2">;</span>
<span class="number"> 36</span>          MoveHumanUp<span class="k2">(</span>Human1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>        <span class="k2">}</span>
<span class="number"> 38</span>        <span class="k1">else</span>
<span class="number"> 39</span>        <span class="k2">{</span>
<span class="number"> 40</span>          Human1.y <span class="k3">=</span> Human1.oldy<span class="k2">;</span>
<span class="number"> 41</span>          Human1.x <span class="k3">=</span> Human1.oldx<span class="k2">;</span>
<span class="number"> 42</span>        <span class="k2">}</span>
<span class="number"> 43</span>      <span class="k2">}</span>
<span class="number"> 44</span>    <span class="k2">}</span>
<span class="number"> 45</span><span class="k2">}</span>
<span class="number"> 46</span><span class="c">////////////</span>
<span class="number"> 47</span><span class="c">//END OF MAIN</span>
<span class="number"> 48</span><span class="c">////////////</span>
<span class="number"> 49</span><span class="k1">void</span> RectSet<span class="k2">(</span>Rectangle<span class="k3">*</span> pr, <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="number"> 50</span><span class="k2">{</span>
<span class="number"> 51</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> array_size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 52</span>  <span class="k2">{</span>
<span class="number"> 53</span>    pr-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 54</span>    pr-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 55</span>    pr-&gt;w <span class="k3">=</span> w<span class="k2">;</span>
<span class="number"> 56</span>    pr-&gt;h <span class="k3">=</span> h<span class="k2">;</span>
<span class="number"> 57</span>  <span class="k2">}</span>
<span class="number"> 58</span><span class="k2">}</span>
<span class="number"> 59</span><span class="k1">void</span> RectInit<span class="k2">(</span>Rectangle<span class="k3">*</span> pr<span class="k2">)</span>
<span class="number"> 60</span><span class="k2">{</span>
<span class="number"> 61</span><span class="c">//I guess the array goes here ?</span>
<span class="number"> 62</span>  RectSet<span class="k2">(</span>pr, <span class="n">0</span>, <span class="n">0</span>, <span class="n">860</span>, <span class="n">90</span><span class="k2">)</span>
<span class="number"> 63</span>  RectSet<span class="k2">(</span>pr, <span class="n">920</span>, <span class="n">0</span>, <span class="n">360</span>, <span class="n">210</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span><span class="k2">}</span>
<span class="number"> 65</span><span class="k1">bool</span> Collision2<span class="k2">(</span>Player <span class="k3">&amp;</span>Human1, Rectangle<span class="k3">*</span> pr<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><span class="k2">(</span>Human1.x <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> pr-&gt;x <span class="k3">+</span> pr-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 68</span>    <span class="k2">(</span>Human1.y <span class="k3">&gt;</span> Human1.speed <span class="k3">+</span> pr-&gt;y <span class="k3">+</span> pr-&gt;h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 69</span>    <span class="k2">(</span>pr-&gt;x <span class="k3">&gt;</span> Human1.x <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 70</span>    <span class="k2">(</span>pr-&gt;y <span class="k3">&gt;</span> Human1.y <span class="k3">+</span> Human1.speed <span class="k3">+</span> Human1.h <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 71</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 72</span>  <span class="k1">else</span>
<span class="number"> 73</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 74</span><span class="k2">}</span>
</div></div><p>
I have only managed to get 1 bound to collide, I guess as there is no array whatever the last x, y, w, h values where are the only ones stored.</p><p>I hope I have things in somewhat the correct way now, as you can see I have taken parts of the codes you have provided me
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Sun, 24 May 2015 23:41:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Go ahead and keep posting code if you need to. The best way to learn is from making mistakes and figuring them out. We&#39;re here to help.</p><p>Edit for your edit. Don&#39;t just add code in without knowing what it does. Those were just examples of how to work with structs and pointers, it isn&#39;t all actual code that you should be using.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615394/1013496#target">I</a> said:</div><div class="quote"><p>
 Then you include a Rectangle member in your Human or other structs if they need one.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> Human <span class="k2">{</span>
   <span class="c">// ...</span>
   Rectangle pos<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
And you test for collision between Humans and other objects (such as Humans) by checking their rectangles.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> HumansCollide<span class="k2">(</span>Human<span class="k3">*</span> h1 , Human<span class="k3">*</span> h2<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">return</span> RectCollide<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>h1-&gt;pos<span class="k2">)</span> , <span class="k3">&amp;</span><span class="k2">(</span>h2-&gt;pos<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div></div><p>

Something that will help you is a helper function like this :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> CollideRects<span class="k2">(</span>Rectangle<span class="k3">*</span> r1 , Rectangle<span class="k3">*</span> r2<span class="k2">)</span> <span class="k2">{</span>
<span class="c">//...</span>
<span class="k2">}</span>

<span class="k1">bool</span> CollidePlayerAndHuman<span class="k2">(</span>Player<span class="k3">*</span> p , Human<span class="k3">*</span> h<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">return</span> CollideRects<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>p-&gt;rect<span class="k2">)</span> , <span class="k3">&amp;</span><span class="k2">(</span>h-&gt;rect<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

To create an array, you need to use a constant size variable for the size, or else you need to allocate memory dynamically through malloc or new or new[] and then use free or delete or delete[] respectively.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">const</span> <span class="k1">int</span> MAX_NUM_ENEMIES <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
Human humans<span class="k2">[</span>MAX_NUM_ENEMIES<span class="k2">]</span><span class="k2">;</span>
<span class="c">// or</span>
Human<span class="k3">*</span> mhumans <span class="k3">=</span> <span class="k2">(</span>Human<span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>MAX_NUM_ENEMIES<span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>Human<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="c">// or</span>
Human<span class="k3">*</span> nhumans <span class="k3">=</span> <span class="k1">new</span> Human<span class="k2">[</span>MAX_NUM_ENEMIES<span class="k2">]</span><span class="k2">;</span>
<span class="c">// and then to free it you do either</span>
<a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>mhumans<span class="k2">)</span><span class="k2">;</span>
<span class="c">// or </span>
<span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> nhumans<span class="k2">;</span>
</pre></div></div><p>

Edit2<br />Oh, and I forgot you need to test against the future position. This can easily be accomplished by another helper function :
</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">void</span> MoveRectBy<span class="k2">(</span>Rectangle<span class="k3">*</span> r , <span class="k1">int</span> dx , <span class="k1">int</span> dy<span class="k2">)</span> <span class="k2">{</span>
      r-&gt;x <span class="k3">+</span><span class="k3">=</span> dx<span class="k2">;</span>
      r-&gt;y <span class="k3">+</span><span class="k3">=</span> dy<span class="k2">;</span>
   <span class="k2">}</span>
</pre></div></div><p>
Then to use it you do :
</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">bool</span> CollideHumanWithPlayer<span class="k2">(</span>Human<span class="k3">*</span> h , Player<span class="k3">*</span> p<span class="k2">)</span> <span class="k2">{</span>
      Rect future_human_rect <span class="k3">=</span> h-&gt;rect<span class="k2">;</span>
      MoveRectBy<span class="k2">(</span><span class="k3">&amp;</span>future_human_rect , h-&gt;xvelocity , h-&gt;yvelocity<span class="k2">)</span><span class="k2">;</span>
      <span class="k1">return</span> CollideRects<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>p-&gt;rect<span class="k2">)</span> , <span class="k3">&amp;</span>future_human_rect<span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 May 2015 01:09:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I was kinda thinking the code you posted was to be used to get it to work. But also if I write my code how I get the advice I can sometimes see how and why it works. </p><p>At the moment I have all the movement and things set up to work correctly.</p><p>The only thing I&#39;m working on at the moment, is to have my rectangles co-ordinates set into an array and then pass this array into the collision detection.</p><p>So for example (I know this isn&#39;t code format but easier to do for me)</p><p>RectangleBoundingBox say has 2 rectangles to store data for<br />(x, y, w, h)<br />So my 2 rectangles are<br />(0, 0, 860, 90)<br />(920, 0, 360, 210)<br />These should be stored in an array</p><p>Then in my collision which I have setup as<br />(Human1.x &gt; Human1.speed + RectangleBoundingBoxArray.x + RectangleBoundingBoxArray.w - 1)</p><p>Rather than mutliple rows of that code, all my bounds co-ords should be in an array.<br />As of now I have only managed to collided with 1 rectangle, to me is seems that the array isn&#39;t working well inside the collision function.</p><p>The code you posted, I will look at in future, as I feel the way we got told to program this is not the easiest nor the best, so next time around I&#39;ll be looking into different ways to do it.</p><p>Should I use my array like ARRAYNAME[2][4], so it has 2 rows and 4 co-ords or is that not needed because I&#39;m reading about them and they say to do that with a 2 dimensonal array.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Mon, 25 May 2015 02:34:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Arrays can be hard to work with. You might want to use a std::vector&lt;Rectangle&gt;.</p><p>With a vector you can add a rectangle to your vector at any time.</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;vector&gt;</span>
<span class="number">  2</span><span class="k1">using</span> std::vector<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">struct</span> Rectangle <span class="k2">{</span>
<span class="number">  5</span> <span class="k1">int</span> x,y,w,h<span class="k2">;</span>
<span class="number">  6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</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">  9</span>
<span class="number"> 10</span> vector<span class="k3">&lt;</span>Rectangle&gt; rects<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span> Rectangle r <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span> rects.push_back<span class="k2">(</span>r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span> Rectangle r2 <span class="k3">=</span> <span class="k2">{</span><span class="n">50</span>,<span class="n">50</span>,<span class="n">100</span>,<span class="n">100</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span> rects.push_back<span class="k2">(</span>r2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Size of our rects vector is : %u\n"</span> , rects.size<span class="k2">(</span><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">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> rects.size<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>  Rectangle r <span class="k3">=</span> rects<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span><span class="c">// like an array</span>
<span class="number"> 24</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"r : x = %d , y = %d , w = %d , h = %d\n"</span> , r.x , r.y , r.w , r.h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span> <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
</div></div><p>

SGI&#39;s STL guide is the best way to learn the C++ Standard Template Library.<br /><a href="https://www.sgi.com/tech/stl/">https://www.sgi.com/tech/stl/</a></p><p>And specifically on vectors :<br /><a href="https://www.sgi.com/tech/stl/Vector.html">https://www.sgi.com/tech/stl/Vector.html</a></p><p>Later on once you want to remove objects from your array you might want to use a std::list&lt;Rectangle&gt; instead.<br />Read about list here :<br /><a href="https://www.sgi.com/tech/stl/List.html">https://www.sgi.com/tech/stl/List.html</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 May 2015 12:46:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll look into these Edgar, I&#39;m going to have more time on this as I hand in my game tomorrow.</p><p>I may even look into using the tile map editor to create the bounds for my terrain, it was some that seemed really complicated and I didn&#39;t want to break my game before the hand in.</p><p>I do feel I still went above and beyond what was needed so here&#39;s hoping.</p><p>Not sure where to put this but for everyone that helped on this. I appreciate it, and this is was I came up with in the end.</p><p><a href="https://www.youtube.com/watch?v=okQWN2dOd_Q&amp;feature=youtu.be">My 2D Game</a></p><p>Still issues and bugs to fix, but it will all come in time.</p><p>Thank again all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Lasaqus7)</author>
		<pubDate>Mon, 25 May 2015 18:36:10 +0000</pubDate>
	</item>
</rss>
