<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Bitmap Rotation</title>
		<link>http://www.allegro.cc/forums/view/590786</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 30 Mar 2007 11:08:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#039;s the source:</p><p>tank.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/********************</span>
<span class="number">  2</span><span class="c"> * Tank Source File *</span>
<span class="number">  3</span><span class="c"> ********************/</span>
<span class="number">  4</span> 
<span class="number">  5</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  6</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">  7</span><span class="p">#include "tank.h"</span>
<span class="number">  8</span>
<span class="number">  9</span>CTank::CTank<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 10</span><span class="c">/* Sets up tank object */</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    x <span class="k3">=</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">2</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// init player</span>
<span class="number"> 13</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="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">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    health <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number"> 15</span>    reload <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>    score <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span>    speed <span class="k3">=</span> TANK_SPEED<span class="k2">;</span>
<span class="number"> 18</span>    
<span class="number"> 19</span>    canx <span class="k3">=</span> x <span class="k3">+</span> TANK_W<span class="k3">/</span><span class="n">2</span> <span class="k3">-</span> CANNON_W<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 20</span>    cany <span class="k3">=</span> y <span class="k3">-</span> CANNON_H <span class="k3">+</span> <span class="k2">(</span>CANNON_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 21</span>    
<span class="number"> 22</span>    tank <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>TANK_W, TANK_H<span class="k2">)</span><span class="k2">;</span>    
<span class="number"> 23</span>    cannon <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>CANNON_W, CANNON_H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>     
<span class="number"> 25</span>    <span class="c">// draw tank to tank bitmap</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>tank, <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">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>tank, <span class="n">10</span>, <span class="n">0</span>, <span class="k2">(</span>TANK_W-10<span class="k2">)</span>, TANK_H-<span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">45</span>, <span class="n">200</span>, <span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>    <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">(</span>tank, <span class="n">10</span>, <span class="n">0</span>, <span class="k2">(</span>TANK_W-10<span class="k2">)</span>, TANK_H-<span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">60</span>, <span class="n">230</span>, <span class="n">70</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    
<span class="number"> 30</span>    <a href="http://www.allegro.cc/manual/ellipsefill" target="_blank"><span class="a">ellipsefill</span></a><span class="k2">(</span>tank, <span class="k2">(</span>TANK_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, TANK_H-<span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span>, <span class="k2">(</span>TANK_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span>, 
<span class="number"> 31</span>                                  <span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">160</span>, <span class="n">160</span>, <span class="n">160</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <a href="http://www.allegro.cc/manual/ellipse" target="_blank"><span class="a">ellipse</span></a><span class="k2">(</span>tank, <span class="k2">(</span>TANK_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, TANK_H-<span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span>, <span class="k2">(</span>TANK_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span>, 
<span class="number"> 33</span>                                  <span class="k2">(</span>TANK_H<span class="k3">/</span><span class="n">4</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">120</span>, <span class="n">120</span>, <span class="n">120</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    
<span class="number"> 35</span>    <span class="c">// draw cannon to cannon bitmap</span>
<span class="number"> 36</span>    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>cannon, <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">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>cannon, <span class="n">0</span>, <span class="n">0</span>, CANNON_W, CANNON_H, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">45</span>, <span class="n">200</span>, <span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>    <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">(</span>cannon, <span class="n">0</span>, <span class="n">0</span>, CANNON_W-1, CANNON_H-1, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">60</span>, <span class="n">230</span>, <span class="n">70</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span><span class="c">//--------------------------------------------    </span>
<span class="number"> 41</span>
<span class="number"> 42</span>CTank::~CTank<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 43</span><span class="c">/* Deletes tank bmps */</span>
<span class="number"> 44</span><span class="k2">{</span>
<span class="number"> 45</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>tank<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>cannon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span><span class="k2">}</span>
<span class="number"> 48</span><span class="c">//--------------------------------------------    </span>
<span class="number"> 49</span>
<span class="number"> 50</span><span class="k1">void</span> CTank::MoveTank<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 51</span><span class="c">/* Moves tank */</span>
<span class="number"> 52</span><span class="k2">{</span>
<span class="number"> 53</span>         
<span class="number"> 54</span>    <span class="k1">if</span><span class="k2">(</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_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>x <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 55</span>      x <span class="k3">-</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 56</span>      canx <span class="k3">-</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 57</span>    <span class="k2">}</span>
<span class="number"> 58</span>      
<span class="number"> 59</span>    <span class="k1">if</span><span class="k2">(</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_RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><span class="k2">(</span>x<span class="k3">+</span>TANK_W<span class="k2">)</span> <span class="k3">&lt;</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="k2">{</span>
<span class="number"> 60</span>      x <span class="k3">+</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 61</span>      canx <span class="k3">+</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 62</span>    <span class="k2">}</span>
<span class="number"> 63</span>    
<span class="number"> 64</span>    angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_49.html" target="_blank">atan</a><span class="k2">(</span><span class="k2">(</span>canx-<span class="k2">(</span>CANNON_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>cany-<span class="k2">(</span>CANNON_H<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><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><span class="k3">/</span><span class="k2">(</span><span class="n">3</span>.<span class="n">1415</span><span class="k3">/</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>          
<span class="number"> 66</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 67</span><span class="k2">}</span>
<span class="number"> 68</span><span class="c">//--------------------------------------------    </span>
<span class="number"> 69</span>
<span class="number"> 70</span><span class="k1">void</span> CTank::FireBullet<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 71</span><span class="k2">{</span><span class="k2">}</span>
<span class="number"> 72</span><span class="c">//--------------------------------------------    </span>
<span class="number"> 73</span>
<span class="number"> 74</span><span class="k1">void</span> CTank::DrawTank<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>surface<span class="k2">)</span>
<span class="number"> 75</span><span class="k2">{</span>
<span class="number"> 76</span>    <span class="c">// blit tank to *surface</span>
<span class="number"> 77</span>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>tank, surface, <span class="n">0</span>, <span class="n">0</span>, x, y, TANK_W, TANK_H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 78</span>    <span class="c">// blit cannon to *surface</span>
<span class="number"> 79</span>    <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>surface, cannon, <span class="k1">int</span><span class="k2">(</span>canx<span class="k2">)</span>, <span class="k1">int</span><span class="k2">(</span>cany<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span><span class="k3">-</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</span>    <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</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><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">0</span>,
<span class="number"> 81</span>                  <span class="s">"Angle = %f"</span>, angle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 82</span><span class="k2">}</span>
<span class="number"> 83</span><span class="c">//--------------------------------------------    </span>
</div></div><p>

tank.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/********************</span>
<span class="number">  2</span><span class="c"> * Tank Class Header*</span>
<span class="number">  3</span><span class="c"> ********************/</span>
<span class="number">  4</span> 
<span class="number">  5</span><span class="p">#ifndef _TANK_H </span>
<span class="number">  6</span><span class="p">#define _TANK_H</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="p">#define MAX_BULLETS 10</span>
<span class="number">  9</span><span class="p">#define MOVE_LEFT 0</span>
<span class="number"> 10</span><span class="p">#define MOVE_RIGHT 1</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="p">#define TANK_W  100</span>
<span class="number"> 13</span><span class="p">#define TANK_H  35</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="p">#define TANK_SPEED 1</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="p">#define CANNON_W 15</span>
<span class="number"> 18</span><span class="p">#define CANNON_H 30</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">class</span> CTank
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>public:
<span class="number"> 23</span>   CTank<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   ~CTank<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   
<span class="number"> 26</span>   <span class="k1">int</span> x, y<span class="k2">;</span>  <span class="c">// x and y coordinate of the player</span>
<span class="number"> 27</span>   <span class="k1">int</span> health<span class="k2">;</span> <span class="c">// health of the player</span>
<span class="number"> 28</span>   <span class="k1">int</span> reload<span class="k2">;</span> <span class="c">// reload time of the player</span>
<span class="number"> 29</span>   <span class="k1">int</span> speed<span class="k2">;</span>
<span class="number"> 30</span>    
<span class="number"> 31</span>   <span class="k1">float</span> canx<span class="k2">;</span>
<span class="number"> 32</span>   <span class="k1">float</span> cany<span class="k2">;</span>
<span class="number"> 33</span>   <span class="k1">float</span> angle<span class="k2">;</span> <span class="c">// angle of cannon</span>
<span class="number"> 34</span>   
<span class="number"> 35</span>   <span class="k1">int</span> score<span class="k2">;</span>
<span class="number"> 36</span>     
<span class="number"> 37</span>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tank, <span class="k3">*</span>cannon<span class="k2">;</span> <span class="c">//bitmaps to hold the tank and cannon</span>
<span class="number"> 38</span>   
<span class="number"> 39</span>   <span class="k1">void</span> MoveTank<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>   <span class="k1">void</span> FireBullet<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>   <span class="k1">void</span> DrawTank<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>surface<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span><span class="p">#endif</span>
</div></div><p>

main.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/******************************</span>
<span class="number">   2</span><span class="c"> * Tank Defense v.0.1      *</span>
<span class="number">   3</span><span class="c"> * March 25 2007              *</span>
<span class="number">   4</span><span class="c"> * Kelly Crawford             *</span>
<span class="number">   5</span><span class="c"> ******************************/</span>
<span class="number">   6</span> 
<span class="number">   7</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   8</span><span class="p">#include &lt;time.h&gt;</span>
<span class="number">   9</span><span class="p">#include "tank.h"</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="p">#define WINDOW_W 640</span>
<span class="number">  12</span><span class="p">#define WINDOW_H 480</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="p">#define MAX_CLOUDS 14</span>
<span class="number">  15</span><span class="p">#define MIN_CLOUDS 7</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="k1">int</span> SetUp<span class="k2">(</span><span class="k2">)</span>
<span class="number">  18</span><span class="c">/* Initializes allegro and screen */</span>
<span class="number">  19</span><span class="k2">{</span>
<span class="number">  20</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">  21</span>     
<span class="number">  22</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">  23</span>     <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</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">  25</span>     
<span class="number">  26</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">  27</span>     
<span class="number">  28</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, WINDOW_W, WINDOW_H, <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">  29</span>         <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  30</span>     
<span class="number">  31</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><span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>     
<span class="number">  33</span>     <a href="http://www.allegro.cc/manual/show_mouse" target="_blank"><span class="a">show_mouse</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>          
<span class="number">  35</span>     <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  36</span><span class="k2">}</span>
<span class="number">  37</span><span class="c">//--------------------------------------------    </span>
<span class="number">  38</span>
<span class="number">  39</span><span class="k1">void</span> cloud_line<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> color<span class="k2">)</span>
<span class="number">  40</span><span class="c">/* Function called by DoLine() */</span>
<span class="number">  41</span><span class="k2">{</span>
<span class="number">  42</span>     <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>bmp, x, y, color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>       
<span class="number">  44</span>     <span class="k1">return</span><span class="k2">;</span>
<span class="number">  45</span><span class="k2">}</span>
<span class="number">  46</span><span class="c">//--------------------------------------------    </span>
<span class="number">  47</span>
<span class="number">  48</span><span class="k1">void</span> MakeCloud<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  49</span><span class="c">/* Draws a cloud to bmp */</span>
<span class="number">  50</span><span class="k2">{</span>
<span class="number">  51</span>    <span class="k1">int</span> height <span class="k3">=</span> <span class="n">1</span> <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="n">50</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// height of cloud</span>
<span class="number">  52</span>    <span class="k1">int</span> width <span class="k3">=</span> <span class="n">100</span> <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="n">50</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// general width of cloud</span>
<span class="number">  53</span>      
<span class="number">  54</span>    <span class="k1">int</span> x1 <span class="k3">=</span> <span class="k2">(</span><span class="k3">-</span><span class="n">30</span><span class="k2">)</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>SCREEN_W-30<span class="k2">)</span><span class="k2">;</span> 
<span class="number">  55</span>    <span class="k1">int</span> x2 <span class="k3">=</span> x1 <span class="k3">+</span> width<span class="k2">;</span>
<span class="number">  56</span>    <span class="k1">int</span> y <span class="k3">=</span>  <span class="n">10</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>SCREEN_H-100<span class="k2">)</span><span class="k2">;</span> <span class="c">// cloud coordinates</span>
<span class="number">  57</span>      
<span class="number">  58</span>    <span class="k1">int</span> col <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">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">;</span>   <span class="c">// cloud color information</span>
<span class="number">  59</span>      
<span class="number">  60</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> height<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="c">// loops until entire cloud is drawn</span>
<span class="number">  61</span>    <span class="k2">{</span>
<span class="number">  62</span>        <a href="http://www.allegro.cc/manual/do_line" target="_blank"><span class="a">do_line</span></a><span class="k2">(</span>bmp, x1, y, x2, y, col, <span class="k3">*</span>cloud_line<span class="k2">)</span><span class="k2">;</span> <span class="c">// draw line of cloud</span>
<span class="number">  63</span>        y <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  64</span>        
<span class="number">  65</span>        <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&lt;</span> <span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  66</span>          x1 <span class="k3">-</span><span class="k3">=</span> <span class="n">3</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">5</span><span class="k2">;</span>
<span class="number">  67</span>          x2 <span class="k3">+</span><span class="k3">=</span> <span class="n">3</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">5</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  68</span>        <span class="k1">else</span><span class="k2">{</span>
<span class="number">  69</span>          x1 <span class="k3">+</span><span class="k3">=</span> <span class="n">3</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">5</span><span class="k2">;</span>
<span class="number">  70</span>          x2 <span class="k3">-</span><span class="k3">=</span> <span class="n">3</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">5</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  71</span>    <span class="k2">}</span>
<span class="number">  72</span>    
<span class="number">  73</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number">  74</span><span class="k2">}</span>
<span class="number">  75</span><span class="c">//--------------------------------------------</span>
<span class="number">  76</span>
<span class="number">  77</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> GenerateSky<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  78</span><span class="c">/* Generates a sky on bitmap pointed</span>
<span class="number">  79</span><span class="c">   to by bmp */</span>
<span class="number">  80</span><span class="k2">{</span>
<span class="number">  81</span>      <span class="k1">int</span> r <span class="k3">=</span> <span class="n">140</span>, g <span class="k3">=</span> <span class="n">150</span>, b <span class="k3">=</span> <span class="n">225</span><span class="k2">;</span>
<span class="number">  82</span>      <span class="k1">int</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>      
<span class="number">  84</span>      
<span class="number">  85</span>      <a href="http://www.allegro.cc/manual/floodfill" target="_blank"><span class="a">floodfill</span></a><span class="k2">(</span>bmp, <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>, <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>, col<span class="k2">)</span><span class="k2">;</span>  <span class="c">// fill screen w/ blue</span>
<span class="number">  86</span>      
<span class="number">  87</span>      <span class="k1">int</span> clouds <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>MAX_CLOUDS-MIN_CLOUDS<span class="k2">)</span> <span class="k3">+</span> MIN_CLOUDS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>      
<span class="number">  89</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> clouds<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  90</span>        MakeCloud<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>      
<span class="number">  92</span>      <span class="k1">return</span> bmp<span class="k2">;</span>
<span class="number">  93</span><span class="k2">}</span>
<span class="number">  94</span><span class="c">//--------------------------------------------</span>
<span class="number">  95</span>
<span class="number">  96</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  97</span><span class="k2">{</span>    
<span class="number">  98</span>    <span class="k1">if</span><span class="k2">(</span>SetUp<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  <span class="c">// setup + error checking for allegro</span>
<span class="number">  99</span>    
<span class="number"> 100</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bg_sky <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="c">// create sky bitmap</span>
<span class="number"> 101</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>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="c">// create double buffer</span>
<span class="number"> 102</span>    
<span class="number"> 103</span>    bg_sky <span class="k3">=</span> GenerateSky<span class="k2">(</span>bg_sky<span class="k2">)</span><span class="k2">;</span> <span class="c">// colour sky bitmap</span>
<span class="number"> 104</span>    
<span class="number"> 105</span>    CTank player<span class="k2">;</span>
<span class="number"> 106</span>    
<span class="number"> 107</span>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</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="k2">{</span>
<span class="number"> 108</span>        
<span class="number"> 109</span>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bg_sky, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, bg_sky-&gt;w, bg_sky-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>        
<span class="number"> 111</span>        player.MoveTank<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>        player.DrawTank<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>    
<span class="number"> 114</span>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>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="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="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>    <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 116</span>    
<span class="number"> 117</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bg_sky<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>    
<span class="number"> 120</span>    <span class="k1">return</span><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</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>

The problem lies in the tank.cpp file. In the MoveTank() function, there is a call to atan() to determine the angle of the mouse in degrees from the center of a bitmap of a cannon. </p><p>The cannon rotates to face the mouse, basically. But there are errors, it jumps around sometimes when you pass certain parts, and if you keep the mouse near the top of the window and drag it too far left or right, the cannon stops facing it (it faces too far down).</p><p>Is there any way I can improve upon the angle calculation?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (moon_rabbits)</author>
		<pubDate>Fri, 30 Mar 2007 03:03:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Perhaps try atan2()?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Fri, 30 Mar 2007 03:28:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you, but the problem persists.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (moon_rabbits)</author>
		<pubDate>Fri, 30 Mar 2007 03:31:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef _TANK_H </span>
<span class="p">#define _TANK_H</span>
</pre></div></div><p>
This is bad style, never follow an underscore with an upper case letter
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Fri, 30 Mar 2007 05:52:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>tan<sup>-1</sup> takes the paramater <tt>y/x</tt>. You&#39;re calculating <tt>x/y</tt>.
</p><div class="source-code snippet"><div class="inner"><pre>angle<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_49.html" target="_blank">atan</a><span class="k2">(</span><span class="k2">(</span>cany-<span class="k2">(</span>CANNON_H<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>canx-<span class="k2">(</span>CANNON_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="c">//or, use atan2</span>
angle<span class="k3">=</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>cany-<span class="k2">(</span>CANNON_H<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a>,canx-<span class="k2">(</span>CANNON_W<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">-</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

[edit]<br />Oh, and I forgot to add the proper conversion from radians to fix.<br /><span class="source-code"><a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer,sprite,x,y,<a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>angle<span class="k3">*</span><span class="n">128</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Fri, 30 Mar 2007 08:33:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
This is bad style, never follow an underscore with an upper case letter
</p></div></div><p>
</p><div class="quote_container"><div class="title">Dustin Dettmer earlier said:</div><div class="quote"><p>
 Single underscores followed by an uppercase letter are reserved for compiler usage.
</p></div></div><p>
What compiler?  Any compiler?  I&#39;ve been doing this for a long time and it has never been a problem.</p><p>And if you are planning on telling all who do this to stop, you&#39;ve got an uphill battle in front of you.  As far as I can tell, this is the way it is taught to many.  I&#39;m not saying you are wrong, I&#39;m just kind of floored by it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Fri, 30 Mar 2007 08:33:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What compiler? Any compiler?
</p></div></div><p>
Yup. Macros and symbols starting with an underscore and capital letter, and starting with two underscores and anything, are reserved for the compiler. You can use them sure.. but then it&#39;s your own fault if it happens to conflict with an undocumented portion of the compiler.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Fri, 30 Mar 2007 10:21:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
but then it&#39;s your own fault if it happens to conflict with an undocumented portion of the compiler.
</p></div></div><p>
Is it really all that likely to happen though?  I mean, if you do <u>CLASSNAME_H</u>?  Well, I guess that&#39;s why it&#39;s good practice not to do that, just for that unlikely case.</p><p>That&#39;s going to be a hard habit to break.  <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Fri, 30 Mar 2007 10:58:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not to mention any symbol tarting with a single underscore and lower case letter is reserved for system/library internal use . Thats sortof unofficial though. Still a good style guide line. You can always tell when a symbol is out of limits.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
That&#39;s going to be a hard habit to break. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div></div><p>Didn&#39;t take me long. I used to use <u>_FILE_H</u>_, I now use File_H_GUARD.. simple switch <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 30 Mar 2007 11:08:55 +0000</pubDate>
	</item>
</rss>
