<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Enemy AI Movement</title>
		<link>http://www.allegro.cc/forums/view/615372</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 13 May 2015 16:09:09 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi guys I was wondering if you could help me by explaining in simple terms as I&#39;m new to Allegro coding, how I implement Finite State Machine AI into my game? Below is the coding I&#39;m using but it&#39;s just not working. I know one problem is that the state isn&#39;t changing to IDLE during playing, so that is something that needs addressing. However, I also tried it without the states in and just used the chasing state code in my playing state and still nothing happens my enemies just fly across the screen regardless.</p><p>Any help on this would be greatly appreciated as it&#39;s the last part of my game that needs solving <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">//global variables</span>
<span class="number">   2</span><span class="k1">const</span> <span class="k1">int</span> NUM_BULLETS <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">   3</span><span class="k1">const</span> <span class="k1">int</span> NUM_ENEMIES <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">   4</span><span class="k1">const</span> <span class="k1">int</span> NUM_EXPLOSIONS <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">   5</span><span class="k1">enum</span> STATE<span class="k2">{</span> TITLE, PLAYING, GAMEOVER, IDLE, CHASING, CONTINUE<span class="k2">}</span><span class="k2">;</span>
<span class="number">   6</span><span class="k1">float</span> CheckDistance<span class="k2">(</span>Player <span class="k3">&amp;</span>player, Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">   7</span><span class="k1">float</span> AngleToTarget<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, Player <span class="k3">&amp;</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span>Player player<span class="k2">;</span>
<span class="number">  10</span>Enemy enemy<span class="k2">[</span>NUM_ENEMIES<span class="k2">]</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="c">//prototypes</span>
<span class="number">  13</span><span class="k1">void</span> InitPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span><span class="k1">void</span> DrawPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="k1">void</span> InitEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image, <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a> <span class="k3">*</span>explode<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span><span class="k1">void</span> DrawEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span><span class="k1">void</span> StartEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span><span class="k1">void</span> UpdateEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span><span class="k1">void</span> CollideEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, Player <span class="k3">&amp;</span>player, Explosion explosions<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> eSize<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span><span class="k1">void</span> ChangeState<span class="k2">(</span><span class="k1">int</span> <span class="k3">&amp;</span>state, <span class="k1">int</span> newState<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>
<span class="number">  24</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  25</span><span class="k2">{</span>
<span class="number">  26</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  27</span>  <span class="k1">bool</span> draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  28</span>  <span class="k1">int</span> FPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  29</span>  <span class="k1">int</span> state <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  30</span>  <span class="k1">int</span> threshold <span class="k3">=</span> <span class="n">175</span><span class="k2">;</span>
<span class="number">  31</span>  <span class="k1">enum</span> KEYS <span class="k2">{</span> UP, LEFT, RIGHT, DOWN, SPACE <span class="k2">}</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">bool</span> keys<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  33</span>  
<span class="number">  34</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  35</span>  <span class="k2">{</span>
<span class="number">  36</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="s">"Error"</span>, <span class="s">"Falied to initialize allegro"</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  38</span>  <span class="k2">}</span>
<span class="number">  39</span>
<span class="number">  40</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>ScreenWidth, ScreenHeight<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>
<span class="number">  42</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  43</span>  <span class="k2">{</span>
<span class="number">  44</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="s">"Error"</span>, <span class="s">"Falied to initialize the display"</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  46</span>  <span class="k2">}</span>
<span class="number">  47</span>
<span class="number">  48</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">  49</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</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">  51</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>  <a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>  <a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>
<span class="number">  56</span>  playerImage <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">"Ship.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>  enemyImage <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">"alien4.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>  ChangeState<span class="k2">(</span>state, TITLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>  InitPlayer<span class="k2">(</span>player, playerImage<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>  InitBullet<span class="k2">(</span>bullets, NUM_BULLETS, bulletImage, laser<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>  InitEnemy<span class="k2">(</span>enemy, NUM_ENEMIES, enemyImage, explode<span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>  InitExplosions<span class="k2">(</span>explosions, NUM_EXPLOSIONS, explosion<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>  font18 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">18</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</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">  69</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">  70</span>
<span class="number">  71</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">  72</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">  73</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">  74</span>
<span class="number">  75</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">  76</span>  
<span class="number">  77</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  78</span>  <span class="k2">{</span>
<span class="number">  79</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">  80</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">  81</span>
<span class="number">  82</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">  83</span>    <span class="k2">{</span>
<span class="number">  84</span>      draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>      <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> TITLE<span class="k2">)</span>
<span class="number">  87</span>      <span class="k2">{</span>
<span class="number">  88</span>
<span class="number">  89</span>      <span class="k2">}</span>
<span class="number">  90</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
<span class="number">  91</span>      <span class="k2">{</span>
<span class="number">  92</span>        UpdateExplosions<span class="k2">(</span>explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>        UpdateBullet<span class="k2">(</span>bullets, NUM_BULLETS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>        StartEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>        UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>        CollideBullet<span class="k2">(</span>bullets, NUM_BULLETS, enemy, NUM_ENEMIES, player, explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>        CollideEnemy<span class="k2">(</span>enemy, NUM_ENEMIES, player, explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>
<span class="number">  99</span>        <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
<span class="number"> 100</span>        <span class="k2">{</span>
<span class="number"> 101</span>          <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> CheckDistance<span class="k2">(</span>player, enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 102</span>            ChangeState<span class="k2">(</span>state, CHASING<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>        <span class="k2">}</span>
<span class="number"> 104</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> CHASING<span class="k2">)</span>
<span class="number"> 105</span>        <span class="k2">{</span>
<span class="number"> 106</span>          <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&lt;</span> CheckDistance<span class="k2">(</span>player, enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 107</span>            ChangeState<span class="k2">(</span>state, CONTINUE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>          <span class="k1">else</span>
<span class="number"> 109</span>          <span class="k2">{</span>
<span class="number"> 110</span>            <span class="k1">float</span> angle <span class="k3">=</span> AngleToTarget<span class="k2">(</span>enemy, NUM_ENEMIES, player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>            enemy<span class="k2">[</span>NUM_ENEMIES<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>            enemy<span class="k2">[</span>NUM_ENEMIES<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>          <span class="k2">}</span>
<span class="number"> 114</span>        <span class="k2">}</span>
<span class="number"> 115</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> CONTINUE<span class="k2">)</span>
<span class="number"> 116</span>        <span class="k2">{</span>
<span class="number"> 117</span>          UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>        <span class="k2">}</span>
<span class="number"> 119</span>        <span class="k1">if</span> <span class="k2">(</span>player.lives <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 120</span>          ChangeState<span class="k2">(</span>state, GAMEOVER<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>      <span class="k2">}</span>
<span class="number"> 122</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> GAMEOVER<span class="k2">)</span>
<span class="number"> 123</span>      <span class="k2">{</span>
<span class="number"> 124</span>
<span class="number"> 125</span>      <span class="k2">}</span>      
<span class="number"> 126</span>    <span class="k2">}</span>
<span class="number"> 127</span>
<span class="number"> 128</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"> 129</span>    <span class="k2">{</span>
<span class="number"> 130</span>      <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 131</span>      <span class="k2">{</span>
<span class="number"> 132</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 133</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 134</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 135</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 136</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 137</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 138</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 139</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 140</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 141</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 142</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 143</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 144</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 145</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 146</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 147</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 148</span>        keys<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 149</span>        <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> TITLE<span class="k2">)</span>
<span class="number"> 150</span>          ChangeState<span class="k2">(</span>state, PLAYING<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
<span class="number"> 152</span>          FireBullet<span class="k2">(</span>bullets, NUM_BULLETS, player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> GAMEOVER<span class="k2">)</span>
<span class="number"> 154</span>          ChangeState<span class="k2">(</span>state, PLAYING<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 156</span>      <span class="k2">}</span>
<span class="number"> 157</span>    <span class="k2">}</span>
<span class="number"> 158</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"> 159</span>    <span class="k2">{</span>
<span class="number"> 160</span>      <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 161</span>      <span class="k2">{</span>
<span class="number"> 162</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 163</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 164</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 165</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 166</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 167</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 168</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 169</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 170</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 171</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 172</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 173</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 174</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 175</span>        keys<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 176</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 177</span>      <span class="k2">}</span>
<span class="number"> 178</span>    <span class="k2">}</span>
<span class="number"> 179</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 180</span>    <span class="k2">{</span>
<span class="number"> 181</span>      done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 182</span>    <span class="k2">}</span>
<span class="number"> 183</span>
<span class="number"> 184</span>    <span class="k1">if</span> <span class="k2">(</span>draw <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"> 185</span>    <span class="k2">{</span>
<span class="number"> 186</span>      draw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 187</span>
<span class="number"> 188</span>      <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> TITLE<span class="k2">)</span>
<span class="number"> 189</span>      <span class="k2">{</span>
<span class="number"> 190</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>Title, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>      <span class="k2">}</span>
<span class="number"> 192</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
<span class="number"> 193</span>      <span class="k2">{</span>
<span class="number"> 194</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>background, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>        DrawPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>        DrawBullet<span class="k2">(</span>bullets, NUM_BULLETS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>        DrawEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>        DrawExplosions<span class="k2">(</span>explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>
<span class="number"> 200</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font18, <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">5</span>, <span class="n">5</span>, <span class="n">0</span>, <span class="s">"Lives: %i"</span>, player.lives<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font18, <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">5</span>, <span class="n">580</span>, <span class="n">0</span>, <span class="s">"Score: %i"</span>, player.score<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      <span class="k2">}</span>
<span class="number"> 203</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> GAMEOVER<span class="k2">)</span>
<span class="number"> 204</span>      <span class="k2">{</span>
<span class="number"> 205</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>GameOver, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>
<span class="number"> 207</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font18, <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>, ScreenWidth <span class="k3">/</span> <span class="n">2</span>, ScreenHeight <span class="k3">/</span> <span class="n">2</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Final Score: %i"</span>, player.score<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>      <span class="k2">}</span>
<span class="number"> 209</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"> 210</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"> 211</span>    <span class="k2">}</span>
<span class="number"> 212</span>  <span class="k2">}</span>
<span class="number"> 213</span>
<span class="number"> 214</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"> 215</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"> 216</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"> 217</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>playerImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>enemyImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>
<span class="number"> 220</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 221</span>
<span class="number"> 222</span><span class="k2">}</span>
<span class="number"> 223</span><span class="k1">void</span> InitPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image <span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 224</span><span class="k2">{</span>
<span class="number"> 225</span>  player.ID <span class="k3">=</span> PLAYER<span class="k2">;</span>
<span class="number"> 226</span>  player.x <span class="k3">=</span> <span class="n">55</span><span class="k2">;</span>
<span class="number"> 227</span>  player.y <span class="k3">=</span> ScreenHeight <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 228</span>  player.lives <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 229</span>  player.speed <span class="k3">=</span> <span class="n">6</span><span class="k2">;</span>
<span class="number"> 230</span>  player.boundx <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number"> 231</span>  player.boundy <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number"> 232</span>  player.score <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 233</span>  player.frameWidth <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number"> 234</span>  player.frameHeight <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>  <span class="k1">if</span> <span class="k2">(</span>image <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 237</span>    player.image <span class="k3">=</span> image<span class="k2">;</span>
<span class="number"> 238</span><span class="k2">}</span>
<span class="number"> 239</span><span class="k1">void</span> DrawPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player<span class="k2">)</span>
<span class="number"> 240</span><span class="k2">{</span>
<span class="number"> 241</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>player.image, player.x <span class="k3">-</span> player.frameWidth <span class="k3">/</span> <span class="n">2</span>, player.y <span class="k3">-</span> player.frameHeight <span class="k3">/</span> <span class="n">2</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span><span class="k2">}</span>
<span class="number"> 243</span><span class="k1">void</span> InitEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image <span class="k3">=</span> NULL, <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a> <span class="k3">*</span>explode <span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 244</span><span class="k2">{</span>
<span class="number"> 245</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 246</span>  <span class="k2">{</span>
<span class="number"> 247</span>    enemy<span class="k2">[</span>i<span class="k2">]</span>.ID <span class="k3">=</span> ENEMY<span class="k2">;</span>
<span class="number"> 248</span>    enemy<span class="k2">[</span>i<span class="k2">]</span>.live <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 249</span>    enemy<span class="k2">[</span>i<span class="k2">]</span>.speed <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 250</span>    enemy<span class="k2">[</span>i<span class="k2">]</span>.boundx <span class="k3">=</span> <span class="n">15</span><span class="k2">;</span>
<span class="number"> 251</span>    enemy<span class="k2">[</span>i<span class="k2">]</span>.boundy <span class="k3">=</span> <span class="n">15</span><span class="k2">;</span>
<span class="number"> 252</span>
<span class="number"> 253</span>    <span class="k1">if</span> <span class="k2">(</span>image <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 254</span>      enemy<span class="k2">[</span>i<span class="k2">]</span>.image <span class="k3">=</span> image<span class="k2">;</span>
<span class="number"> 255</span>    <span class="k1">if</span> <span class="k2">(</span>explode <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 256</span>      enemy<span class="k2">[</span>i<span class="k2">]</span>.explode <span class="k3">=</span> explode<span class="k2">;</span>
<span class="number"> 257</span>  <span class="k2">}</span>
<span class="number"> 258</span><span class="k2">}</span>
<span class="number"> 259</span><span class="k1">void</span> DrawEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 260</span><span class="k2">{</span>
<span class="number"> 261</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 262</span>  <span class="k2">{</span>
<span class="number"> 263</span>    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 264</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.image, enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">-</span> <span class="n">10</span>, enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">-</span> <span class="n">15</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>  <span class="k2">}</span>
<span class="number"> 266</span><span class="k2">}</span>
<span class="number"> 267</span><span class="k1">void</span> StartEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 268</span><span class="k2">{</span>
<span class="number"> 269</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 270</span>  <span class="k2">{</span>
<span class="number"> 271</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 272</span>    <span class="k2">{</span>
<span class="number"> 273</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">500</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 274</span>      <span class="k2">{</span>
<span class="number"> 275</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.live <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 276</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> ScreenWidth<span class="k2">;</span>
<span class="number"> 277</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <span class="n">50</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span>ScreenHeight <span class="k3">-</span> <span class="n">100</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 278</span>
<span class="number"> 279</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 280</span>      <span class="k2">}</span>
<span class="number"> 281</span>    <span class="k2">}</span>
<span class="number"> 282</span>  <span class="k2">}</span>
<span class="number"> 283</span><span class="k2">}</span>
<span class="number"> 284</span><span class="k1">void</span> UpdateEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 285</span><span class="k2">{</span>
<span class="number"> 286</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 287</span>  <span class="k2">{</span>
<span class="number"> 288</span>    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 289</span>    <span class="k2">{</span>
<span class="number"> 290</span>      enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">-</span><span class="k3">=</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.speed<span class="k2">;</span>
<span class="number"> 291</span>    <span class="k2">}</span>
<span class="number"> 292</span>  <span class="k2">}</span>
<span class="number"> 293</span><span class="k2">}</span>
<span class="number"> 294</span><span class="k1">void</span> CollideEnemy<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, Player <span class="k3">&amp;</span>player, Explosion explosions<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> eSize<span class="k2">)</span>
<span class="number"> 295</span><span class="k2">{</span>
<span class="number"> 296</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 297</span>  <span class="k2">{</span>
<span class="number"> 298</span>    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 299</span>    <span class="k2">{</span>
<span class="number"> 300</span>      <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.boundx <span class="k3">&lt;</span> player.x <span class="k3">+</span> player.boundx <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 301</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">+</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.boundx <span class="k3">&gt;</span> player.x <span class="k3">-</span> player.boundx <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 302</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.boundy <span class="k3">&lt;</span> player.y <span class="k3">+</span> player.boundy <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 303</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">+</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.boundy <span class="k3">&gt;</span> player.y <span class="k3">-</span> player.boundy<span class="k2">)</span>
<span class="number"> 304</span>      <span class="k2">{</span>
<span class="number"> 305</span>        player.lives--<span class="k2">;</span>
<span class="number"> 306</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.live <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 307</span>        StartExplosions<span class="k2">(</span>explosions, eSize, player.x, player.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 308</span>        <a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.explode, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>, <span class="n">1</span>, ALLEGRO_PLAYMODE_ONCE, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 309</span>      <span class="k2">}</span>
<span class="number"> 310</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 311</span>      <span class="k2">{</span>
<span class="number"> 312</span>        enemy<span class="k2">[</span>i<span class="k2">]</span>.live <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 313</span>      <span class="k2">}</span>        
<span class="number"> 314</span>    <span class="k2">}</span>
<span class="number"> 315</span>  <span class="k2">}</span>
<span class="number"> 316</span><span class="k2">}</span>
<span class="number"> 317</span><span class="k1">float</span> CheckDistance<span class="k2">(</span>Player <span class="k3">&amp;</span>player, Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size<span class="k2">)</span>
<span class="number"> 318</span><span class="k2">{</span>
<span class="number"> 319</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 320</span>  <span class="k2">{</span>
<span class="number"> 321</span>    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 322</span>      <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>player.x <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.x, <span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>player.y <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.y, <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 323</span>  <span class="k2">}</span>
<span class="number"> 324</span>  
<span class="number"> 325</span><span class="k2">}</span>
<span class="number"> 326</span><span class="k1">float</span> AngleToTarget<span class="k2">(</span>Enemy enemy<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> size, Player <span class="k3">&amp;</span>player<span class="k2">)</span>
<span class="number"> 327</span><span class="k2">{</span>
<span class="number"> 328</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 329</span>  <span class="k2">{</span>
<span class="number"> 330</span>    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span>
<span class="number"> 331</span>    <span class="k2">{</span>
<span class="number"> 332</span>      <span class="k1">float</span> deltaX <span class="k3">=</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">-</span> player.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 333</span>      <span class="k1">float</span> deltaY <span class="k3">=</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">-</span> player.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 334</span>      <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>deltaX, deltaY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 335</span>    <span class="k2">}</span>
<span class="number"> 336</span>  <span class="k2">}</span>
<span class="number"> 337</span><span class="k2">}</span>
<span class="number"> 338</span>
<span class="number"> 339</span><span class="k1">void</span> ChangeState<span class="k2">(</span><span class="k1">int</span> <span class="k3">&amp;</span>state, <span class="k1">int</span> newState<span class="k2">)</span>
<span class="number"> 340</span><span class="k2">{</span>
<span class="number"> 341</span>  <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
<span class="number"> 342</span>  <span class="k2">{</span>
<span class="number"> 343</span>    <a href="http://www.allegro.cc/manual/al_stop_sample_instance"><span class="a">al_stop_sample_instance</span></a><span class="k2">(</span>SongInstance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 344</span>  <span class="k2">}</span>
<span class="number"> 345</span>
<span class="number"> 346</span>  state <span class="k3">=</span> newState<span class="k2">;</span>
<span class="number"> 347</span>
<span class="number"> 348</span>  <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
<span class="number"> 349</span>  <span class="k2">{</span>
<span class="number"> 350</span>    InitPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 351</span>    InitBullet<span class="k2">(</span>bullets, NUM_BULLETS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 352</span>    InitEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 353</span>    InitExplosions<span class="k2">(</span>explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 354</span>
<span class="number"> 355</span>    <a href="http://www.allegro.cc/manual/al_play_sample_instance"><span class="a">al_play_sample_instance</span></a><span class="k2">(</span>SongInstance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 356</span>  <span class="k2">}</span>
<span class="number"> 357</span>
<span class="number"> 358</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ObscurePaulie)</author>
		<pubDate>Mon, 11 May 2015 17:31:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> PLAYING<span class="k2">)</span>
      <span class="k2">{</span>
        UpdateExplosions<span class="k2">(</span>explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
        UpdateBullet<span class="k2">(</span>bullets, NUM_BULLETS<span class="k2">)</span><span class="k2">;</span>
        StartEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
        UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
        CollideBullet<span class="k2">(</span>bullets, NUM_BULLETS, enemy, NUM_ENEMIES, player, explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>
        CollideEnemy<span class="k2">(</span>enemy, NUM_ENEMIES, player, explosions, NUM_EXPLOSIONS<span class="k2">)</span><span class="k2">;</span>

        <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
        <span class="k2">{</span>
          <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> CheckDistance<span class="k2">(</span>player, enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">)</span>
            ChangeState<span class="k2">(</span>state, CHASING<span class="k2">)</span><span class="k2">;</span>
        <span class="k2">}</span>
</pre></div></div><p>

It will never be able to enter the IDLE state.<br />Separate the game state and enemy state.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> GameState <span class="k2">{</span> Title, Playing, GameOver <span class="k2">}</span><span class="k2">;</span>
<span class="k1">enum</span> EnemyState <span class="k2">{</span> Idle, Chasing, Continue <span class="k2">}</span><span class="k2">;</span>
...
GameState gameState<span class="k2">;</span>
...
enemy<span class="k2">[</span>i<span class="k2">]</span>.state<span class="k2">;</span>
</pre></div></div><p>

Aside from all that:</p><div class="source-code snippet"><div class="inner"><pre>            <span class="k1">float</span> angle <span class="k3">=</span> AngleToTarget<span class="k2">(</span>enemy, NUM_ENEMIES, player<span class="k2">)</span><span class="k2">;</span>
            enemy<span class="k2">[</span>NUM_ENEMIES<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
            enemy<span class="k2">[</span>NUM_ENEMIES<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
This doesn&#39;t make much sense.<br />You seem to be trying to calculate the angle to a target but you pass a complete array and then you write outside of the bounds of the enemy array.</p><p>You probably want something like this.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> NUM_ENEMIES<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
    ...
<span class="k2">}</span>
</pre></div></div><p>
If you want to make an object follow another object in the most simple way, this would be faster than atan and cos/sin
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> dx <span class="k3">=</span> target.x <span class="k3">-</span> object.x<span class="k2">;</span>
<span class="k1">float</span> dy <span class="k3">=</span> target.y <span class="k3">-</span> object.y<span class="k2">;</span>
<span class="k1">float</span> length <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>dx <span class="k3">*</span> dx <span class="k3">+</span> dy <span class="k3">*</span> dy<span class="k2">)</span><span class="k2">;</span>
<span class="k1">float</span> x <span class="k3">=</span> dx <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
<span class="k1">float</span> y <span class="k3">=</span> dy <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
object.x <span class="k3">+</span><span class="k3">=</span> x<span class="k2">;</span>
object.y <span class="k3">+</span><span class="k3">=</span> y<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Mon, 11 May 2015 19:44:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have made some of the changes suggested here, now the only thing I am unsure on is what is the desiredLength meant to be?</p><p>I don&#39;t have that as a variable anywhere in my code.</p><p>So what am I supposed to set it to?</p><p>I have this set up and all it is doing now is restarting my game every time an enemy should be following the player. </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>        <span class="k1">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> NUM_ENEMIES<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  2</span>        <span class="k2">{</span>
<span class="number">  3</span>          <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
<span class="number">  4</span>          <span class="k2">{</span>
<span class="number">  5</span>            <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> CheckDistance<span class="k2">(</span>player, enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">)</span>
<span class="number">  6</span>              ChangeState<span class="k2">(</span>state, CHASING<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>          <span class="k2">}</span>
<span class="number">  8</span>          <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> CHASING<span class="k2">)</span>
<span class="number">  9</span>          <span class="k2">{</span>
<span class="number"> 10</span>            <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&lt;</span> CheckDistance<span class="k2">(</span>player, enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 11</span>              ChangeState<span class="k2">(</span>state, CONTINUE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>            <span class="k1">else</span>
<span class="number"> 13</span>            <span class="k2">{</span>
<span class="number"> 14</span>              <span class="k1">float</span> desiredLength <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number"> 15</span>              <span class="k1">float</span> dx <span class="k3">=</span> player.x <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 16</span>              <span class="k1">float</span> dy <span class="k3">=</span> player.y <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 17</span>              <span class="k1">float</span> length <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>dx <span class="k3">*</span> dx <span class="k3">+</span> dy <span class="k3">*</span>dy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>              <span class="k1">float</span> x <span class="k3">=</span> dx <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
<span class="number"> 19</span>              <span class="k1">float</span> y <span class="k3">=</span> dy <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 22</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 23</span>            <span class="k2">}</span>
<span class="number"> 24</span>          <span class="k2">}</span>
<span class="number"> 25</span>          <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> CONTINUE<span class="k2">)</span>
<span class="number"> 26</span>          <span class="k2">{</span>
<span class="number"> 27</span>            UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>          <span class="k2">}</span>
<span class="number"> 29</span>        <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ObscurePaulie)</author>
		<pubDate>Mon, 11 May 2015 21:24:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You are changing the game&#39;s state, not the enemy&#39;s state, and the check isn&#39;t correct.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">if</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> <span class="k2">(</span>player, enemy<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span>
  ChangeState<span class="k2">(</span>state, CHASING<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

In stead check a bit more thoroughly and set the state of the enemmies correctly. 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.alive<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> CheckOneDistance<span class="k2">(</span>player, enemy<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> 
    enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span> CHASING<span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>

...
<span class="k1">float</span> CheckOneDistance<span class="k2">(</span>Player <span class="k3">&amp;</span>player, Enemy <span class="k3">&amp;</span>enemy<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>player.x <span class="k3">-</span> enemy.x, <span class="n">2</span><span class="k2">)</span> 
             <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>player.y <span class="k3">-</span> enemy.y, <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Also do this for the other item states. Keep at it, you&#39;re learning as you go! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Tue, 12 May 2015 00:21:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>desiredLength is the magnitude of the vector, or simply put how fast you want your object to move.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Tue, 12 May 2015 03:31:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Beoran, you sir are an absolute genius! I can not thank you enough!</p><p>I have it sort of working now with the help from yourself and Taron.</p><p>Only problem I have now is that my enemies seem to fly across the screen if they don&#39;t catch my player <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>and when I say fly I&#39;m not meaning in a standard speed kinda way as they should be <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> I mean literally too fast to attempt to shoot them <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ObscurePaulie)</author>
		<pubDate>Tue, 12 May 2015 03:50:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Probably the speed of the ennemies is set too high somehow. Try to reduce the speed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Tue, 12 May 2015 08:43:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>With the FPS being 60 and the desiredLength being 50, they&#39;d move at 3000 units/second and the units being pixels in this case that would be 3000 pixels per second.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Tue, 12 May 2015 18:19:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know in my earlier code I had 50, that was just test numbers cos I was unsure of what to enter there. However, in my actual coding now I have the desiredLength set to 3 and my movements speed is only set to 4. </p><p>I commented out the code to make the enemies chase my player and they don&#39;t get super speedy, so it is something to do with this code here that is making my enemies go super speedy after so long...</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>        <span class="k1">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> NUM_ENEMIES<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  2</span>        <span class="k2">{</span>
<span class="number">  3</span>          <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> IDLE<span class="k2">)</span>
<span class="number">  4</span>          <span class="k2">{</span>
<span class="number">  5</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>threshold <span class="k3">&gt;</span> CheckDistance<span class="k2">(</span>player, enemy<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  6</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span> CHASING<span class="k2">;</span>
<span class="number">  7</span>          <span class="k2">}</span>
<span class="number">  8</span>          <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> CHASING<span class="k2">)</span>
<span class="number">  9</span>          <span class="k2">{</span>
<span class="number"> 10</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>threshold <span class="k3">&lt;</span> CheckDistance<span class="k2">(</span>player, enemy<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 11</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span> CONTINUE<span class="k2">;</span>
<span class="number"> 12</span>            <span class="k1">else</span>
<span class="number"> 13</span>            <span class="k2">{</span>
<span class="number"> 14</span>              <span class="k1">float</span> desiredLength <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 15</span>              <span class="k1">float</span> dx <span class="k3">=</span> player.x <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 16</span>              <span class="k1">float</span> dy <span class="k3">=</span> player.y <span class="k3">-</span> enemy<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 17</span>              <span class="k1">float</span> length <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>dx <span class="k3">*</span> dx <span class="k3">+</span> dy <span class="k3">*</span>dy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>              <span class="k1">float</span> x <span class="k3">=</span> dx <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
<span class="number"> 19</span>              <span class="k1">float</span> y <span class="k3">=</span> dy <span class="k3">/</span> length <span class="k3">*</span> desiredLength<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 22</span>              enemy<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>              <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.live<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>threshold <span class="k3">&lt;</span> CheckDistance<span class="k2">(</span>player, enemy<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 25</span>                enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span> CONTINUE<span class="k2">;</span>
<span class="number"> 26</span>            <span class="k2">}</span>
<span class="number"> 27</span>          <span class="k2">}</span>
<span class="number"> 28</span>          <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> CONTINUE<span class="k2">)</span>
<span class="number"> 29</span>          <span class="k2">{</span>
<span class="number"> 30</span>            UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>          <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ObscurePaulie)</author>
		<pubDate>Wed, 13 May 2015 03:41:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>enemy<span class="k2">[</span>i<span class="k2">]</span>.state <span class="k3">=</span><span class="k3">=</span> CONTINUE<span class="k2">)</span>  <span class="k2">{</span>  UpdateEnemy<span class="k2">(</span>enemy, NUM_ENEMIES<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
</pre></div></div><p>

This looks incorrect. Remember, you&#39;re looping over all enemies one by one, but UpdateEnemy updates many enemies at once. It doesn&#39;t make sense to do that in that particular place in your program. In stead, you should update the particular enemy[i] in the way you want it to be updated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 13 May 2015 11:04:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah I noticed that myself last night and forgot to update my post. I just decided to take it out of my coding and just use the 2 states for my enemies, as I have the enemies moving across screen in that updateenemies function in my game state of playing anyway. Thanks for the help though <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ObscurePaulie)</author>
		<pubDate>Wed, 13 May 2015 16:09:09 +0000</pubDate>
	</item>
</rss>
