<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Error with random results</title>
		<link>http://www.allegro.cc/forums/view/570814</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 08 Mar 2006 18:21:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In my game, I have it detect when a square leaves the screen, and when this happens a variable is decreased by one which soon after this makes a new square. (In my main loop, when this variable is less than another, it makes a new square)  What happens is that it only works about 4 times and the direction and even the amount of times it works is almost completely random(I have the function write to log what it does, and the log is almost always different), but it never always works.  Also, sometimes the squares stop moving abruptly, and I can seem to figure it out.  
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">// Creates square (Just changes values of original squares)</span></td></tr><tr><td class="number">2</td><td><span class="k1">void</span> create_square<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td> </td></tr><tr><td class="number">5</td><td> squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.size <span class="k3">=</span> minsquaresize <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> % maxsquaresize<span class="k2">;</span> <span class="c">// Random Size</span></td></tr><tr><td class="number">6</td><td> squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.color <span class="k3">=</span> <span class="n">100</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="n">156</span><span class="k2">;</span>                    <span class="c">// Between 100 and 25 for red</span></td></tr><tr><td class="number">7</td><td> squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.speed <span class="k3">=</span> minspeed <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> % maxspeed<span class="k2">;</span>          <span class="c">// Random speed</span></td></tr><tr><td class="number">8</td><td> squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.dir <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">4</span><span class="k2">;</span>                              <span class="c">// Random Direction</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td> <span class="k1">switch</span><span class="k2">(</span>squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.dir<span class="k2">)</span></td></tr><tr><td class="number">11</td><td> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>  <span class="c">// Left //</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span> </td></tr><tr><td class="number">14</td><td>       write_to_log<span class="k2">(</span><span class="s">"--Square created with direction 'LEFT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="c">// Up //</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span> </td></tr><tr><td class="number">20</td><td>       write_to_log<span class="k2">(</span><span class="s">"--Square created with direction 'UP'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  <span class="c">// Right //</span></td></tr><tr><td class="number">25</td><td>  <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span> </td></tr><tr><td class="number">26</td><td>       write_to_log<span class="k2">(</span><span class="s">"--Square created with direction 'RIGHT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  <span class="c">// Down //</span></td></tr><tr><td class="number">31</td><td>  <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span> </td></tr><tr><td class="number">32</td><td>       write_to_log<span class="k2">(</span><span class="s">"--Square created with direction 'DOWN'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>       squares<span class="k2">[</span>currentsquares<span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td> <span class="k2">}</span></td></tr><tr><td class="number">37</td><td> currentsquares<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td><span class="c">// Moves squares</span></td></tr><tr><td class="number">41</td><td><span class="k1">void</span> update_squares<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">42</td><td><span class="k2">{</span></td></tr><tr><td class="number">43</td><td> <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">44</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> maxsquares<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">45</td><td> <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>  <span class="c">// Destroy old square //</span></td></tr><tr><td class="number">47</td><td>  <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, squares<span class="k3">&lt;</span>i&gt;.x, squares<span class="k3">&lt;</span>i&gt;.y, squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  <span class="k1">switch</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.dir<span class="k2">)</span></td></tr><tr><td class="number">49</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">50</td><td>   <span class="c">// Left //</span></td></tr><tr><td class="number">51</td><td>   <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span> </td></tr><tr><td class="number">52</td><td>        squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span> squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">-</span> squares<span class="k3">&lt;</span>i&gt;.speed<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>   <span class="c">// Up //</span></td></tr><tr><td class="number">55</td><td>   <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span> </td></tr><tr><td class="number">56</td><td>        squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span> squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">-</span> squares<span class="k3">&lt;</span>i&gt;.speed<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>   <span class="c">// Right //</span></td></tr><tr><td class="number">59</td><td>   <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span> </td></tr><tr><td class="number">60</td><td>        squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span> squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.speed<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>   <span class="c">// Down //</span></td></tr><tr><td class="number">63</td><td>   <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span> </td></tr><tr><td class="number">64</td><td>        squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span> squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.speed<span class="k2">;</span></td></tr><tr><td class="number">65</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">67</td><td> <span class="k2">}</span></td></tr><tr><td class="number">68</td><td><span class="k2">}</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td><span class="c">// Draws the squares</span></td></tr><tr><td class="number">71</td><td><span class="k1">void</span> draw_squares<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">72</td><td><span class="k2">{</span></td></tr><tr><td class="number">73</td><td> <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">74</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> currentsquares<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">75</td><td>  <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, squares<span class="k3">&lt;</span>i&gt;.x, squares<span class="k3">&lt;</span>i&gt;.y, squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.color,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td> </td></tr><tr><td class="number">77</td><td><span class="k2">}</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td><span class="c">// This checks when they reach the other end of the screen</span></td></tr><tr><td class="number">80</td><td><span class="k1">void</span> detect_end<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">81</td><td><span class="k2">{</span></td></tr><tr><td class="number">82</td><td> <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">83</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> currentsquares<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">84</td><td> <span class="k2">{</span></td></tr><tr><td class="number">85</td><td>  <span class="k1">switch</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.dir<span class="k2">)</span></td></tr><tr><td class="number">86</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">87</td><td>   <span class="c">// Left //</span></td></tr><tr><td class="number">88</td><td>   <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span> </td></tr><tr><td class="number">89</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span>squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">90</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">91</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'LEFT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td>         currentsquares--<span class="k2">;</span></td></tr><tr><td class="number">93</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">94</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>   <span class="c">// Up //</span></td></tr><tr><td class="number">96</td><td>   <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span> </td></tr><tr><td class="number">97</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span>squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">98</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">99</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'UP'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>         currentsquares--<span class="k2">;</span></td></tr><tr><td class="number">101</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">102</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>   <span class="c">// Right //</span></td></tr><tr><td class="number">104</td><td>   <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span> </td></tr><tr><td class="number">105</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">106</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">107</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'RIGHT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>         currentsquares--<span class="k2">;</span></td></tr><tr><td class="number">109</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">110</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>   <span class="c">// Down //</span></td></tr><tr><td class="number">112</td><td>   <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span> </td></tr><tr><td class="number">113</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">114</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">115</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'DOWN'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>         currentsquares--<span class="k2">;</span></td></tr><tr><td class="number">117</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">118</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">119</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">120</td><td> <span class="k2">}</span></td></tr><tr><td class="number">121</td><td><span class="k2">}</span></td></tr><tr><td class="number">122</td><td>&#160;</td></tr><tr><td class="number">123</td><td><span class="c">// This is the main loop</span></td></tr><tr><td class="number">124</td><td>&#160;</td></tr><tr><td class="number">125</td><td>        <span class="k1">if</span><span class="k2">(</span>currentsquares <span class="k3">&lt;</span> maxsquares<span class="k2">)</span></td></tr><tr><td class="number">126</td><td>         create_square<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>        update_squares<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td>        draw_squares<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">129</td><td>        detect_collision<span class="k2">(</span>mx, my<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>        detect_end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>        <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
That is all the code involving the squares, and I can&#39;t seem to figure this out.  If you guys could help, that would be great.  I wish I could break it down further, but I really have no clue why it would do this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Sat, 04 Mar 2006 08:51:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
A couple of things.</p><p>1) The square you remove from the list is most of the time not the one that left the screen<br />2) Your design is overall not very good. Rectfill in update()? Why?<br />3) What do you mean by &quot;doesn&#39;t work&quot;? Define the expected behaviour, and how what you get differs from it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Sat, 04 Mar 2006 08:54:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1) What do you mean?  Are you saying that I have the wrong x and y values or something?</p><p>2) I have the rectfill in update so that it gets rid of the old square.  The values change in that function, so if I didn&#39;t do it here, a drawn square would just remain where it&#39;s at while it keeps updating.  (I know it&#39;s horrible, but I couldn&#39;t think of anything better)</p><p>3) I expect it to create 10 squares, then once one square leaves the screen, have that same square be replaced with new values.  What happens is that they leave, and SOMETIMES the squares are replaced, but they often move about half-way across the screen, then abruptly stop, while SOMETIMES one of them moves right past it.  It&#39;s very strange, but I&#39;m not sure how to fix it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Sat, 04 Mar 2006 10:18:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
1) Regardless of which square exits the screen, it&#39;s the last square in the list that gets overwritten.</p><p>2) Redraw the entire screen every logic frame.</p><p>3) See #1
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Sat, 04 Mar 2006 10:22:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1)  I know that&#39;s the case, and I thought that might be the error.</p><p>2)  Every logic frame?  I&#39;m relatively new to this as you might have been able to tell, so do you mean like every second or what?  And how would you code this?</p><p>3)  How would I avoid making it the last one every time?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Sat, 04 Mar 2006 10:33:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As for the logic frame, I think he means you should do something like this...</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">while</span><span class="k2">(</span> running <span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">while</span><span class="k2">(</span> do_logic <span class="k2">)</span>
  <span class="k2">{</span>
    update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>

  draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

rather than doing logic and drawing at the same time. Look further into Allegro timers and stuff to find out more about that. There was a pretty informative post towards this a few days ago if i remember correctly.</p><p>But, sorry, I don&#39;t know where your problem is. If you limit it down to a smaller portion of code where the problem might be, I&#39;m sure many would be happy to review your code more closely.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Sat, 04 Mar 2006 11:46:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok I&#39;ve completely updated my source to make it &quot;cleaner&quot; and it managed to fix one problem, which where they just stopped in the middle of the screen, but now they don&#39;t always make a new square and it flickers like crazy(I used the update every logic second thing).  I think I&#39;ve also managed to locate the main problem which is here:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">////////////////////////////////////////////////////////////////////////////////</span></td></tr><tr><td class="number">2</td><td><span class="c">// Detect End                                                                 //</span></td></tr><tr><td class="number">3</td><td><span class="c">// Detects when the squares reach the end of the screen                       //</span></td></tr><tr><td class="number">4</td><td><span class="c">////////////////////////////////////////////////////////////////////////////////</span></td></tr><tr><td class="number">5</td><td><span class="k1">void</span> detect_end<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td> <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">8</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> maxsquares<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td> <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">switch</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.dir<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>   <span class="c">// Left //</span></td></tr><tr><td class="number">13</td><td>   <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span> </td></tr><tr><td class="number">14</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span>squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">15</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'LEFT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>         replace_square<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>   <span class="c">// Up //</span></td></tr><tr><td class="number">21</td><td>   <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span> </td></tr><tr><td class="number">22</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span>squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">23</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'UP'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>         replace_square<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>   <span class="c">// Right //</span></td></tr><tr><td class="number">29</td><td>   <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span> </td></tr><tr><td class="number">30</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">31</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">32</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'RIGHT'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>         replace_square<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">35</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>   <span class="c">// Down //</span></td></tr><tr><td class="number">37</td><td>   <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span> </td></tr><tr><td class="number">38</td><td>        <span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span></td></tr><tr><td class="number">39</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>         write_to_log<span class="k2">(</span><span class="s">"--Square left with direction 'DOWN'--"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>         replace_square<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">43</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">45</td><td> <span class="k2">}</span></td></tr><tr><td class="number">46</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
That detects when the square exits through the other end of the end, which is why I add the size of the square to the coordinates.  Problem is I don&#39;t think it detects it correctly, so I&#39;ve come to conclusion that this script is the problem.  Here is my timer code if you are interested:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">//In startup</span></td></tr><tr><td class="number">2</td><td><a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>timer_i, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="c">//In main loop</span></td></tr><tr><td class="number">5</td><td><span class="k1">while</span><span class="k2">(</span>timer <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>         update_squares<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>         detect_collision<span class="k2">(</span>mx, my<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>         detect_end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>         <span class="k3">-</span><span class="k3">-</span>timer<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">12</td><td>        update_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="c">//Actual timer script</span></td></tr><tr><td class="number">15</td><td><span class="k1">void</span> timer_i<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>     <span class="k3">+</span><span class="k3">+</span>timer<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr><tr><td class="number">18</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>timer_i<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
and like I said, that does work, but it flickers like crazy.  Thanks for the help so far guys, but could you try to answer the problems above?  Many thanks to you guys.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Mon, 06 Mar 2006 04:43:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I might have possibly found your problem, but it&#39;s hard to tell without more code. For each direction, you are doing this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span>squares<span class="k3">&lt;</span>i&gt;.size<span class="k2">)</span>
</pre></div></div><p>

You should check if each squares x is less than or equal to the left boundary rather than if it is equal to -squares.size. If the speed is always 1, then it should work, but even then, it&#39;s a bad way of doing it.</p><p>As for screen flicker, need to see your update_screen() function before I can make any suggestions. Are you using a double-buffer or pageflipping? Are you vsyncing, or letting it be handled automatically(with pageflipping)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Mon, 06 Mar 2006 23:59:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve ot the same problem in my game 2 years ago... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /><br />but I solved !;)</p><p>You must control the time. Windows is Multitasking and sometimes leave your application without refresh. That means that your update process will calculate an out of range X and Y position.</p><p>What you must do is to control the Delta Time while an update , and the following update, overflow from ... 30 milliseconds. In that case you must not consider this update and reset your time to the previous (so X and Y are not incremented), because all the system is going slow...</p><p>In my game I make appear a text with &quot;CPU SLOW&quot; message... when the system return to loop at normal speed, you can proceed with your normal X/Y updating.</p><p>Try and let me know.<br /><img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /><br />If I&#39;m right , review my game below .<br />Ciao
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LordHolNapul)</author>
		<pubDate>Tue, 07 Mar 2006 03:06:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Elverion - I put that in, and the squares didn&#39;t stop coming! YES!!!  But it still flickers, and I have no idea what I&#39;m using.</p><p>Roberto Mutti - To be completely honest with you, I have no idea what your talking about.  You must remember I&#39;m very new to C and Allegro, so I&#39;m not very experienced.</p><p>Here is my screen code now:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> update_screen<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td> <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">4</td><td> clear_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> maxsquares<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td>  <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, squares<span class="k3">&lt;</span>i&gt;.x, squares<span class="k3">&lt;</span>i&gt;.y, squares<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, squares<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> squares<span class="k3">&lt;</span>i&gt;.size, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>squares<span class="k3">&lt;</span>i&gt;.color,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td> </td></tr><tr><td class="number">8</td><td><span class="k2">}</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">void</span> clear_screen<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td><span class="k2">{</span></td></tr><tr><td class="number">12</td><td> <span class="c">// Clear Screen //</span></td></tr><tr><td class="number">13</td><td> <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td> <span class="c">// Clear Buffer //</span></td></tr><tr><td class="number">15</td><td> <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, buffer-&gt;w, buffer-&gt;h, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

That&#39;s the code I used, thank god you guys figured it out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 07 Mar 2006 03:20:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
1) Don&#39;t clear the screen,</p><p>2) Where do you blit the buffer to screen?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Tue, 07 Mar 2006 03:32:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1) Why not clear the screen?  If I didn&#39;t, wouldn&#39;t the old squares still be there?</p><p>2) I use buffer with my main menu when I want to keep my mouse in front of the text.  I used it in a really crappy method, but it works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 07 Mar 2006 04:08:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
1) Why not clear the screen? If I didn&#39;t, wouldn&#39;t the old squares still be there?
</p></div></div><p>
No, because you&#39;ll blit your buffer over it.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
2) I use buffer with my main menu when I want to keep my mouse in front of the text. I used it in a really crappy method, but it works.
</p></div></div><p>
That... didn&#39;t answer X-G&#39;s question. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Tue, 07 Mar 2006 04:17:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Brian, don&#39;t pay too much mind to the delta-time method...it&#39;s overly complicated and is a bit difficult for newer programmers to come to grasp with. Try using the fixed logic method instead until you think you are ready for delta-time.</p><p>Now about the flickering, this is caused because of the vertical retrace. See, your monitor and your screen bitmap are not in sync with each other, which is why it&#39;s getting all flickery. To fix this, call vsync(); just before you blit your buffer to the screen.</p><p>Also, in your clear_screen function, it looks like you can remove
</p><div class="source-code snippet"><div class="inner"><pre> <span class="c">// Clear Screen //</span>
 <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Since you should be drawing over top of the old screen with the new buffer, clearing the screen would be wasteful.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Tue, 07 Mar 2006 04:23:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, so you want me to blit a blank buffer on there, ok.  I was blitting text to a buffer, then blitting the buffer to the screen, then the cursor to the screen that way when I &quot;hovered&quot; over the options, the mouse would stay on top.  I didn&#39;t really intend on using it to cover everything up.  To use vsync, I only need to type in <br /><span class="source-code"><a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span><br />before I blit all the stuff to the screen?  If so, I&#39;ll implement that as soon as possible.  Also, is there any way I can read more about this &quot;delta-time&quot; method?  I&#39;ve never really heard of it, and there&#39;s other methods I&#39;m not familiar with such as pageflipping, triple-buffer, or whatever those are.  Thanks for all the help guys, this is really awesome.</p><p>EDIT:  I added vsync, works real nice, now it seems to jump a little bit here and there and seems choppy, but the flickering definantely stopped.  I am using a very, very flawed version of detecting collisions that I was hoping you guys could look over.  What I did was I detected every single pixel on the edges of the cursor, and I was wondering if there was an easier way?  Here&#39;s the code I&#39;ve been using:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> detect_collision<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td> <span class="k1">int</span> i<span class="k2">;</span> </td></tr><tr><td class="number">4</td><td> <span class="k1">int</span> half <span class="k3">=</span> CURSORSIZE <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td> </td></tr><tr><td class="number">6</td><td> <span class="c">// Left Side //</span></td></tr><tr><td class="number">7</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="k3">-</span>half<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> half<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, x <span class="k3">-</span> half, y <span class="k3">+</span> i<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="c">// Not Equal to Black</span></td></tr><tr><td class="number">10</td><td>   <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><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">255</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">255</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">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"COLLISION!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td> <span class="k2">}</span></td></tr><tr><td class="number">12</td><td>  <span class="c">// Top Side //</span></td></tr><tr><td class="number">13</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="k3">-</span>half<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> half<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td> <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, x <span class="k3">+</span> i, y <span class="k3">-</span> half<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="c">// Not Equal to Black</span></td></tr><tr><td class="number">16</td><td>   <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><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">255</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">255</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">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"COLLISION!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td> <span class="k2">}</span></td></tr><tr><td class="number">18</td><td> <span class="c">// Right Side //</span></td></tr><tr><td class="number">19</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="k3">-</span>half<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> half<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">20</td><td> </td></tr><tr><td class="number">21</td><td> <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, x <span class="k3">-</span> half, y <span class="k3">+</span> i<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="c">// Not Equal to Black</span></td></tr><tr><td class="number">23</td><td>   <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><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">255</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">255</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">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"COLLISION!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td> <span class="c">// Bottom Side //</span></td></tr><tr><td class="number">26</td><td> <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="k3">-</span>half<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> half<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td> <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, x <span class="k3">+</span> i, y <span class="k3">+</span> half<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="c">// Not Equal to Black</span></td></tr><tr><td class="number">29</td><td>   <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><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">255</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">255</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">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"COLLISION!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td> <span class="k2">}</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
I hope this is my last question for awhile.  Thanks everyone.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Tue, 07 Mar 2006 09:15:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think you should try page-flipping, it removed that jerkiness for me, and I&#39;ve been using it since. Actually, I setup a class to attempt to use page-flipping, and if it cannot be setup (OS does not allow for multipul video bitmaps), then it will fall back on a simple memory double-buffer. It works pretty well, and I could give you the source code to it. It&#39;s been tested on Windows and Gentoo Linux.</p><p>Simple square collisions can be done with &quot;collision boxes&quot;. That is, you setup a rectangle, and simply check if something is within those points. Here&#39;s a chunk of code from a menu button in my game.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> CBasicButton::point_is_bounding<span class="k2">(</span><span class="k1">int</span> px, <span class="k1">int</span> py<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span>  <span class="c">// check if (px,py) is within the button, return true if it is</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>px <span class="k3">&gt;</span><span class="k3">=</span> x<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>px <span class="k3">&lt;</span><span class="k3">=</span> x <span class="k3">+</span> graphic-&gt;w<span class="k2">)</span> <span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>py <span class="k3">&gt;</span><span class="k3">=</span> y<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>py <span class="k3">&lt;</span><span class="k3">=</span> y <span class="k3">+</span> graphic-&gt;h<span class="k2">)</span> <span class="k2">)</span></td></tr><tr><td class="number">6</td><td>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">8</td><td>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">11</td><td>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k2">}</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">int</span> CBasicButton::handle_clicks<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span>  <span class="c">// mb1 and mb2 hold the mouse button states.</span></td></tr><tr><td class="number">16</td><td>   <span class="c">// one is "previous", one is "now"</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">static</span> <span class="k1">int</span> mb1, mb2 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>  mb2 <span class="k3">=</span> mb1<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  mb1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  </td></tr><tr><td class="number">22</td><td>  <span class="c">// if the user has just released the left mouse button, return it</span></td></tr><tr><td class="number">23</td><td>  <span class="c">// 1 represents left mouse button, 2 will represent right mouse button</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span><span class="k3">!</span>mb1 <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>mb2 <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> point_is_bounding<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a>, <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">)</span> <span class="k2">)</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">27</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Wed, 08 Mar 2006 01:16:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, if you could show me how to use pageflipping, that would be great.  And for the collisions, I&#39;m surprised I didn&#39;t think of that before.  Thanks a lot.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Wed, 08 Mar 2006 03:57:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll attach my screensystem source, with a well commented example on how to use it, and the Dev-CPP project file. It&#39;s very simple; you almost can&#39;t screw it up. You can use it however you want, with no need to give me credit(as if it&#39;s all that difficult and deserved credit).</p><p>Anyways, page-flipping is simply creating an array of 2 BITMAP *s, then you draw to page one, flip it to the screen, and while that one is being used as the screen bitmap, you draw to the other. You just keep switching between which one is getting drawn, and which one is getting drawn to.</p><p>Setup:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>pages<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> NULL<span class="k2">;</span>
pages<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>
pages<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>

<span class="k1">int</span> page <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
</pre></div></div><p>

draw/flip:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/show_video_bitmap" target="_blank"><span class="a">show_video_bitmap</span></a><span class="k2">(</span>pages<span class="k2">[</span>page<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
page <span class="k3">=</span> <span class="k2">(</span>page<span class="k3">+</span><span class="n">1</span><span class="k2">)</span> % <span class="n">2</span><span class="k2">;</span> <span class="c">// this makes it 1 if it was 0, and 0 if it was 1</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Wed, 08 Mar 2006 04:40:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I honestly looked through it, but I don&#39;t know how C++ works, so is there a way I can use this with C?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Wed, 08 Mar 2006 07:22:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nope, I guess not. Just use the chunks of code from my last post for creating your page-flipping mechanism, and drawing it. then, to draw onto your buffer, draw to pages[page]. I&#39;m sure you can figure out how to do it. If you need more information, consult the allegro manual.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Wed, 08 Mar 2006 10:32:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, I guess I won&#39;t be learning anything unless I actually try it completely on my own.  Thanks for all your help guys.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paladin)</author>
		<pubDate>Wed, 08 Mar 2006 18:21:14 +0000</pubDate>
	</item>
</rss>
