<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Sliding Collision</title>
		<link>http://www.allegro.cc/forums/view/616813</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 24 Mar 2017 22:18:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi there. I&#39;m attempting to implement &quot;sliding collision&quot;--collision where, if you hold down and right while colliding with a wall to the right, you&#39;ll stop moving right, but will continue moving (or &quot;sliding&quot;) down. This kind of collision is seen in many top-down 2D games (like <i>A Link to the Past</i> and other <i>Zelda</i> games). I&#39;m not sure what this type of collision is actually called, but I&#39;m going with &quot;sliding collision&quot; for now.</p><p>Here&#39;s a (poorly drawn) visualization of what I mean:</p><p><span class="remote-thumbnail"><span class="json">{"name":"collision_visualized.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/c\/2c09512ab285f9de23c8767e683eb94d.png","w":800,"h":286,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/c\/2c09512ab285f9de23c8767e683eb94d"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/c/2c09512ab285f9de23c8767e683eb94d-240.jpg" alt="collision_visualized.png" width="240" height="85" /></span></p><p>The yellow square is the player, moving down and to the right. The player then collides with a solid wall (the red square). While colliding, down and right are still being held, but collision is cancelled on the right, and movement continues downward. Finally, when the player is below the red wall, movement down and to the right resumes as expected.</p><p>Here&#39;s what I have already working with a single player and a single wall (the colors and outlines are different in the game than in the above visualization):</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;cmath&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">using</span> std::abs<span class="k2">;</span>
<span class="number">   8</span><span class="k1">using</span> std::cout<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> checkReturn<span class="k2">(</span><span class="k1">const</span> <span class="k1">bool</span> condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  11</span>
<span class="number">  12</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  13</span>
<span class="number">  14</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: something failed.\n"</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>  <span class="k2">}</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">bool</span> isColliding<span class="k2">(</span><span class="k1">int</span> ax, <span class="k1">int</span> ay, <span class="k1">int</span> ah, <span class="k1">int</span> aw, <span class="k1">int</span> bx, <span class="k1">int</span> by, <span class="k1">int</span> bw, <span class="k1">int</span> bh<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  21</span>
<span class="number">  22</span>  <span class="k1">return</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ax <span class="k3">-</span> bx<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>aw <span class="k3">+</span> bw<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ay <span class="k3">-</span> by<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>ah <span class="k3">+</span> bh<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span><span class="k2">}</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  26</span>
<span class="number">  27</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</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">  30</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  31</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="k2">;</span>
<span class="number">  32</span>
<span class="number">  33</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>  checkReturn<span class="k2">(</span><span class="k2">(</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><span class="n">800</span>, <span class="n">450</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</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">  41</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">  42</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">  43</span>
<span class="number">  44</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">  45</span>
<span class="number">  46</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">bool</span> running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</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">  50</span>
<span class="number">  51</span>  <span class="c">// Player variables.</span>
<span class="number">  52</span>  <span class="k1">int</span> p_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// X axis</span>
<span class="number">  53</span>  <span class="k1">int</span> p_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// Y axis</span>
<span class="number">  54</span>  <span class="k1">int</span> p_w <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Width</span>
<span class="number">  55</span>  <span class="k1">int</span> p_h <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Height</span>
<span class="number">  56</span>  <span class="k1">int</span> p_s <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span> <span class="c">// Speed</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="c">// Wall variables (same as above).</span>
<span class="number">  59</span>  <span class="k1">int</span> w_x <span class="k3">=</span> <span class="n">256</span><span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">int</span> w_y <span class="k3">=</span> <span class="n">256</span><span class="k2">;</span>
<span class="number">  61</span>  <span class="k1">int</span> w_w <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span>
<span class="number">  62</span>  <span class="k1">int</span> w_h <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="k1">enum</span> <span class="k2">{</span>UP <span class="k3">=</span> <span class="n">0</span>, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span>  <span class="k1">while</span> <span class="k2">(</span>running<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  67</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  73</span>
<span class="number">  74</span>      running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  75</span>    <span class="k2">}</span>
<span class="number">  76</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  77</span>
<span class="number">  78</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  79</span>
<span class="number">  80</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number">  81</span>
<span class="number">  82</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  83</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  84</span>
<span class="number">  85</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number">  86</span>
<span class="number">  87</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  88</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  91</span>
<span class="number">  92</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  93</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number">  96</span>
<span class="number">  97</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  98</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>        <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 101</span>
<span class="number"> 102</span>          running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 103</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k2">}</span>
<span class="number"> 105</span>    <span class="k2">}</span>
<span class="number"> 106</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>
<span class="number"> 108</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>
<span class="number"> 110</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 111</span>
<span class="number"> 112</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 113</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 114</span>
<span class="number"> 115</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 116</span>
<span class="number"> 117</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 118</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 121</span>
<span class="number"> 122</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 123</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 124</span>
<span class="number"> 125</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 126</span>
<span class="number"> 127</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 128</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 129</span>      <span class="k2">}</span>
<span class="number"> 130</span>    <span class="k2">}</span>
<span class="number"> 131</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 132</span>
<span class="number"> 133</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 134</span>
<span class="number"> 135</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>UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 136</span>
<span class="number"> 137</span>        p_y <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 138</span>
<span class="number"> 139</span>        <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x, w_y, w_w, w_h<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 140</span>
<span class="number"> 141</span>          <span class="k3">+</span><span class="k3">+</span>p_y<span class="k2">;</span>
<span class="number"> 142</span>        <span class="k2">}</span>
<span class="number"> 143</span>      <span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</span>      <span class="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>DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 146</span>
<span class="number"> 147</span>        p_y <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>        <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x, w_y, w_w, w_h<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 150</span>
<span class="number"> 151</span>          <span class="k3">-</span><span class="k3">-</span>p_y<span class="k2">;</span>
<span class="number"> 152</span>        <span class="k2">}</span>
<span class="number"> 153</span>      <span class="k2">}</span>
<span class="number"> 154</span>
<span class="number"> 155</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>LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 156</span>
<span class="number"> 157</span>        p_x <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 158</span>
<span class="number"> 159</span>        <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x, w_y, w_w, w_h<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 160</span>
<span class="number"> 161</span>          <span class="k3">+</span><span class="k3">+</span>p_x<span class="k2">;</span>
<span class="number"> 162</span>        <span class="k2">}</span>
<span class="number"> 163</span>      <span class="k2">}</span>
<span class="number"> 164</span>
<span class="number"> 165</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>RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 166</span>
<span class="number"> 167</span>        p_x <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 168</span>
<span class="number"> 169</span>        <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x, w_y, w_w, w_h<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 170</span>
<span class="number"> 171</span>          <span class="k3">-</span><span class="k3">-</span>p_x<span class="k2">;</span>
<span class="number"> 172</span>        <span class="k2">}</span>
<span class="number"> 173</span>      <span class="k2">}</span>
<span class="number"> 174</span>    <span class="k2">}</span>
<span class="number"> 175</span>
<span class="number"> 176</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="k2">{</span>
<span class="number"> 177</span>
<span class="number"> 178</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 179</span>
<span class="number"> 180</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">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>
<span class="number"> 182</span>      <span class="c">// Draw player rectangle and outline.</span>
<span class="number"> 183</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>p_x, p_y, p_x <span class="k3">+</span> p_w, p_y <span class="k3">+</span> p_h, <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">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>      <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>p_x <span class="k3">+</span> <span class="n">4</span>, p_y <span class="k3">+</span> <span class="n">4</span>, p_x <span class="k3">+</span> p_w <span class="k3">-</span> <span class="n">4</span>, p_y <span class="k3">+</span> p_h <span class="k3">-</span> <span class="n">4</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">0</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>
<span class="number"> 186</span>      <span class="c">// Draw wall rectangle and outline.</span>
<span class="number"> 187</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>w_x, w_y, w_x <span class="k3">+</span> w_w, w_y <span class="k3">+</span> w_h, <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">255</span>, <span class="n">0</span><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_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>w_x <span class="k3">+</span> <span class="n">4</span>, w_y <span class="k3">+</span> <span class="n">4</span>, w_x <span class="k3">+</span> w_w <span class="k3">-</span> <span class="n">4</span>, w_y <span class="k3">+</span> w_h <span class="k3">-</span> <span class="n">4</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">255</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>
<span class="number"> 190</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"> 191</span>    <span class="k2">}</span>
<span class="number"> 192</span>  <span class="k2">}</span>
<span class="number"> 193</span>
<span class="number"> 194</span>  <span class="c">// Free memory.</span>
<span class="number"> 195</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"> 196</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"> 197</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"> 198</span>
<span class="number"> 199</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 200</span><span class="k2">}</span>
</div></div><p>

The above works as expected. But now when I make multiples of the wall, things get a bit more complicated.</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;cmath&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">using</span> std::abs<span class="k2">;</span>
<span class="number">   8</span><span class="k1">using</span> std::cout<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> checkReturn<span class="k2">(</span><span class="k1">const</span> <span class="k1">bool</span> condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  11</span>
<span class="number">  12</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  13</span>
<span class="number">  14</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: something failed.\n"</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>  <span class="k2">}</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">bool</span> isColliding<span class="k2">(</span><span class="k1">int</span> ax, <span class="k1">int</span> ay, <span class="k1">int</span> ah, <span class="k1">int</span> aw, <span class="k1">int</span> bx, <span class="k1">int</span> by, <span class="k1">int</span> bw, <span class="k1">int</span> bh<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  21</span>
<span class="number">  22</span>  <span class="k1">return</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ax <span class="k3">-</span> bx<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>aw <span class="k3">+</span> bw<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ay <span class="k3">-</span> by<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>ah <span class="k3">+</span> bh<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span><span class="k2">}</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  26</span>
<span class="number">  27</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</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">  30</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  31</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="k2">;</span>
<span class="number">  32</span>
<span class="number">  33</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>  checkReturn<span class="k2">(</span><span class="k2">(</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><span class="n">800</span>, <span class="n">450</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</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">  41</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">  42</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">  43</span>
<span class="number">  44</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">  45</span>
<span class="number">  46</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">bool</span> running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</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">  50</span>
<span class="number">  51</span>  <span class="c">// Player variables.</span>
<span class="number">  52</span>  <span class="k1">int</span> p_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// X axis</span>
<span class="number">  53</span>  <span class="k1">int</span> p_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// Y axis</span>
<span class="number">  54</span>  <span class="k1">int</span> p_w <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Width</span>
<span class="number">  55</span>  <span class="k1">int</span> p_h <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Height</span>
<span class="number">  56</span>  <span class="k1">int</span> p_s <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span> <span class="c">// Speed</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="c">// Wall variables (same as above).</span>
<span class="number">  59</span>  <span class="k1">int</span> number_of_walls <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  60</span>  <span class="k1">int</span> w_x<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">256</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  61</span>  <span class="k1">int</span> w_y<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">256</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  62</span>  <span class="k1">int</span> w_w<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">64</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  63</span>  <span class="k1">int</span> w_h<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">64</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  64</span>
<span class="number">  65</span>  <span class="k1">enum</span> <span class="k2">{</span>UP <span class="k3">=</span> <span class="n">0</span>, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>  <span class="k1">while</span> <span class="k2">(</span>running<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span>
<span class="number">  69</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  74</span>
<span class="number">  75</span>      running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  76</span>    <span class="k2">}</span>
<span class="number">  77</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>
<span class="number">  79</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  80</span>
<span class="number">  81</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number">  82</span>
<span class="number">  83</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  84</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number">  87</span>
<span class="number">  88</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  89</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  92</span>
<span class="number">  93</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  94</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number">  97</span>
<span class="number">  98</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  99</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 100</span>
<span class="number"> 101</span>        <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 102</span>
<span class="number"> 103</span>          running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 104</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 105</span>      <span class="k2">}</span>
<span class="number"> 106</span>    <span class="k2">}</span>
<span class="number"> 107</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>
<span class="number"> 109</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 110</span>
<span class="number"> 111</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 112</span>
<span class="number"> 113</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 114</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 117</span>
<span class="number"> 118</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 119</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 120</span>
<span class="number"> 121</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 122</span>
<span class="number"> 123</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 124</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 127</span>
<span class="number"> 128</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 129</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 130</span>      <span class="k2">}</span>
<span class="number"> 131</span>    <span class="k2">}</span>
<span class="number"> 132</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 133</span>
<span class="number"> 134</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 135</span>
<span class="number"> 136</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>UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 137</span>
<span class="number"> 138</span>        p_y <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 139</span>      <span class="k2">}</span>
<span class="number"> 140</span>
<span class="number"> 141</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>DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 142</span>
<span class="number"> 143</span>        p_y <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 144</span>      <span class="k2">}</span>
<span class="number"> 145</span>
<span class="number"> 146</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>LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 147</span>
<span class="number"> 148</span>        p_x <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 149</span>      <span class="k2">}</span>
<span class="number"> 150</span>
<span class="number"> 151</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>RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 152</span>
<span class="number"> 153</span>        p_x <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 154</span>      <span class="k2">}</span>
<span class="number"> 155</span>
<span class="number"> 156</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 157</span>
<span class="number"> 158</span>        <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_w<span class="k2">[</span>i<span class="k2">]</span>, w_h<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 159</span>
<span class="number"> 160</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>UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 161</span>
<span class="number"> 162</span>            <span class="k3">+</span><span class="k3">+</span>p_y<span class="k2">;</span>
<span class="number"> 163</span>          <span class="k2">}</span>
<span class="number"> 164</span>
<span class="number"> 165</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>DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 166</span>
<span class="number"> 167</span>            <span class="k3">-</span><span class="k3">-</span>p_y<span class="k2">;</span>
<span class="number"> 168</span>          <span class="k2">}</span>
<span class="number"> 169</span>
<span class="number"> 170</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>LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 171</span>
<span class="number"> 172</span>            <span class="k3">+</span><span class="k3">+</span>p_x<span class="k2">;</span>
<span class="number"> 173</span>          <span class="k2">}</span>
<span class="number"> 174</span>
<span class="number"> 175</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>RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 176</span>
<span class="number"> 177</span>            <span class="k3">-</span><span class="k3">-</span>p_x<span class="k2">;</span>
<span class="number"> 178</span>          <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="k2">}</span>
<span class="number"> 182</span>
<span class="number"> 183</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="k2">{</span>
<span class="number"> 184</span>
<span class="number"> 185</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 186</span>
<span class="number"> 187</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">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>
<span class="number"> 189</span>      <span class="c">// Draw player rectangle and outline.</span>
<span class="number"> 190</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>p_x, p_y, p_x <span class="k3">+</span> p_w, p_y <span class="k3">+</span> p_h, <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">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>      <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>p_x <span class="k3">+</span> <span class="n">4</span>, p_y <span class="k3">+</span> <span class="n">4</span>, p_x <span class="k3">+</span> p_w <span class="k3">-</span> <span class="n">4</span>, p_y <span class="k3">+</span> p_h <span class="k3">-</span> <span class="n">4</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">0</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>      <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>
<span class="number"> 195</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>
<span class="number"> 197</span>        <span class="c">// Draw wall rectangle and outline.</span>
<span class="number"> 198</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>w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_w<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_h<span class="k2">[</span>i<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">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> <span class="n">4</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> <span class="n">4</span>, w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_w<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">-</span> <span class="n">4</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_h<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">-</span> <span class="n">4</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">255</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>      <span class="k2">}</span>
<span class="number"> 201</span>
<span class="number"> 202</span>      <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>
<span class="number"> 204</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"> 205</span>    <span class="k2">}</span>
<span class="number"> 206</span>  <span class="k2">}</span>
<span class="number"> 207</span>
<span class="number"> 208</span>  <span class="c">// Free memory.</span>
<span class="number"> 209</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"> 210</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"> 211</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>
<span class="number"> 213</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 214</span><span class="k2">}</span>
</div></div><p>

I made the wall variables an array. Drawing works no problem, but collision doesn&#39;t work as expected. I limited the number of walls to just 1, to test it against my earlier code, but now the player collides with a wall and just becomes &quot;stuck&quot;; it doesn&#39;t &quot;slide&quot; like I expected. What am I doing wrong?</p><p>I haven&#39;t done collision like this before, so I&#39;m surely making mistakes, but I appreciate any and all feedback and suggestions. Thank you! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p><b>Edit</b><br />I figured it out. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> I moved the for loop within each of the if statements, and now it works:</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;cmath&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">using</span> std::abs<span class="k2">;</span>
<span class="number">   8</span><span class="k1">using</span> std::cout<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> checkReturn<span class="k2">(</span><span class="k1">const</span> <span class="k1">bool</span> condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  11</span>
<span class="number">  12</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>condition<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  13</span>
<span class="number">  14</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: something failed.\n"</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>  <span class="k2">}</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">bool</span> isColliding<span class="k2">(</span><span class="k1">int</span> ax, <span class="k1">int</span> ay, <span class="k1">int</span> ah, <span class="k1">int</span> aw, <span class="k1">int</span> bx, <span class="k1">int</span> by, <span class="k1">int</span> bw, <span class="k1">int</span> bh<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  21</span>
<span class="number">  22</span>  <span class="k1">return</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ax <span class="k3">-</span> bx<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>aw <span class="k3">+</span> bw<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>ay <span class="k3">-</span> by<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="k2">(</span>ah <span class="k3">+</span> bh<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span><span class="k2">}</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  26</span>
<span class="number">  27</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</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">  30</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  31</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="k2">;</span>
<span class="number">  32</span>
<span class="number">  33</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>  checkReturn<span class="k2">(</span><span class="k2">(</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><span class="n">800</span>, <span class="n">450</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  checkReturn<span class="k2">(</span><span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>  checkReturn<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</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">  41</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">  42</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">  43</span>
<span class="number">  44</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">  45</span>
<span class="number">  46</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">bool</span> running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</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">  50</span>
<span class="number">  51</span>  <span class="c">// Player variables.</span>
<span class="number">  52</span>  <span class="k1">int</span> p_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// X axis</span>
<span class="number">  53</span>  <span class="k1">int</span> p_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// Y axis</span>
<span class="number">  54</span>  <span class="k1">int</span> p_w <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Width</span>
<span class="number">  55</span>  <span class="k1">int</span> p_h <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span> <span class="c">// Height</span>
<span class="number">  56</span>  <span class="k1">int</span> p_s <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span> <span class="c">// Speed</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">int</span> number_of_walls <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span>  <span class="c">// Wall variables (same as above).</span>
<span class="number">  61</span>  <span class="k1">int</span> w_x<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">256</span>, <span class="n">64</span> <span class="k3">*</span> <span class="n">6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  62</span>  <span class="k1">int</span> w_y<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">256</span>, <span class="n">256</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  63</span>  <span class="k1">int</span> w_w<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">64</span>, <span class="n">64</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  64</span>  <span class="k1">int</span> w_h<span class="k2">[</span>number_of_walls<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">64</span>, <span class="n">64</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span>  <span class="k1">enum</span> <span class="k2">{</span>UP <span class="k3">=</span> <span class="n">0</span>, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>  <span class="k1">while</span> <span class="k2">(</span>running<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>
<span class="number">  70</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  75</span>
<span class="number">  76</span>      running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  77</span>    <span class="k2">}</span>
<span class="number">  78</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  79</span>
<span class="number">  80</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  81</span>
<span class="number">  82</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number">  83</span>
<span class="number">  84</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  85</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  86</span>
<span class="number">  87</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number">  88</span>
<span class="number">  89</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  90</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  93</span>
<span class="number">  94</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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">  95</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number">  98</span>
<span class="number">  99</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 100</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 101</span>
<span class="number"> 102</span>        <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 103</span>
<span class="number"> 104</span>          running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 105</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 106</span>      <span class="k2">}</span>
<span class="number"> 107</span>    <span class="k2">}</span>
<span class="number"> 108</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>
<span class="number"> 110</span>      <span class="k1">switch</span> <span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 111</span>
<span class="number"> 112</span>        <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 113</span>
<span class="number"> 114</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 115</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 116</span>
<span class="number"> 117</span>        <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 118</span>
<span class="number"> 119</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 120</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 121</span>
<span class="number"> 122</span>        <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 123</span>
<span class="number"> 124</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 125</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>        <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 128</span>
<span class="number"> 129</span>          <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><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"> 130</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 131</span>      <span class="k2">}</span>
<span class="number"> 132</span>    <span class="k2">}</span>
<span class="number"> 133</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 134</span>
<span class="number"> 135</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 136</span>
<span class="number"> 137</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>UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 138</span>
<span class="number"> 139</span>        p_y <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 140</span>
<span class="number"> 141</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 142</span>
<span class="number"> 143</span>          <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_w<span class="k2">[</span>i<span class="k2">]</span>, w_h<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 144</span>
<span class="number"> 145</span>            <span class="k3">+</span><span class="k3">+</span>p_y<span class="k2">;</span>
<span class="number"> 146</span>          <span class="k2">}</span>
<span class="number"> 147</span>        <span class="k2">}</span>
<span class="number"> 148</span>      <span class="k2">}</span>
<span class="number"> 149</span>
<span class="number"> 150</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>DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 151</span>
<span class="number"> 152</span>        p_y <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 155</span>
<span class="number"> 156</span>          <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_w<span class="k2">[</span>i<span class="k2">]</span>, w_h<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 157</span>
<span class="number"> 158</span>            <span class="k3">-</span><span class="k3">-</span>p_y<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="k2">}</span>
<span class="number"> 162</span>
<span class="number"> 163</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>LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 164</span>
<span class="number"> 165</span>        p_x <span class="k3">-</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 168</span>
<span class="number"> 169</span>          <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_w<span class="k2">[</span>i<span class="k2">]</span>, w_h<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 170</span>
<span class="number"> 171</span>            <span class="k3">+</span><span class="k3">+</span>p_x<span class="k2">;</span>
<span class="number"> 172</span>          <span class="k2">}</span>
<span class="number"> 173</span>        <span class="k2">}</span>
<span class="number"> 174</span>      <span class="k2">}</span>
<span class="number"> 175</span>
<span class="number"> 176</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>RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 177</span>
<span class="number"> 178</span>        p_x <span class="k3">+</span><span class="k3">=</span> p_s<span class="k2">;</span>
<span class="number"> 179</span>
<span class="number"> 180</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 181</span>
<span class="number"> 182</span>          <span class="k1">while</span> <span class="k2">(</span>isColliding<span class="k2">(</span>p_x, p_y, p_w, p_h, w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_w<span class="k2">[</span>i<span class="k2">]</span>, w_h<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 183</span>
<span class="number"> 184</span>            <span class="k3">-</span><span class="k3">-</span>p_x<span class="k2">;</span>
<span class="number"> 185</span>          <span class="k2">}</span>
<span class="number"> 186</span>        <span class="k2">}</span>
<span class="number"> 187</span>      <span class="k2">}</span>
<span class="number"> 188</span>    <span class="k2">}</span>
<span class="number"> 189</span>
<span class="number"> 190</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="k2">{</span>
<span class="number"> 191</span>
<span class="number"> 192</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 193</span>
<span class="number"> 194</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">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>
<span class="number"> 196</span>      <span class="c">// Draw player rectangle and outline.</span>
<span class="number"> 197</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>p_x, p_y, p_x <span class="k3">+</span> p_w, p_y <span class="k3">+</span> p_h, <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">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>      <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>p_x <span class="k3">+</span> <span class="n">4</span>, p_y <span class="k3">+</span> <span class="n">4</span>, p_x <span class="k3">+</span> p_w <span class="k3">-</span> <span class="n">4</span>, p_y <span class="k3">+</span> p_h <span class="k3">-</span> <span class="n">4</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">0</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>
<span class="number"> 200</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> number_of_walls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 201</span>
<span class="number"> 202</span>        <span class="c">// Draw wall rectangle and outline.</span>
<span class="number"> 203</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>w_x<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span>, w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_w<span class="k2">[</span>i<span class="k2">]</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_h<span class="k2">[</span>i<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">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> <span class="n">4</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> <span class="n">4</span>, w_x<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_w<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">-</span> <span class="n">4</span>, w_y<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">+</span> w_h<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">-</span> <span class="n">4</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">255</span><span class="k2">)</span>, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>      <span class="k2">}</span>
<span class="number"> 206</span>
<span class="number"> 207</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>    <span class="k2">}</span>
<span class="number"> 209</span>  <span class="k2">}</span>
<span class="number"> 210</span>
<span class="number"> 211</span>  <span class="c">// Free memory.</span>
<span class="number"> 212</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"> 213</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"> 214</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"> 215</span>
<span class="number"> 216</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 217</span><span class="k2">}</span>
</div></div><p>

It&#39;s not pretty, but it works. I&#39;ve solved my own question now, but if you know of a way to improve the above code to make it more succinct, I&#39;d appreciate you telling me. Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Fri, 24 Mar 2017 22:18:36 +0000</pubDate>
	</item>
</rss>
