<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Create bitmap, expand the bitmap, suggestions. Cookies.</title>
		<link>http://www.allegro.cc/forums/view/600857</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 13 Jul 2009 12:11:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#039;m rewriting the game known as Chain Rxn flash game found on Facebook (<a href="http://apps.facebook.com/chainrxn/">http://apps.facebook.com/chainrxn/</a>), or Boomshine on the &quot;originator&#039;s&quot; site (<a href="http://www.k2xl.com/games/boomshine/">http://www.k2xl.com/games/boomshine/</a>), and just have the early stages of the game up.  Nothing fancy so far, and the code is more spaghetti than anything.</p><p>I have everything, for now, in a single file if anyone can give me feedback.  What I am trying to do right now is make the ball grow from the size that it <b>IS</b> (roughly 16x16 or 32x32 pixels) to about 10 times its size, stay that big for a bit, then shrink to nothingness.  Total time that it will be stretched and shrunk before being &quot;dead&quot; for the rest of the round: 3-4 seconds.</p><p>I could create another, larger, bitmap and reference that instead, using stretch_blit to either stretch up (from the smaller image) or stretch down (from the larger), though I don&#039;t know how that will affect the semi-transparent properties that each of these Ball objects will need.  You can check out the flash counterparts to see what they need to try to look like when they &quot;pop&quot;.</p><p>Suggestions and feedback?  I&#039;ll be either updating my original post with changes, or adding new posts with code as I make modifications!</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;cmath&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="c">/* Stolen from BZflag (BattleZone Capture the Flag game)'s 'common.h' file.</span>
<span class="number">   8</span><span class="c"> * I thought I'd be nice enough to at least credit them that I took the code</span>
<span class="number">   9</span><span class="c"> * from their files, though I'll probably redo this later before it gets</span>
<span class="number">  10</span><span class="c"> * officially released.  We'll see.  Proper headings and all that will follow</span>
<span class="number">  11</span><span class="c"> * if it does.</span>
<span class="number">  12</span><span class="c"> */</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="c">/* (radians &lt;--&gt; degrees) conversion values */</span>
<span class="number">  15</span><span class="p">#define DEG2RAD 0.0174532925199432957692369076848861271344287189</span>
<span class="number">  16</span><span class="p">#define RAD2DEG 57.29577951308232087679815481410517033240547247</span>
<span class="number">  17</span><span class="p">#define DEG2RADf ((float)DEG2RAD)</span>
<span class="number">  18</span><span class="p">#define RAD2DEGf ((float)RAD2DEG)</span>
<span class="number">  19</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="k1">const</span> <span class="k1">float</span> possible_angles<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number">  22</span><span class="k2">{</span>
<span class="number">  23</span>  DEG2RADf <span class="k3">*</span> <span class="n">30</span>.<span class="n">0f</span>,  DEG2RADf <span class="k3">*</span> <span class="n">45</span>.<span class="n">0f</span>,  DEG2RADf <span class="k3">*</span> <span class="n">60</span>.<span class="n">0f</span>,  <span class="c">// Q1, top-right</span>
<span class="number">  24</span>  DEG2RADf <span class="k3">*</span> <span class="n">120</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">135</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">150</span>.<span class="n">0f</span>, <span class="c">// Q2, top-left</span>
<span class="number">  25</span>  DEG2RADf <span class="k3">*</span> <span class="n">210</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">225</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">240</span>.<span class="n">0f</span>, <span class="c">// Q3, bottom-left</span>
<span class="number">  26</span>  DEG2RADf <span class="k3">*</span> <span class="n">300</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">315</span>.<span class="n">0f</span>, DEG2RADf <span class="k3">*</span> <span class="n">330</span>.<span class="n">0f</span>, <span class="c">// Q4, bottom-right</span>
<span class="number">  27</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  28</span><span class="k1">const</span> <span class="k1">unsigned</span> NUM_ANGLES <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>possible_angles<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>
<span class="number">  31</span><span class="k1">const</span> <span class="k1">unsigned</span> MIN_SPEED <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  32</span><span class="k1">const</span> <span class="k1">unsigned</span> MAX_SPEED <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>
<span class="number">  35</span>
<span class="number">  36</span><span class="k1">class</span> Ball
<span class="number">  37</span><span class="k2">{</span>
<span class="number">  38</span>public:
<span class="number">  39</span>  <span class="k1">enum</span> eState
<span class="number">  40</span>  <span class="k2">{</span>
<span class="number">  41</span>    STATE_MOVING <span class="k3">=</span> <span class="n">0</span>, <span class="c">// Kinda implemented</span>
<span class="number">  42</span>    STATE_STOPPED,    <span class="c">// Just barely implemented</span>
<span class="number">  43</span>    STATE_DEAD        <span class="c">// Not yet implemented, next on the the TODO</span>
<span class="number">  44</span>  <span class="k2">}</span> state<span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>  <span class="k1">float</span> x, y<span class="k2">;</span>     <span class="c">// Will always be the CENTER of the ball, not the top-left corner</span>
<span class="number">  47</span>  <span class="k1">float</span> angle<span class="k2">;</span>    <span class="c">// Should be 30, 45, or 60</span>
<span class="number">  48</span>  <span class="k1">float</span> velocity<span class="k2">;</span> <span class="c">// Slower typically makes levels HARDER, not EASIER</span>
<span class="number">  49</span>  <span class="k1">int</span> color<span class="k2">;</span>      <span class="c">// Uses an 'int' so it can include a transparency value</span>
<span class="number">  50</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> image<span class="k2">;</span>  <span class="c">// Well, it has to be drawn as SOMETHING</span>
<span class="number">  51</span>
<span class="number">  52</span>
<span class="number">  53</span>  Ball<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number">  54</span>    state<span class="k2">(</span>STATE_MOVING<span class="k2">)</span>,
<span class="number">  55</span>    x<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>, y<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number">  56</span>    angle<span class="k2">(</span>possible_angles<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>,
<span class="number">  57</span>    velocity<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number">  58</span>    color<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number">  59</span>    image<span class="k2">(</span>NULL<span class="k2">)</span>
<span class="number">  60</span>  <span class="k2">{</span>
<span class="number">  61</span>    <span class="c">// Nothing to do</span>
<span class="number">  62</span>  <span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>
<span class="number">  65</span>  <span class="k1">virtual</span> ~Ball<span class="k2">(</span><span class="k2">)</span>
<span class="number">  66</span>  <span class="k2">{</span>
<span class="number">  67</span>    <span class="k1">if</span> <span class="k2">(</span>image<span class="k2">)</span>
<span class="number">  68</span>    <span class="k2">{</span>
<span class="number">  69</span>      <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>      image <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  71</span>    <span class="k2">}</span>
<span class="number">  72</span>    state <span class="k3">=</span> STATE_DEAD<span class="k2">;</span>
<span class="number">  73</span>  <span class="k2">}</span>
<span class="number">  74</span>
<span class="number">  75</span>
<span class="number">  76</span>  <span class="c">/* Must be created AFTER SCREEN_W and SCREEN_H are initialized */</span>
<span class="number">  77</span>  <span class="k1">void</span> Init<span class="k2">(</span><span class="k1">unsigned</span> size <span class="k3">=</span> <span class="n">32</span><span class="k2">)</span>
<span class="number">  78</span>  <span class="k2">{</span>
<span class="number">  79</span>    image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>size, size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>    <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    <span class="k1">int</span> temp <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>    <span class="k1">int</span> color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="k2">(</span>temp <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFF</span>, <span class="k2">(</span>temp <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFF</span>, temp <span class="k3">&amp;</span> <span class="n">0xFF</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>    <span class="c">/* Sides and bottoms of circles look "sheared off" unless they have an</span>
<span class="number">  85</span><span class="c">     * odd number of pixels.  This trims one pixel off the right and bottom</span>
<span class="number">  86</span><span class="c">     * edges automatically.</span>
<span class="number">  87</span><span class="c">     */</span>
<span class="number">  88</span>    <span class="k1">if</span> <span class="k2">(</span>size % <span class="n">2</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  89</span>    <span class="k2">{</span>
<span class="number">  90</span>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>image, size <span class="k3">/</span> <span class="n">2</span>, size <span class="k3">/</span> <span class="n">2</span>, <span class="k2">(</span>size <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span>, color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>    <span class="k1">else</span>
<span class="number">  93</span>    <span class="k2">{</span>
<span class="number">  94</span>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>image, size <span class="k3">/</span> <span class="n">2</span>, size <span class="k3">/</span> <span class="n">2</span>, size <span class="k3">/</span> <span class="n">2</span>, color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>    <span class="k2">}</span>
<span class="number">  96</span>
<span class="number">  97</span>    <span class="c">/* Guarantee that none start right near the edge to prevent some odd</span>
<span class="number">  98</span><span class="c">     * errors we get with the bouncing math.  To do this, give a buffer of</span>
<span class="number">  99</span><span class="c">     * about 32 around each edge initially.</span>
<span class="number"> 100</span><span class="c">     */</span>
<span class="number"> 101</span>    x <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><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">64</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">32</span><span class="k2">;</span>
<span class="number"> 102</span>    y <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> <span class="n">64</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">32</span><span class="k2">;</span>
<span class="number"> 103</span>    angle <span class="k3">=</span> possible_angles<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> % NUM_ANGLES<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 104</span>    velocity <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span>MAX_SPEED <span class="k3">-</span> MIN_SPEED<span class="k2">)</span> <span class="k3">+</span> MIN_SPEED<span class="k2">;</span>
<span class="number"> 105</span>  <span class="k2">}</span>
<span class="number"> 106</span>
<span class="number"> 107</span>
<span class="number"> 108</span>  <span class="c">/* TODO: These will all be semi-transparent, with fully transparent outer</span>
<span class="number"> 109</span><span class="c">   * borders so you don't see them overlap as they cross each other.</span>
<span class="number"> 110</span><span class="c">   */</span>
<span class="number"> 111</span>  <span class="k1">void</span> Draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> dest<span class="k2">)</span>
<span class="number"> 112</span>  <span class="k2">{</span>
<span class="number"> 113</span>    <span class="k1">if</span> <span class="k2">(</span>dest <span class="k3">&amp;</span><span class="k3">&amp;</span> image <span class="k3">&amp;</span><span class="k3">&amp;</span> state <span class="k3">!</span><span class="k3">=</span> STATE_DEAD<span class="k2">)</span>
<span class="number"> 114</span>    <span class="k2">{</span>
<span class="number"> 115</span>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>image, dest, <span class="n">0</span>, <span class="n">0</span>, x <span class="k3">-</span> image-&gt;w <span class="k3">/</span> <span class="n">2</span>, y <span class="k3">-</span> image-&gt;h <span class="k3">/</span> <span class="n">2</span>, image-&gt;w, image-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>    <span class="k2">}</span>
<span class="number"> 117</span>  <span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</span>
<span class="number"> 120</span>  <span class="k1">void</span> Update<span class="k2">(</span>clock_t delta<span class="k2">)</span>
<span class="number"> 121</span>  <span class="k2">{</span>
<span class="number"> 122</span>    <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> STATE_MOVING<span class="k2">)</span>
<span class="number"> 123</span>    <span class="k2">{</span>
<span class="number"> 124</span>      x <span class="k3">+</span><span class="k3">=</span> velocity <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> delta<span class="k2">;</span>
<span class="number"> 125</span>      y <span class="k3">+</span><span class="k3">=</span> velocity <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> delta<span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>      <span class="c">/* First handle horizontal corrections */</span>
<span class="number"> 128</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>x <span class="k3">-</span> image-&gt;w <span class="k3">/</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>x <span class="k3">+</span> image-&gt;w <span class="k3">/</span> <span class="n">2</span> <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 129</span>      <span class="k2">{</span>
<span class="number"> 130</span>        velocity <span class="k3">=</span> <span class="k3">-</span>velocity<span class="k2">;</span>
<span class="number"> 131</span>        angle <span class="k3">=</span> <span class="k3">-</span>angle<span class="k2">;</span>
<span class="number"> 132</span>      <span class="k2">}</span>
<span class="number"> 133</span>
<span class="number"> 134</span>      <span class="c">/* Second handle vertical corrections */</span>
<span class="number"> 135</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>y <span class="k3">-</span> image-&gt;h <span class="k3">/</span> <span class="n">2</span> <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>y <span class="k3">+</span> image-&gt;h <span class="k3">/</span> <span class="n">2</span> <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 136</span>      <span class="k2">{</span>
<span class="number"> 137</span>        angle <span class="k3">=</span> <span class="k3">-</span>angle<span class="k2">;</span>
<span class="number"> 138</span>      <span class="k2">}</span>
<span class="number"> 139</span>    <span class="k2">}</span>
<span class="number"> 140</span>  <span class="k2">}</span>
<span class="number"> 141</span>
<span class="number"> 142</span>
<span class="number"> 143</span>  <span class="c">/* TODO: flesh out to actually grow to be a nice "explosion" for a few</span>
<span class="number"> 144</span><span class="c">   * seconds, wait, then shrink rapidly then change state to STATE_DEAD.</span>
<span class="number"> 145</span><span class="c">   */</span>
<span class="number"> 146</span>  <span class="k1">void</span> Pop<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 147</span>  <span class="k2">{</span>
<span class="number"> 148</span>    <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> STATE_MOVING<span class="k2">)</span>
<span class="number"> 149</span>    <span class="k2">{</span>
<span class="number"> 150</span>      state <span class="k3">=</span> STATE_STOPPED<span class="k2">;</span>
<span class="number"> 151</span>    <span class="k2">}</span>
<span class="number"> 152</span>  <span class="k2">}</span>
<span class="number"> 153</span>
<span class="number"> 154</span>
<span class="number"> 155</span>  <span class="c">/* This will be removed completely; the real game will never have this,</span>
<span class="number"> 156</span><span class="c">   * and it is only for temporary debugging.</span>
<span class="number"> 157</span><span class="c">   */</span>
<span class="number"> 158</span>  <span class="k1">void</span> Unpop<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 159</span>  <span class="k2">{</span>
<span class="number"> 160</span>    <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">=</span><span class="k3">=</span> STATE_STOPPED<span class="k2">)</span>
<span class="number"> 161</span>    <span class="k2">{</span>
<span class="number"> 162</span>      state <span class="k3">=</span> STATE_MOVING<span class="k2">;</span>
<span class="number"> 163</span>    <span class="k2">}</span>
<span class="number"> 164</span>  <span class="k2">}</span>
<span class="number"> 165</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>
<span class="number"> 168</span>
<span class="number"> 169</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number"> 170</span>
<span class="number"> 171</span><span class="k1">volatile</span> <span class="k1">int</span> ticks <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 172</span><span class="k1">void</span> ticker<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 173</span><span class="k2">{</span>
<span class="number"> 174</span>  <span class="k3">+</span><span class="k3">+</span>ticks<span class="k2">;</span>
<span class="number"> 175</span><span class="k2">}</span> <a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>ticker<span class="k2">)</span>
<span class="number"> 176</span>
<span class="number"> 177</span>
<span class="number"> 178</span>
<span class="number"> 179</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number"> 180</span>
<span class="number"> 181</span><span class="k1">volatile</span> <span class="k1">int</span> game_time <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 182</span><span class="k1">void</span> game_time_ticker<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 183</span><span class="k2">{</span>
<span class="number"> 184</span>  <span class="k3">+</span><span class="k3">+</span>game_time<span class="k2">;</span>
<span class="number"> 185</span><span class="k2">}</span> <a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>game_time_ticker<span class="k2">)</span>
<span class="number"> 186</span>
<span class="number"> 187</span>
<span class="number"> 188</span><span class="k1">const</span> <span class="k1">int</span> updates_per_second <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number"> 189</span>
<span class="number"> 190</span>
<span class="number"> 191</span>
<span class="number"> 192</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number"> 193</span>
<span class="number"> 194</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number"> 195</span><span class="k2">{</span>
<span class="number"> 196</span>  <span class="k1">unsigned</span> <span class="k1">int</span> numBalls <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span>
<span class="number"> 197</span>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number"> 198</span>  <span class="k2">{</span>
<span class="number"> 199</span>    numBalls <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>  <span class="k2">}</span>
<span class="number"> 201</span>
<span class="number"> 202</span>  <span class="c">/* Double buffer, where everything is drawn before it's dumped to the screen */</span>
<span class="number"> 203</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>screen_buffer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 204</span>
<span class="number"> 205</span>  <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 206</span>  <span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 207</span>  <span class="k1">int</span> color <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 208</span>
<span class="number"> 209</span>  <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 210</span>
<span class="number"> 211</span>  <span class="k1">int</span> fps <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 212</span>  <span class="k1">int</span> frames_done <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 213</span>  <span class="k1">int</span> old_time <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 214</span>
<span class="number"> 215</span>  <span class="k1">int</span> frames_array<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span> <span class="c">//an array to store the number of frames we did during the last 10 tenths of a second</span>
<span class="number"> 216</span>  <span class="k1">int</span> frame_index <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//used to store the index of the last updated value in the array</span>
<span class="number"> 217</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> ii <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> ii <span class="k3">&lt;</span> <span class="n">10</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>ii<span class="k2">)</span>
<span class="number"> 218</span>  <span class="k2">{</span>
<span class="number"> 219</span>    frames_array<span class="k2">[</span>ii<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//initialize the array to 0</span>
<span class="number"> 220</span>  <span class="k2">}</span>
<span class="number"> 221</span>
<span class="number"> 222</span>
<span class="number"> 223</span>
<span class="number"> 224</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>
<span class="number"> 226</span>
<span class="number"> 227</span>
<span class="number"> 228</span>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>
<span class="number"> 232</span>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>ticks<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>ticker<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>ticker, BPS_TO_TIMER<span class="k2">(</span>updates_per_second<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>game_time<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>game_time_ticker<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>game_time_ticker, BPS_TO_TIMER<span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//i.e. game time is in tenths of seconds</span>
<span class="number"> 239</span>
<span class="number"> 240</span>
<span class="number"> 241</span>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">800</span>, <span class="n">600</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 243</span>  <span class="k2">{</span>
<span class="number"> 244</span>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to set any graphic mode\n%s\n"</span>, <a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 247</span>  <span class="k2">}</span>
<span class="number"> 248</span>
<span class="number"> 249</span>
<span class="number"> 250</span>  <span class="c">/* Create the arena: should be the same size as the window that the balls</span>
<span class="number"> 251</span><span class="c">   * will use to bounce around in.</span>
<span class="number"> 252</span><span class="c">   */</span>
<span class="number"> 253</span>  screen_buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>  <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>screen_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>
<span class="number"> 256</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="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 257</span>  y <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> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 258</span>  color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</span>
<span class="number"> 260</span>
<span class="number"> 261</span>  std::vector<span class="k3">&lt;</span>Ball<span class="k3">*</span><span class="k3">&gt;</span> balls<span class="k2">;</span>
<span class="number"> 262</span>  Ball<span class="k3">*</span> ball<span class="k2">;</span>
<span class="number"> 263</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> numBalls<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 264</span>  <span class="k2">{</span>
<span class="number"> 265</span>    ball <span class="k3">=</span> <span class="k1">new</span> Ball<span class="k2">;</span>
<span class="number"> 266</span>    ball-&gt;Init<span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 267</span>    balls.push_back<span class="k2">(</span>ball<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 268</span>  <span class="k2">}</span>
<span class="number"> 269</span>
<span class="number"> 270</span>
<span class="number"> 271</span>
<span class="number"> 272</span>  <span class="c">/* One ball, at random, will be able to be paused and unpaused when the</span>
<span class="number"> 273</span><span class="c">   * SPACE and ENTER key are pressed, respectively.  Just to see that the</span>
<span class="number"> 274</span><span class="c">   * Pop() functionality is initially working like it should, and that the</span>
<span class="number"> 275</span><span class="c">   * Ball object is properly changing states.</span>
<span class="number"> 276</span><span class="c">   */</span>
<span class="number"> 277</span>  <span class="k1">unsigned</span> randomly_targeted_ball <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> % numBalls<span class="k2">;</span>
<span class="number"> 278</span>
<span class="number"> 279</span>
<span class="number"> 280</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 281</span>  <span class="k2">{</span>
<span class="number"> 282</span>    <span class="k1">while</span> <span class="k2">(</span>ticks <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 283</span>    <span class="k2">{</span>
<span class="number"> 284</span>      <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">100</span> <span class="k3">/</span> updates_per_second<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 285</span>    <span class="k2">}</span>
<span class="number"> 286</span>
<span class="number"> 287</span>
<span class="number"> 288</span>    <span class="k1">while</span> <span class="k2">(</span>ticks <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 289</span>    <span class="k2">{</span>
<span class="number"> 290</span>      <span class="k1">int</span> old_ticks <span class="k3">=</span> ticks<span class="k2">;</span>
<span class="number"> 291</span>
<span class="number"> 292</span>      <span class="c">// Do logic start</span>
<span class="number"> 293</span>      <span class="c">// /*{*/</span>
<span class="number"> 294</span>
<span class="number"> 295</span>      <span class="c">//DoLogic();</span>
<span class="number"> 296</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 297</span>      <span class="k2">{</span>
<span class="number"> 298</span>        quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 299</span>      <span class="k2">}</span>
<span class="number"> 300</span>      
<span class="number"> 301</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 302</span>      <span class="k2">{</span>
<span class="number"> 303</span>        balls<span class="k2">[</span>randomly_targeted_ball<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Pop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 304</span>      <span class="k2">}</span>
<span class="number"> 305</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ENTER<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 306</span>      <span class="k2">{</span>
<span class="number"> 307</span>        balls<span class="k2">[</span>randomly_targeted_ball<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Unpop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 308</span>      <span class="k2">}</span>
<span class="number"> 309</span>
<span class="number"> 310</span>      <span class="k1">for</span> <span class="k2">(</span>std::vector<span class="k3">&lt;</span>Ball<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator itr_b <span class="k3">=</span> balls.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> itr_b <span class="k3">!</span><span class="k3">=</span> balls.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>itr_b<span class="k2">)</span>
<span class="number"> 311</span>      <span class="k2">{</span>
<span class="number"> 312</span>        Ball<span class="k3">*</span> ball <span class="k3">=</span> <span class="k3">*</span>itr_b<span class="k2">;</span>
<span class="number"> 313</span>        <span class="k1">if</span> <span class="k2">(</span>ball<span class="k2">)</span>
<span class="number"> 314</span>        <span class="k2">{</span>
<span class="number"> 315</span>          ball-&gt;Update<span class="k2">(</span>ticks<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 316</span>        <span class="k2">}</span>
<span class="number"> 317</span>      <span class="k2">}</span>
<span class="number"> 318</span>
<span class="number"> 319</span>      <span class="c">// /*}*/</span>
<span class="number"> 320</span>      <span class="c">// Do logic end</span>
<span class="number"> 321</span>
<span class="number"> 322</span>      <span class="k3">-</span><span class="k3">-</span>ticks<span class="k2">;</span>
<span class="number"> 323</span>
<span class="number"> 324</span>      <span class="k1">if</span> <span class="k2">(</span>old_ticks <span class="k3">&lt;</span><span class="k3">=</span> ticks<span class="k2">)</span>
<span class="number"> 325</span>      <span class="k2">{</span>
<span class="number"> 326</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 327</span>      <span class="k2">}</span>
<span class="number"> 328</span>    <span class="k2">}</span>
<span class="number"> 329</span>
<span class="number"> 330</span>
<span class="number"> 331</span>    <span class="k1">if</span> <span class="k2">(</span>game_time <span class="k3">&gt;</span><span class="k3">=</span> old_time <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> <span class="c">// i.e. a 0.1 second has passed since we last counted the frames</span>
<span class="number"> 332</span>    <span class="k2">{</span>
<span class="number"> 333</span>      fps <span class="k3">-</span><span class="k3">=</span> frames_array<span class="k2">[</span>frame_index<span class="k2">]</span><span class="k2">;</span> <span class="c">//decrement the fps by the frames done a second ago</span>
<span class="number"> 334</span>      frames_array<span class="k2">[</span>frame_index<span class="k2">]</span> <span class="k3">=</span> frames_done<span class="k2">;</span> <span class="c">//store the number of frames done this 0.1 second</span>
<span class="number"> 335</span>      fps <span class="k3">+</span><span class="k3">=</span> frames_done<span class="k2">;</span> <span class="c">//increment the fps by the newly done frames</span>
<span class="number"> 336</span>
<span class="number"> 337</span>      frame_index <span class="k3">=</span> <span class="k2">(</span>frame_index <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">10</span><span class="k2">;</span> <span class="c">//increment the frame index and snap it to 10</span>
<span class="number"> 338</span>
<span class="number"> 339</span>      frames_done <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 340</span>      old_time <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 341</span>    <span class="k2">}</span>
<span class="number"> 342</span>
<span class="number"> 343</span>
<span class="number"> 344</span>    <span class="c">// Draw everything start</span>
<span class="number"> 345</span>    <span class="c">// /*{*/</span>
<span class="number"> 346</span>
<span class="number"> 347</span>    <span class="c">//DrawEverything();</span>
<span class="number"> 348</span>    <span class="k1">for</span> <span class="k2">(</span>std::vector<span class="k3">&lt;</span>Ball<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator itr_b <span class="k3">=</span> balls.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> itr_b <span class="k3">!</span><span class="k3">=</span> balls.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>itr_b<span class="k2">)</span>
<span class="number"> 349</span>    <span class="k2">{</span>
<span class="number"> 350</span>      Ball<span class="k3">*</span> ball <span class="k3">=</span> <span class="k3">*</span>itr_b<span class="k2">;</span>
<span class="number"> 351</span>      ball-&gt;Draw<span class="k2">(</span>screen_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 352</span>    <span class="k2">}</span>
<span class="number"> 353</span>
<span class="number"> 354</span>    <span class="c">/* Blit buffer to screen */</span>
<span class="number"> 355</span>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>screen_buffer, <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>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> screen_buffer-&gt;w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</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="k3">-</span> screen_buffer-&gt;h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, screen_buffer-&gt;w, screen_buffer-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 356</span>
<span class="number"> 357</span>    <span class="c">/* clears sprite buffer with color 0 */</span>
<span class="number"> 358</span>    <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>screen_buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 359</span>
<span class="number"> 360</span>    <span class="c">// /*}*/</span>
<span class="number"> 361</span>    <span class="c">// Draw everything end</span>
<span class="number"> 362</span>
<span class="number"> 363</span>    <span class="k3">+</span><span class="k3">+</span>frames_done<span class="k2">;</span>
<span class="number"> 364</span>  <span class="k2">}</span>
<span class="number"> 365</span>
<span class="number"> 366</span>
<span class="number"> 367</span>  <span class="c">/* Free the memory for all allocated balls.  This should happen at the end</span>
<span class="number"> 368</span><span class="c">   * of every level, which is why I'm writing it (instead of having the end</span>
<span class="number"> 369</span><span class="c">   * of the program clean up the memory for me).</span>
<span class="number"> 370</span><span class="c">   */</span>
<span class="number"> 371</span>  <span class="k1">for</span> <span class="k2">(</span>std::vector<span class="k3">&lt;</span>Ball<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator itr_b <span class="k3">=</span> balls.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> itr_b <span class="k3">!</span><span class="k3">=</span> balls.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>itr_b<span class="k2">)</span>
<span class="number"> 372</span>  <span class="k2">{</span>
<span class="number"> 373</span>    Ball<span class="k3">*</span> ball <span class="k3">=</span> <span class="k3">*</span>itr_b<span class="k2">;</span>
<span class="number"> 374</span>    <span class="k1">if</span> <span class="k2">(</span>ball<span class="k2">)</span>
<span class="number"> 375</span>    <span class="k2">{</span>
<span class="number"> 376</span>      <span class="k1">delete</span> ball<span class="k2">;</span>
<span class="number"> 377</span>      ball <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 378</span>    <span class="k2">}</span>
<span class="number"> 379</span>  <span class="k2">}</span>
<span class="number"> 380</span>
<span class="number"> 381</span>
<span class="number"> 382</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 383</span><span class="k2">}</span> <a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Fri, 10 Jul 2009 10:33:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;d say OpenGL would be easiest (allegrogl)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 10 Jul 2009 13:47:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you draw the balls as primitive circles (instead of a pre-created bitmap), you can easily change the size of them.<br />By using <span class="source-code"><a href="http://www.allegro.cc/manual/drawing_mode" target="_blank"><span class="a">drawing_mode</span></a><span class="k2">(</span>DRAW_MODE_TRANS, NULL, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></span> in combination with <span class="source-code"><a href="http://www.allegro.cc/manual/set_trans_blender" target="_blank"><span class="a">set_trans_blender</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span>, my_alpha_value<span class="k2">)</span><span class="k2">;</span></span> you can preserve the transparency effect of the primitives.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Schyfis)</author>
		<pubDate>Fri, 10 Jul 2009 19:17:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Arthur</b>: I&#39;ve used OpenGL but not allegrogl, so I&#39;ll take a look at it; it seems like the most logical approach, since I&#39;d really rather have an arbitrary shape (say, for example, changing the shape from a sphere to a rotating triangle or even a &quot;chain link&quot; so I can get away with making a knock-off without stepping on anyone&#39;s copyright) and OpenGL is the best way to handle that.</p><p><b>Schyfis</b>: Would &#39;my_alpha_value&#39; be black (you&#39;ve no doubt seen the code, and may have seen that the surrounding color appears to be &quot;black&quot; around the outer edge of the balls) or a different value?  Will I need it if I decide to try to use OpenGL as Arthur suggested?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Fri, 10 Jul 2009 21:16:19 +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/600857/820889#target">OnlineCop</a> said:</div><div class="quote"><p>
I&#39;ve used OpenGL but not allegrogl,
</p></div></div><p>
In that case, you can treat allegrogl as a convenience library for setting up an OpenGL window in a cross-platform way, and adding allegro&#39;s input, sound, file, and what have you routines to it. All regular OpenGL commands are available in allegrogl, plus it loads extensions for you automatically.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 12 Jul 2009 02:22:37 +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/600857/820889#target">OnlineCop</a> said:</div><div class="quote"><p>
Would &#39;my_alpha_value&#39; be black
</p></div></div><p>

I&#39;m not sure what you mean. <tt>my_alpha_value</tt> is a value from 0 to 255, with 0 being fully transparent and 255 being fully opaque.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Schyfis)</author>
		<pubDate>Sun, 12 Jul 2009 08:10:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How&#39;s the best way to transition states over a period of time?</p><p>First, the balls need to be bouncing around and ignore all collisions with everything EXCEPT balls whose states are non-STATE_MOVING (or STATE_DEAD).</p><p>When a ball gets popped, it needs to grow for a short period of time, stay big, then shrink, and finally die.</p><p>I thought that keyframes would be the best way to go with this.  Until they actual get popped, there will be no keyframe (or, there will be a single keyframe whose value returns the default value or size of the ball).</p><p>As soon as the ball collides with another popped ball, it adds four more keyframes: </p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span>max_size, time_now <span class="k3">+</span> <span class="n">2</span> seconds<span class="k2">)</span>
<span class="k2">(</span>max_size, time_now <span class="k3">+</span> <span class="n">4</span> seconds<span class="k2">)</span>
<span class="k2">(</span>min_size, time_now <span class="k3">+</span> <span class="n">6</span> seconds<span class="k2">)</span>
</pre></div></div><p>
After 6 seconds, the ball dies.</p><p>Of course, there will need to be some sort of method of dealing with a dead ball so it is no longer updated.</p><p>Any ideas or thoughts on this?</p><p>Should I be using some sort of Event manager instead to be handing the Pop event instead, or each of the different life cycles, rather than keyframes?  What&#39;s the best way to do this part in your opinion(s)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Mon, 13 Jul 2009 12:11:59 +0000</pubDate>
	</item>
</rss>
