<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>When I tried Multiplayer in my Pong game, priority got to only one player.</title>
		<link>http://www.allegro.cc/forums/view/617708</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 27 Jan 2019 10:24:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am making a PONG game for the compensation of Krampus hack 2018 and while implementing the AI part I got bored so I thought of making it multiplayer. I&#39;m currently making my game with MinGW compiler but I thought of making my multiplayer prototype in my old Code Blocks. Allegro&#39;s 5.0.10 was already configured in it so I thought it will be quick to prototype but when I changed the lines of AI part with the following code the output was unexpected. </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>        <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  2</span>    <span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">switch</span><span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span>
<span class="number">  4</span>    <span class="k2">{</span>
<span class="number">  5</span>    <span class="k1">case</span> ALLEGRO_KEY_R
<span class="number">  6</span>                        <span class="k2">:</span>main<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>                        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  8</span>    <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  9</span>      done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 10</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 12</span>                    
<span class="number"> 13</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"> 14</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 16</span>                    
<span class="number"> 17</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"> 18</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 19</span>    <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number"> 20</span>          
<span class="number"> 21</span>      keys<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 22</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 23</span>    <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 24</span>        
<span class="number"> 25</span>      keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 26</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 27</span>    <span class="k2">}</span>
<span class="number"> 28</span>        <span class="k2">}</span>
<span class="number"> 29</span>
<span class="number"> 30</span>        <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 31</span>    <span class="k2">{</span>
<span class="number"> 32</span>    <span class="k1">switch</span><span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 33</span>    <span class="k2">{</span>
<span class="number"> 34</span>    <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 35</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"> 36</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 37</span>    <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 38</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"> 39</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 40</span>    <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number"> 41</span>      keys<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 42</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 43</span>    <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number"> 44</span>      keys<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 45</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 46</span>    <span class="k2">}</span>
<span class="number"> 47</span>    <span class="k2">}</span>
<span class="number"> 48</span>
<span class="number"> 49</span>            <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 50</span>            <span class="k2">{</span>
<span class="number"> 51</span>                MovePaddleUp<span class="k2">(</span><span class="k3">&amp;</span>pad2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>            <span class="k2">}</span>
<span class="number"> 53</span>            <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 54</span>            <span class="k2">{</span>
<span class="number"> 55</span>                MovePaddleDown<span class="k2">(</span><span class="k3">&amp;</span>pad2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>            <span class="k2">}</span>
<span class="number"> 57</span>            <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 58</span>            <span class="k2">{</span>
<span class="number"> 59</span>                MovePaddleUp<span class="k2">(</span><span class="k3">&amp;</span>pad1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>            <span class="k2">}</span>
<span class="number"> 61</span>            <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 62</span>            <span class="k2">{</span>
<span class="number"> 63</span>                MovePaddleDown<span class="k2">(</span><span class="k3">&amp;</span>pad1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>            <span class="k2">}</span>
</div></div><p>

When Arrow keys are pressed then W, S are not working. The Pad1 is getting priority instead of doing simultaneous movement. Is it because I used an older version of Allegro? Do I have to configure my MinGW compiler in Code Blocks to run it correctly or is there something wrong with my code?</p><p>Edit:</p><p>     Now I have attached the game, its for Windows.<br />     I&#39;m going to compile it in 5.2.4 version.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 25 Jan 2019 00:58:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It never gets to see KEY_W if it sees KEY_UP, because you <span class="source-code"><span class="k1">break</span><span class="k2">;</span></span> out before it gets there...:P
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 25 Jan 2019 05:14:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I switched them but the output is still same.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 25 Jan 2019 18:22:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can&#39;t &quot;switch&quot; them, you have to stop breaking!! Think about it logically...</p><p>IF KEY_W THEN BREAK<br />IF KEY_UP THEN BREAK  &lt;--NEVER GETS REACHED IF KEY_W!</p><p>IF KEY_UP THEN BREAK<br />IF KEY_W THEN BREAK  &lt;--NEVER GETS REACHED IF KEY_UP!</p><p>You can&#39;t <span class="source-code"><span class="k1">break</span></span> and expect more code in the switch/case to run!!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 25 Jan 2019 20:10:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>One event only contains info about one key state change. If you press 2 keys you have 2 events. Make sure you&#39;re processing <i>all</i> events each cycle of the main loop.<br />You might find <a href="https://liballeg.org/a5docs/trunk/keyboard.html#al_get_keyboard_state">al_get_keyboard_state</a> is an easier API to use.</p><p>Also:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">case</span> ALLEGRO_KEY_R <span class="k2">:</span>main<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k1">break</span><span class="k2">;</span>
</pre></div></div><p>
I hope that doesn&#39;t mean that pressing &#39;R&#39; will recursively call <span class="source-code">main</span>()!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 25 Jan 2019 20:54:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>            <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number">  2</span>            <span class="k2">{</span>
<span class="number">  3</span>                MovePaddleUp<span class="k2">(</span><span class="k3">&amp;</span>pad2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>            <span class="k2">}</span>
<span class="number">  5</span>            <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number">  6</span>            <span class="k2">{</span>
<span class="number">  7</span>                MovePaddleDown<span class="k2">(</span><span class="k3">&amp;</span>pad2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>            <span class="k2">}</span>
<span class="number">  9</span>            <span class="c">//</span>
<span class="number"> 10</span>            <span class="c">// This else is what prevents pad1 from moving when pad2 is moving. Remove it</span>
<span class="number"> 11</span>            <span class="c">//</span>
<span class="number"> 12</span>            <span class="c">/**/</span><span class="k1">else</span><span class="c">/**/</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 13</span>            <span class="k2">{</span>
<span class="number"> 14</span>                MovePaddleUp<span class="k2">(</span><span class="k3">&amp;</span>pad1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>            <span class="k2">}</span>
<span class="number"> 16</span>            <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 17</span>            <span class="k2">{</span>
<span class="number"> 18</span>                MovePaddleDown<span class="k2">(</span><span class="k3">&amp;</span>pad1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>            <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 25 Jan 2019 21:11:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617708/1040985#target">Audric</a> said:</div><div class="quote"><p> This else is what prevents pad1 from moving when pad2 is moving. Remove it
</p></div></div><p>Nice one! <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 25 Jan 2019 21:23:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah! Ingenious of you Audric.</p><p>That got perfectly well.<br />I was focusing on the switch case part and was thinking that how can it possibly be stopping paddle 1 to move, and there you got it.</p><p>I have attached the executable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 25 Jan 2019 21:44:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is still probably an issue that this entire block of if(keys[]) gets executed &quot;every time an event is received, no matter the kind of event&quot;.<br />Do the paddles go faster if you hit random keys ?<br />If you are using a timer event to give the tempo of the game logic, the block should rather be here:
</p><div class="source-code snippet"><div class="inner"><pre> <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="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="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="c">// here</span>
   <span class="c">// move paddles according to controllers</span>
   <span class="c">// apply ball physics</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 25 Jan 2019 22:23:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Audric, I tried it but the ball still moves faster even when I move mouse over screen.</p><p>I must be doing it badly. I&#39;m going to refactor it and look for possible blind spots.</p><p>Edit:<br />     Thanks Audric, I was doing it indeed badly, now its much better, there is still some flickering but ball isn&#39;t going off just on every event passed to game.</p><p>I have attached the main program file, please look at it and tell me my mistakes and where I should I improve.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 25 Jan 2019 22:53:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Think about it, what happens when you move the mouse? It generates an event, and if your logic runs once for every event, then your game will update faster when the mouse moves. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 25 Jan 2019 23:01:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes Edgar, now i totally get it.</p><p>Please look at my main C file and tell me where I can improve. Everybody is welcome for positive criticism.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 25 Jan 2019 23:07:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, well, there are some problems.</p><p>I used Code::Blocks code folding feature to illustrate my point :</p><p><span class="remote-thumbnail"><span class="json">{"name":"611873","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/d\/fd014ca5d6760439816334c0211343ad.png","w":1920,"h":1080,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/d\/fd014ca5d6760439816334c0211343ad"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/d/fd014ca5d6760439816334c0211343ad-240.jpg" alt="611873" width="240" height="135" /></span></p><p>You can clearly see how you&#39;re using your ALLEGRO_EVENT before it is valid.</p><p>The line :</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
</pre></div></div><p>

Only allocates space on the stack for your object. Because in C object&#39;s don&#39;t have constructors, the memory held by event is uninitialized.</p><p>So when you ask on the following line,</p><div class="source-code snippet"><div class="inner"><pre><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="c">/*...*/</span><span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

You&#39;re accessing type, which is uninitialized.</p><p>In fact, you don&#39;t even have a valid value for your event until the end of your loop when you call al_wait_for_event and then you just ignore it!.</p><p>You&#39;ve got to learn <a href="https://en.wikipedia.org/wiki/Scope_%28computer_science%29">scoping rules</a>.</p><p>Another questionable thing is mixing event handling and logic.</p><p>Peter Hull started a thread on <a href="https://www.allegro.cc/forums/thread/617709">the event loop</a>, you should follow along there and take a look at the different kinds of loops there are.</p><p>The basic game loop is like this (Object Oriented and in C, for your viewing pleasure) :</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">typedef</span> <span class="k1">struct</span> Game <span class="k2">{</span><span class="c">/*...blah...*/</span><span class="k2">}</span> <span class="k3">*</span>game<span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span>Game<span class="k3">*</span> CreateGame<span class="k2">(</span><span class="c">/** parameters */</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/** make a game object */</span><span class="k2">}</span>
<span class="number">  4</span><span class="k1">void</span> DestroyGame<span class="k2">(</span>Game<span class="k3">*</span><span class="k3">*</span> g<span class="k2">)</span> <span class="k2">{</span><span class="c">/** destroy game */</span><span class="k2">}</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> UpdateGame<span class="k2">(</span>Game<span class="k3">*</span> g , <span class="k1">double</span> dt<span class="k2">)</span> <span class="k2">{</span><span class="c">/** ... */</span><span class="k2">}</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">int</span> HandleEvent<span class="k2">(</span>Game<span class="k3">*</span> g , <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>   <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>      UpdateGame<span class="k2">(</span>g , <a href="http://www.allegro.cc/manual/al_get_timer_speed"><span class="a">al_get_timer_speed</span></a><span class="k2">(</span>ev.timer.source<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k2">}</span>
<span class="number"> 12</span>   <span class="c">/** Handle other events here */</span>
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span><span class="k1">void</span> Redraw<span class="k2">(</span>Game<span class="k3">*</span> g<span class="k2">)</span> <span class="k2">{</span><span class="c">/**...*/</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 19</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number"> 20</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   Game<span class="k3">*</span> game <span class="k3">=</span> CreateGame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>game<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game-&gt;quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 26</span>      <span class="k1">if</span> <span class="k2">(</span>game-&gt;redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>         Redraw<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>         game-&gt;redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 29</span>      <span class="k2">}</span>
<span class="number"> 30</span>      <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 31</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"> 32</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>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>         <span class="c">/// We're now guaranteed a valid event. al_get_next_event makes no such guarantee</span>
<span class="number"> 34</span>         HandleEvent<span class="k2">(</span>game , ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>      <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>   <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>   <span class="c">/// Clean up</span>
<span class="number"> 39</span>   DestroyGame<span class="k2">(</span><span class="k3">&amp;</span>game<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 26 Jan 2019 00:51:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for all this. I got this wrong way from a website I was learning so I thought that it was somehow OK.</p><p>Right now I&#39;m listening &quot;Pray for me&quot; and i&#39;m all fired up to correct my mistakes.<br />thanks for the link I&#39;ll correct all the mistakes right away and learn what is necessary.</p><p>How did you made the image to display?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 26 Jan 2019 00:59:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&lt;img src=&quot;<a href="http:///blah.com/img.jpg">http:///blah.com/img.jpg</a>&quot; /&gt;</p><p>What website were you looking at? I&#39;d like to see the code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 26 Jan 2019 01:29:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, I was talking about the images in attachments.<br />How to show images from attachments.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 26 Jan 2019 12:11:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just use the URL of the attachment as the URL of the img tag, like so :</p><p>&lt;img src=&quot;<a href="https://d1cxvcw9gjxu2x.cloudfront.net/attachments/611874">https://d1cxvcw9gjxu2x.cloudfront.net/attachments/611874</a>&quot; /&gt;</p><p>Gives you :</p><p><span class="remote-thumbnail"><span class="json">{"name":"611874","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/5\/f5b9d682a1f3459e1b61a8fdf8162116.png","w":1920,"h":1080,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/5\/f5b9d682a1f3459e1b61a8fdf8162116"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/5/f5b9d682a1f3459e1b61a8fdf8162116-240.jpg" alt="611874" width="240" height="135" /></span></p><p>Protip : When you upload attachments, they turn blue and become a link. Right click on them and select &quot;copy link location&quot; and then paste it into your src tag.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 26 Jan 2019 12:34:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Like this :<br />            	<span class="remote-thumbnail"><span class="json">{"name":"611875","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/d\/6d4e65f5083f5b765ab638f267b70e02.png","w":814,"h":639,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/d\/6d4e65f5083f5b765ab638f267b70e02"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/6/d/6d4e65f5083f5b765ab638f267b70e02-240.jpg" alt="611875" width="240" height="188" /></span></p><p>Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 26 Jan 2019 13:03:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nice, clean looking Pong. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Now try to draw tails behind the ball as it travels. This will require you to think a little bit. Consider it a personal challenge.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 26 Jan 2019 18:02:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Continuing on Edgar&#39;s suggestion:</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game-&gt;quit<span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span>game-&gt;redraw<span class="k2">)</span> <span class="k2">{</span>
         Redraw<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
         game-&gt;redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
      <span class="k2">}</span>
</pre></div></div><p>

Most games separate the logic from the draw code. In a nice, small pong game like this one, that probably isn&#39;t necessary, but in bigger projects, you&#39;ll want to have an update function prior to the Redraw.</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game-&gt;quit<span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span>game-&gt;redraw<span class="k2">)</span> <span class="k2">{</span>
         Update<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
         Redraw<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
         game-&gt;redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
      <span class="k2">}</span>
</pre></div></div><p>

The update function handles the &quot;business logic&quot; of the game --- moving paddles and the ball, for instance. This gives you a number of advantages; one is that you can now pause the game, simply by omitting the update call whilst the game state is paused.</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game-&gt;quit<span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span>game-&gt;redraw<span class="k2">)</span> <span class="k2">{</span>
         <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>game-&gt;paused<span class="k2">)</span> <span class="k2">{</span>
            Update<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
         <span class="k2">}</span>
         Redraw<span class="k2">(</span>game<span class="k2">)</span><span class="k2">;</span>
         game-&gt;redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
      <span class="k2">}</span>
</pre></div></div><p>

Note that the main game loop will still call Redraw whether the game is paused or not. Because you&#39;ve separated the event loop from the game logic, you can now manipulate the game pause state with an input event.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (princeofspace)</author>
		<pubDate>Sun, 27 Jan 2019 00:51:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617708/1041009#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Now try to draw tails behind the ball as it travels</p></div></div><p>

I already have a challenge of completing the AI part and now completing the menu.<br />It&#39;s almost done, maybe I&#39;ll be able to upload my entry today. Kudos!</p><p>I&#39;ll come to the tail part tomorrow.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sun, 27 Jan 2019 10:24:22 +0000</pubDate>
	</item>
</rss>
