<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Two questions: Code seperation, and Game map logic.</title>
		<link>http://www.allegro.cc/forums/view/608643</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 29 Oct 2011 03:44:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am looking for a couple of pieces of advice.</p><p>First can some one show me how to split my code between headers and cpp files? I have managed to start splitting my code, but when I try to access a function from a secondary CPP from my main.cpp it says the function has not been defined.</p><p>here is a very basic example of what I have:</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">//map.h</span>
<span class="number">  2</span>vector<span class="k3">&lt;</span>string&gt; redaMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span><span class="k1">void</span> displayMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="c">//map.cpp </span>
<span class="number">  6</span>vector<span class="k3">&lt;</span>string&gt; readMap<span class="k2">(</span><span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_642.html" target="_blank">read</a> map in from a file.
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span><span class="k1">void</span> displayMap<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span><a href="http://www.allegro.cc/manual/blit"><span class="a">blit</span></a> tiles to the <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="c">//main.cpp</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="p">#include "map.h"</span>
<span class="number"> 18</span>
<span class="number"> 19</span>level_map <span class="k3">=</span> readMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

When running this it tells me that readMap is not defined in this scope. So I have tried map::readMap() and map.readMap().. . but i am missing something, can some one provide some simple examples and reading on how to get this working?</p><p>My next question is this: I have a map that is something like 250 X 250 tiles, and my bitmaps are 32x32, this means I am unable to fit the entire map onto the screen at one time. How can I tell my program to only show the 25 tiles surrounding my player at any given time? (Disclaimer: I have not actually tried to accomplish this yet, but I am having a hard time comprehending how or what I need to do.)</p><p>Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sec_goat)</author>
		<pubDate>Sat, 22 Oct 2011 15:59:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>map.cpp should include map.h</p><p>And readMap has been spelled wrong in map.h.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Sat, 22 Oct 2011 16:51:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you use header guards?</p><p>Header guards are constants that prevent the same header files from being included more than once. So for instance to use map.h you would typically have these lines before and after everything:</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef map_h_included</span>
<span class="p">#define map_h_included</span>
...
<span class="p">#endif</span>
</pre></div></div><p>



For your second question, there&#39;s two things to it. 1, you have to read from a two dimensional array (or other data source representing your map) and draw the tiles relative to the main character.<br />2, you have to make sure not to draw tiles outside the map when near the edges.</p><p>Step 1 is done by doing a bit of conversions like this: draw_x = player_x - total_width/2 + tile_width*map_column</p><p>So what you need is to loop through the screen horizontally and vertically in a double for loop figuring out these coordinates and drawing the sub bitmaps at the spot. </p><p>Step 2 is simply continuing the for loop if the coordinate is outside</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> r<span class="k3">=</span>player_y<span class="k3">/</span><span class="n">32</span><span class="k3">-</span><span class="n">25</span><span class="k2">;</span> r<span class="k3">&lt;</span>player_y<span class="k3">/</span><span class="n">32</span><span class="k3">+</span><span class="n">25</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>r <span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> c<span class="k3">=</span>player_x<span class="k3">/</span><span class="n">32</span><span class="k3">-</span><span class="n">25</span><span class="k2">;</span> c<span class="k3">&lt;</span>player_x<span class="k3">/</span><span class="n">32</span><span class="k3">+</span><span class="n">25</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>c <span class="k2">)</span> <span class="k2">{</span>
        <span class="k1">if</span><span class="k2">(</span>c<span class="k3">&lt;</span><span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> r<span class="k3">&lt;</span><span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> c&gt;<span class="k3">=</span><span class="n">255</span> <span class="k3">|</span><span class="k3">|</span> r&gt;<span class="k3">=</span><span class="n">255</span><span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
        <span class="c">//draw map[r][c] at player_pos (x or y) - 255*32/2 +32*cell (c or r)</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

I did not test this...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SpectreNectar)</author>
		<pubDate>Sat, 22 Oct 2011 18:37:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>SpectreNectar:</p><p>Yes I am using the header guards, code::blocks added them automagically and I had to go read up on what it was. I am not sure what I am doing wrong, but I cannot seem to call code from my main cpp that is contained in another cpp file. Is there any basic tutorial out there that can hold my hand through the ewxplanation?</p><p>As for the 2 dimensional array, I am actually using a vector filled with strings, from there I loop through each stirng character by character to display and or create items, so far this is workign well, but my code is quickly turning into a hot mess in my main.cpp. . . </p><p>Any way I will take a look at your ideas and see if I can&#39;t implement somehting similar to get the rendering to work for me.</p><p>Thanks~!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sec_goat)</author>
		<pubDate>Sun, 23 Oct 2011 02:35:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You are welcome.</p><p>This is where I learned about header files:<br /><a href="http://www.cplusplus.com/forum/articles/10627/">http://www.cplusplus.com/forum/articles/10627/</a></p><p>...and a vector will do fine in the case of drawing your tiles - just iterate through it <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SpectreNectar)</author>
		<pubDate>Sun, 23 Oct 2011 04:54:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>taron already told you the solution :
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/608643/934951#target">taron </a> said:</div><div class="quote"><p>
map.cpp should include map.h</p><p>And readMap has been spelled wrong in map.h.
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 23 Oct 2011 05:54:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Taron, and Edgar,</p><p>Thank you for pointing out my typo, however this is just a bit of sample code here if you must see is the real 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="c">//map.h</span>
<span class="number">   2</span><span class="p">#ifndef MAP_H_INCLUDED</span>
<span class="number">   3</span><span class="p">#define MAP_H_INCLUDED</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;string&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span>std::vector<span class="k3">&lt;</span>std::string&gt; readMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> displayMap<span class="k2">(</span>std::vector<span class="k3">&lt;</span>std::string&gt;<span class="k3">&amp;</span> vMap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="p">#endif // MAP_H_INCLUDED</span>
<span class="number">  13</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="c">//map.cpp</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  18</span><span class="p">#include &lt;fstream&gt;</span>
<span class="number">  19</span><span class="p">#include &lt;string&gt;</span>
<span class="number">  20</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">  21</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  22</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  23</span><span class="p">#include "map.h"</span>
<span class="number">  24</span><span class="p">#include "images.h"</span>
<span class="number">  25</span>
<span class="number">  26</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>vector<span class="k3">&lt;</span>string&gt; readMap<span class="k2">(</span><span class="k2">)</span>
<span class="number">  31</span>   <span class="k2">{</span>
<span class="number">  32</span>       string <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">;</span>
<span class="number">  33</span>       vector<span class="k3">&lt;</span>string&gt; vec<span class="k2">;</span>
<span class="number">  34</span>       ifstream myfile <span class="k2">(</span><span class="s">"lvl/lvl1.txt"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span>        <span class="k1">if</span><span class="k2">(</span>myfile.is_open<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  37</span>            <span class="k1">while</span><span class="k2">(</span>getline<span class="k2">(</span>myfile, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//this will keep the loop goign and grab a new line each iteration</span>
<span class="number">  38</span>                 vec.push_back<span class="k2">(</span><a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>            <span class="k2">}</span>
<span class="number">  40</span>
<span class="number">  41</span>            myfile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>        <span class="k2">}</span>
<span class="number">  43</span>
<span class="number">  44</span>        <span class="k1">else</span><span class="k2">{</span>
<span class="number">  45</span>            cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to open File!\n"</span><span class="k2">;</span>
<span class="number">  46</span>        <span class="k2">}</span>
<span class="number">  47</span>    <span class="k1">return</span> vec<span class="k2">;</span>
<span class="number">  48</span>    <span class="k2">}</span>
<span class="number">  49</span>
<span class="number">  50</span><span class="k1">void</span> displayMap<span class="k2">(</span>vector<span class="k3">&lt;</span>string&gt; vMap<span class="k2">)</span>
<span class="number">  51</span><span class="k2">{</span>
<span class="number">  52</span>    <span class="k1">int</span> x,y<span class="k2">;</span>
<span class="number">  53</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> vMap.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  54</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> vMap<span class="k2">[</span>i<span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  55</span>        y <span class="k3">=</span> i <span class="k3">*</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  56</span>        x <span class="k3">=</span> j <span class="k3">*</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  57</span>        <span class="k1">if</span> <span class="k2">(</span>vMap<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'#'</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  58</span>            <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wall, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span>            <span class="k2">}</span>
<span class="number">  61</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>vMap<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span><span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  62</span>            <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a>, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>
<span class="number">  65</span>            <span class="k2">}</span>
<span class="number">  66</span>
<span class="number">  67</span>        <span class="k2">}</span>
<span class="number">  68</span>        <span class="k2">}</span>
<span class="number">  69</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">  70</span>    <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>
<span class="number">  73</span>
<span class="number">  74</span><span class="c">//main.cpp</span>
<span class="number">  75</span>
<span class="number">  76</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  77</span><span class="p">#include &lt;fstream&gt;</span>
<span class="number">  78</span><span class="p">#include &lt;string&gt;</span>
<span class="number">  79</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">  80</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  81</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  82</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  83</span><span class="p">#include "images.h"</span>
<span class="number">  84</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span><span class="c">//----Constatnts-----------------------------------------------------------------------------------</span>
<span class="number">  89</span><span class="k1">const</span> <span class="k1">float</span> FPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  90</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  91</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">  92</span><span class="k1">const</span> <span class="k1">int</span> IMG_SIZE <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  93</span><span class="k1">enum</span> MYKEYS<span class="k2">{</span> KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>
<span class="number">  96</span><span class="c">//-----MAIN------------------------------------------------------------------------------------------------</span>
<span class="number">  97</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">  98</span><span class="k2">{</span>
<span class="number">  99</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"> 100</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"> 101</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 102</span>   <span class="c">//ALLEGRO_BITMAP *bouncer = NULL;</span>
<span class="number"> 103</span>   <span class="c">//ALLEGRO_BITMAP *player = NULL;</span>
<span class="number"> 104</span>   <span class="k1">float</span> bouncer_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span> <span class="k3">-</span> IMG_SIZE <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 105</span>   <span class="k1">float</span> bouncer_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span> <span class="k3">-</span> IMG_SIZE <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 106</span>   <span class="c">//float bouncer_dx = -4.0, bouncer_dy = 4.0;</span>
<span class="number"> 107</span>   <span class="k1">bool</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 108</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 109</span>   <span class="k1">bool</span> doexit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 110</span><span class="c">//----Init Allegro----------------------------------------------------------------</span>
<span class="number"> 111</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="c">//initialize allegro</span>
<span class="number"> 112</span>   <span class="k2">{</span>
<span class="number"> 113</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>      <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 115</span>   <span class="k2">}</span>
<span class="number"> 116</span><span class="c">//----Install keyboard----------------------------------------------------------------</span>
<span class="number"> 117</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 118</span>   <span class="k2">{</span>
<span class="number"> 119</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to initialize keyboard!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 121</span>   <span class="k2">}</span>
<span class="number"> 122</span><span class="c">//----------------------------------------------------------------------------------------</span>
<span class="number"> 123</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 124</span>   <span class="k2">{</span>
<span class="number"> 125</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to initialize the mouse!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 127</span>   <span class="k2">}</span>
<span class="number"> 128</span>
<span class="number"> 129</span><span class="c">//-------------------------------------------------------------------------------------</span>
<span class="number"> 130</span>   timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> FPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span>
<span class="number"> 132</span>   <span class="k2">{</span>
<span class="number"> 133</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to create timer.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 135</span>   <span class="k2">}</span>
<span class="number"> 136</span><span class="c">//--------------------------------------------------------------------------------------</span>
<span class="number"> 137</span>
<span class="number"> 138</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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"> 139</span>    <span class="k2">{</span>
<span class="number"> 140</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to load image addon for allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</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"> 142</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 143</span>    <span class="k2">}</span>
<span class="number"> 144</span><span class="c">//----------------------------------------------------------------------------------</span>
<span class="number"> 145</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><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number"> 147</span>   <span class="k2">{</span>
<span class="number"> 148</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create display!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</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"> 150</span>      <a href="http://www.allegro.cc/manual/al_shutdown_image_addon"><span class="a">al_shutdown_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>      <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 152</span>   <span class="k2">}</span>
<span class="number"> 153</span><span class="c">//---LOAD or CREATE IMAGES-------------------------------------------------------------------------------------</span>
<span class="number"> 154</span>  bouncer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>IMG_SIZE, IMG_SIZE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bouncer<span class="k2">)</span>
<span class="number"> 156</span>   <span class="k2">{</span>
<span class="number"> 157</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to load bitmap.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</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"> 159</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"> 160</span>       <a href="http://www.allegro.cc/manual/al_shutdown_image_addon"><span class="a">al_shutdown_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 162</span>   <span class="k2">}</span>
<span class="number"> 163</span>   player <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">"images/player.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>   wall <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">"images/wall.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 165</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a> <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">"images/floor.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>player <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>wall <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">)</span>
<span class="number"> 167</span>   <span class="k2">{</span>
<span class="number"> 168</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to load Player.bmp.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 170</span>   <span class="k2">}</span>
<span class="number"> 171</span>
<span class="number"> 172</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bouncer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</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">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span><span class="c">//------------------------------------------------------------------------------------------</span>
<span class="number"> 176</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"> 177</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>event_queue<span class="k2">)</span>
<span class="number"> 178</span>   <span class="k2">{</span>
<span class="number"> 179</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to create event queue.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>       <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bouncer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</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"> 182</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"> 183</span>       <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 184</span>   <span class="k2">}</span>
<span class="number"> 185</span><span class="c">//-----------------------------------------------------------------------------------------------</span>
<span class="number"> 186</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_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</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"> 188</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_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</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"> 190</span>
<span class="number"> 191</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"> 192</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"> 193</span>
<span class="number"> 194</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"> 195</span>
<span class="number"> 196</span>
<span class="number"> 197</span>    vector<span class="k3">&lt;</span>string&gt; level_map<span class="k2">;</span>
<span class="number"> 198</span>    level_map <span class="k3">=</span> readMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>    displayMap<span class="k2">(</span>level_map<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>
<span class="number"> 201</span>
<span class="number"> 202</span>   <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>doexit<span class="k2">)</span>
<span class="number"> 203</span>   <span class="k2">{</span>
<span class="number"> 204</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"> 205</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"> 206</span>
<span class="number"> 207</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"> 208</span>       <span class="k2">{</span>
<span class="number"> 209</span>           <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> bouncer_y <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 210</span>           <span class="k2">{</span>
<span class="number"> 211</span>               bouncer_y <span class="k3">-</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 212</span>           <span class="k2">}</span>
<span class="number"> 213</span>           <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> bouncer_y <span class="k3">&lt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> IMG_SIZE <span class="k3">-</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 214</span>           <span class="k2">{</span>
<span class="number"> 215</span>               bouncer_y <span class="k3">+</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 216</span>           <span class="k2">}</span>
<span class="number"> 217</span>           <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> bouncer_x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 218</span>           <span class="k2">{</span>
<span class="number"> 219</span>               bouncer_x <span class="k3">-</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 220</span>           <span class="k2">}</span>
<span class="number"> 221</span>           <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> bouncer_x <span class="k3">&lt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> IMG_SIZE <span class="k3">-</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 222</span>           <span class="k2">{</span>
<span class="number"> 223</span>               bouncer_x <span class="k3">+</span><span class="k3">=</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 224</span>           <span class="k2">}</span>
<span class="number"> 225</span>           redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 226</span>
<span class="number"> 227</span>       <span class="k2">}</span>
<span class="number"> 228</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_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 229</span>       <span class="k2">{</span>
<span class="number"> 230</span>           <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 231</span>       <span class="k2">}</span>
<span class="number"> 232</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_DOWN<span class="k2">)</span>
<span class="number"> 233</span>       <span class="k2">{</span>
<span class="number"> 234</span>           <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 235</span>           <span class="k2">{</span>
<span class="number"> 236</span>               <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 237</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 238</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 239</span>
<span class="number"> 240</span>               <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 241</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 242</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 243</span>
<span class="number"> 244</span>               <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 245</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 246</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 247</span>
<span class="number"> 248</span>               <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 249</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 250</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 251</span>           <span class="k2">}</span>
<span class="number"> 252</span>       <span class="k2">}</span>
<span class="number"> 253</span>
<span class="number"> 254</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"> 255</span>       <span class="k2">{</span>
<span class="number"> 256</span>           <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 257</span>           <span class="k2">{</span>
<span class="number"> 258</span>               <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 259</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 260</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 261</span>
<span class="number"> 262</span>               <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 263</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 264</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 265</span>
<span class="number"> 266</span>               <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 267</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 268</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 269</span>
<span class="number"> 270</span>               <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 271</span>               <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 272</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 273</span>
<span class="number"> 274</span>               <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 275</span>               doexit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 276</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 277</span>           <span class="k2">}</span>
<span class="number"> 278</span>       <span class="k2">}</span>
<span class="number"> 279</span>
<span class="number"> 280</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_MOUSE_AXES <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 281</span>              ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 282</span>
<span class="number"> 283</span>         bouncer_x <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number"> 284</span>         bouncer_y <span class="k3">=</span> ev.mouse.y<span class="k2">;</span>
<span class="number"> 285</span>      <span class="k2">}</span>
<span class="number"> 286</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_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 287</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 288</span>      <span class="k2">}</span>
<span class="number"> 289</span>
<span class="number"> 290</span>       <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 291</span>       <span class="k2">{</span>
<span class="number"> 292</span>
<span class="number"> 293</span>           redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 294</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"> 295</span>           displayMap<span class="k2">(</span>level_map<span class="k2">)</span><span class="k2">;</span> <span class="c">//My call to start drawing the map</span>
<span class="number"> 296</span>           <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bouncer, bouncer_x, bouncer_y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 297</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"> 298</span>       <span class="k2">}</span>
<span class="number"> 299</span>
<span class="number"> 300</span>   <span class="k2">}</span>
<span class="number"> 301</span>
<span class="number"> 302</span>   <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bouncer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 303</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"> 304</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"> 305</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"> 306</span>
<span class="number"> 307</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 308</span><span class="k2">}</span>
</div></div><p>


Well it does appear there was a typo even in the real header.... but still getting the <br />&#39;readMap&#39; was not declared in this scope<br />and<br /> &#39;displayMap&#39; was not declared in this scope</p><p>Thanks for the article SpectreNectar I will start reading up on headers there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sec_goat)</author>
		<pubDate>Sun, 23 Oct 2011 16:28:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Main.cpp doesn&#39;t include map.h. It should.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SpectreNectar)</author>
		<pubDate>Sun, 23 Oct 2011 17:42:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>EDIT: I am trying to get some more files split up and I am having some trouble.<br />I have a pointer to my player object and if I keep it in main, then my Mob.cpp file cannot find it. If i put it in a header called Globals.h it tells me I have multiple definitions of the pointer.</p><p>How can I have a variable like this that is available from all classes?</p><p>And another EDIT:</p><p>I am passing variables to the functions as needed, and this seems to work well. Still open to hearing suggestions on best practice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sec_goat)</author>
		<pubDate>Sat, 29 Oct 2011 00:29:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://wiki.allegro.cc/index.php?title=Header_file">http://wiki.allegro.cc/index.php?title=Header_file</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 29 Oct 2011 00:58:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks bamccaig.<br />This is a very good article, a lot of this stuff I am already doing, header guards to not appear to be stopping the duplicate definition for me however.</p><p>I did change some to pass variables around and that works.</p><p>However I am hitting a very strange behavior with my header files.</p><p>I have a World class and a Mob class. The world class:
</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">#ifndef WORLD_H</span>
<span class="number">  2</span><span class="p">#define WORLD_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  5</span><span class="p">#include "mob.h"</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">class</span> World
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>    public:
<span class="number"> 12</span>        <span class="c">/** Default constructor */</span>
<span class="number"> 13</span>        World<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>        <span class="c">/** Default destructor */</span>
<span class="number"> 15</span>        <span class="k1">virtual</span> ~World<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>        <span class="c">//members</span>
<span class="number"> 18</span>        list<span class="k3">&lt;</span>Mob&gt; m_Mobs<span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>        <span class="c">//functions</span>
<span class="number"> 21</span>
<span class="number"> 22</span>        <span class="k1">void</span> SpawnMobs<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>mob<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>        <span class="k1">void</span> RemoveMob<span class="k2">(</span><span class="k1">const</span> Mob <span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    protected:
<span class="number"> 26</span>    private:
<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="p">#endif // WORLD_H</span>
</div></div><p>

and the Mob class:</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">#ifndef MOB_H</span>
<span class="number">  2</span><span class="p">#define MOB_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include "entity.h"</span>
<span class="number">  5</span><span class="p">#include "Player.h"</span>
<span class="number">  6</span><span class="p">#include "world.h"</span>
<span class="number">  7</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  8</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">class</span> Mob <span class="k2">:</span> <span class="k1">public</span> Entity
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    public:
<span class="number"> 13</span>        <span class="c">/** Default constructor */</span>
<span class="number"> 14</span>        Mob<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image, <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"> 15</span>        <span class="c">/** Default destructor */</span>
<span class="number"> 16</span>        <span class="k1">virtual</span> ~Mob<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>        <span class="k1">static</span> std::list<span class="k3">&lt;</span>Mob&gt; m_Mobs<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>        <span class="k1">void</span> Move<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, Player <span class="k3">*</span>player, World <span class="k3">*</span>world<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    protected:
<span class="number"> 21</span>        <span class="k1">float</span> m_Speed<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    private:
<span class="number"> 24</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="p">#endif // MOB_H</span>
</div></div><p>


World needs to know what Mob is to keep track of them, and Mob needs to know what world is so it can accept a pointer object to it.</p><p>When Mob.H contains world.h and vice versa it will start telling me that Mob is not defined in World or World is not defined in Mob. . </p><p>Exact message is: </p><div class="source-code snippet"><div class="inner"><pre>error: <span class="s">'World'</span> has <span class="k1">not</span> been declared
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sec_goat)</author>
		<pubDate>Sat, 29 Oct 2011 01:24:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That is a circular inclusion. You&#39;ll need to forward declare one of the types and <i>not</i> include the other header file in one of them. As an extension to this, you must only use a pointer to the type within that header. E.g.,</p><div class="source-code"><div class="toolbar"><span class="name">Mob.hpp</span><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">#ifndef MOB_HPP</span>
<span class="number">  2</span>    <span class="p">#define MOB_HPP</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="c">// Forward declare World. DON'T include Mob header file.</span>
<span class="number">  5</span><span class="k1">class</span> World<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">class</span> Mob
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span><span class="c">// ...</span>
<span class="number"> 10</span>public:
<span class="number"> 11</span><span class="c">// ...</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="c">/*</span>
<span class="number"> 14</span><span class="c">     * We know there is a World class. That's all we need to know for a</span>
<span class="number"> 15</span><span class="c">     * pointer to it.</span>
<span class="number"> 16</span><span class="c">     */</span>
<span class="number"> 17</span>    <span class="k1">void</span> move<span class="k2">(</span><span class="k1">int</span>, <span class="k1">int</span>, Player <span class="k3">*</span>, World <span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="c">// ...</span>
<span class="number"> 20</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="p">#endif</span>
</div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="name">World.hpp</span><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">#ifndef WORLD_HPP</span>
<span class="number">  2</span>    <span class="p">#define WORLD_HPP</span>
<span class="number">  3</span>
<span class="number">  4</span>    <span class="c">// DO include Mob header.</span>
<span class="number">  5</span>    <span class="p">#include "Mob.hpp"</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">class</span> World
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span><span class="c">// ...</span>
<span class="number"> 10</span>public:
<span class="number"> 11</span><span class="c">// ...</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="c">// We know what 'Mob' is; no problem.</span>
<span class="number"> 14</span>    std::list<span class="k3">&lt;</span>Mob&gt; mobs_<span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="c">// ...</span>
<span class="number"> 17</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="p">#endif</span>
</div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="name">Mob.cpp</span><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">/*</span>
<span class="number">  2</span><span class="c"> * NOW we need to know what a World actually is. Include the World header</span>
<span class="number">  3</span><span class="c"> * file from Mob source file.</span>
<span class="number">  4</span><span class="c"> */</span>
<span class="number">  5</span><span class="p">#include "Mob.hpp"</span>
<span class="number">  6</span><span class="p">#include "World.hpp"</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="c">// ...</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">void</span> Mob::move<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, Player <span class="k3">*</span> player, World <span class="k3">*</span> world<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    <span class="c">// We know what 'World' is where it counts.</span>
<span class="number"> 13</span><span class="k2">}</span>
</div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="name">World.cpp</span><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">// No need for Mob header. Already included in World header.</span>
<span class="number"> 2</span><span class="p">#include "World.hpp"</span>
<span class="number"> 3</span>
<span class="number"> 4</span><span class="c">// ...</span>
</div></div><p>

Something like that anyway... Somebody should extend the Wiki article with the solution for circular inclusion if it doesn&#39;t already explain it. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> There are limitations, of course. You can&#39;t actually use <span class="source-code">World</span> objects within the <span class="source-code">Mob</span> header because in the <span class="source-code">Mob</span> header we don&#39;t necessarily know what a <span class="source-code">World</span> object actually is yet.</p><p>All that said, you might find that you don&#39;t want a list of <span class="source-code">Mob</span> <i>objects</i>. For that to work reliably, your <span class="source-code">Mob</span> type must follow the rules for a proper object, and even then it might be a good waste creating and destroying objects as the list is manipulated. I&#39;m not really an expert on the STL or C++ in general. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> In any case, if you store pointers, it&#39;s inexpensive to manipulate the list, and you know it won&#39;t break anything. You do have to worry about managing pointers though. So you might prefer the best of both worlds; a list of smart pointers.</p><p>And as I&#39;ve mentioned in another thread, you might opt to not have the <span class="source-code">Mob</span> know about the <span class="source-code">World</span> at all, which will eliminate this whole problem. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 29 Oct 2011 01:43:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just a random on the spot idea, it may have been suggested before (I&#39;m being lazy and not reading the whole thing). Could you have another class that takes a Mob and a World and preforms the necessary work between them?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (someone972)</author>
		<pubDate>Sat, 29 Oct 2011 03:25:07 +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/608643/935520#target">someone972</a> said:</div><div class="quote"><p>Could you have another class that takes a Mob and a World and preforms the necessary work between them?
</p></div></div><p>Yes.  That&#39;s one of the better ways to do it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 29 Oct 2011 03:44:55 +0000</pubDate>
	</item>
</rss>
