<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Math wrong and a memory leak?</title>
		<link>http://www.allegro.cc/forums/view/588873</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 05 Dec 2006 13:36:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve posted this similar code a month or so ago, I&#39;m back working on it.  This time I am using OpenLayer.</p><p>I am trying to create a 2D tiling engine.  The tiles are not tiling correctly and there must be a memory leak because my processor is using 100% right now &gt;.&lt; (It&#39;s making typing hard and I don&#39;t want to restart until I finish this)<br />First here are the resources I am using and a screen shot:<br />Output:<br /><span class="remote-thumbnail"><span class="json">{"name":"errorns2.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/b\/bbc6fb5e4cd202edcafe68147998ffd0.png","w":626,"h":512,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/b\/bbc6fb5e4cd202edcafe68147998ffd0"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/b/bbc6fb5e4cd202edcafe68147998ffd0-240.jpg" alt="errorns2.png" width="240" height="196" /></span><br />tile.bmp<br />http://img227.imageshack.us/img227/4897/tilefq0.png<br />Here is majority of the code:<br />FYI:  m_*  Variables are members of that class<br />main.cpp
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "stdafx.hpp"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>     Setup::SetupProgram<span class="k2">(</span><span class="k1">true</span>, <span class="k1">true</span>, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">6</td><td>     Setup::SetupScreen<span class="k2">(</span>screenWIDTH, screenHEIGHT, WINDOWED<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>     <a href="http://www.allegro.cc/manual/set_window_title" target="_blank"><span class="a">set_window_title</span></a><span class="k2">(</span><span class="s">"moooooo"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>     <span class="k1">int</span> map<span class="k2">[</span><span class="n">16</span><span class="k2">]</span><span class="k2">[</span><span class="n">21</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">10</td><td>                      <span class="k2">{</span><span class="n">3</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">11</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">12</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">13</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">14</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">15</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">16</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">17</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">10</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">18</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">19</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">20</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">21</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">22</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">23</td><td>                      <span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span>,</td></tr><tr><td class="number">24</td><td>                      <span class="k2">{</span><span class="n">4</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">4</span>, <span class="n">1</span>, <span class="n">9</span>, <span class="n">1</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">8</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">9</span> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>                       <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>     cTile firsttiles<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>     firsttiles.LoadTileSet<span class="k2">(</span><span class="s">"tile.bmp"</span>, <span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>     cMap firstmap<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>     firstmap.SetTileSet<span class="k2">(</span><span class="k3">&amp;</span>firsttiles<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>     firstmap.LoadMap<span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>map, <span class="n">21</span>, <span class="n">16</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>     <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></td></tr><tr><td class="number">32</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>          firstmap.Draw<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>          Canvas::Refresh<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">36</td><td>     firsttiles.Release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>     </td></tr><tr><td class="number">38</td><td>     <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td><span class="k2">}</span></td></tr><tr><td class="number">40</td><td><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></td></tr></tbody></table></div></div><p>
Tile.cpp
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "stdafx.hpp"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>cTile::cTile<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k2">}</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">bool</span> cTile::LoadTileSet<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span> filename, <span class="k1">int</span> TileWidth, <span class="k1">int</span> TileHeight<span class="k2">)</span></td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>     m_Filename          <span class="k3">=</span> filename<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>m_TileWidth <span class="k3">=</span> TileWidth<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>m_TileHeight <span class="k3">=</span> TileHeight<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">12</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_TileSet.Load<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>     m_Cols <span class="k3">=</span> m_TileSet.Width<span class="k2">(</span><span class="k2">)</span> <span class="k3">/</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>     m_Rows <span class="k3">=</span> m_TileSet.Height<span class="k2">(</span><span class="k2">)</span> <span class="k3">/</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>     </td></tr><tr><td class="number">18</td><td>     m_TileHeight   <span class="k3">=</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>     m_TileWidth    <span class="k3">=</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="k1">bool</span> cTile::DrawTile<span class="k2">(</span><span class="k1">int</span> TileNum, <span class="k1">float</span> Xpos, <span class="k1">float</span> Ypos<span class="k2">)</span></td></tr><tr><td class="number">24</td><td><span class="k2">{</span></td></tr><tr><td class="number">25</td><td>     <span class="k1">float</span>       tileXpos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>     <span class="k1">float</span>       tileYpos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>     tileYpos  <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>TileNum <span class="k3">/</span> m_Cols<span class="k2">)</span> <span class="k3">*</span> m_TileHeight<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>     tileXpos  <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>TileNum % m_Cols<span class="k2">)</span> <span class="k3">*</span> m_TileWidth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>     </td></tr><tr><td class="number">31</td><td>     m_TileSet.Blit<span class="k2">(</span>Xpos, Ypos, Clipped<span class="k2">(</span>tileXpos, tileYpos, m_TileWidth, m_TileHeight<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td><span class="k2">}</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">int</span> cTile::GetTileWidth<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td><span class="k2">{</span></td></tr><tr><td class="number">37</td><td>     <span class="k1">return</span> m_TileWidth<span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td><span class="k1">int</span> cTile::GetTileHeight<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">41</td><td><span class="k2">{</span></td></tr><tr><td class="number">42</td><td>     <span class="k1">return</span> m_TileHeight<span class="k2">;</span></td></tr><tr><td class="number">43</td><td><span class="k2">}</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="k1">bool</span> cTile::Release<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">46</td><td><span class="k2">{</span></td></tr><tr><td class="number">47</td><td>     m_TileSet.Destroy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Map.cpp
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "stdafx.hpp"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>cMap::cMap<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>     TilesAreSet    <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>     Loaded         <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td><span class="k2">}</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="k1">bool</span> cMap::LoadMap<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span> Map, <span class="k1">int</span> Width, <span class="k1">int</span> Height, <span class="k1">int</span> NumLayers<span class="k2">)</span></td></tr><tr><td class="number">10</td><td><span class="k2">{</span></td></tr><tr><td class="number">11</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>m_Map <span class="k3">=</span> Map<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">12</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>     m_Width        <span class="k3">=</span> Width<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>     m_Height       <span class="k3">=</span> Height<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>     m_NumLayers    <span class="k3">=</span> NumLayers<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>     Loaded         <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="k1">bool</span> cMap::SetTileSet<span class="k2">(</span>cTile<span class="k3">*</span> tiles<span class="k2">)</span></td></tr><tr><td class="number">21</td><td><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>m_Tiles <span class="k3">=</span> tiles<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">23</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>     TilesAreSet    <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><span class="k1">bool</span> cMap::Draw<span class="k2">(</span><span class="k1">int</span> Xpos, <span class="k1">int</span> Ypos, <span class="k1">int</span> Layer<span class="k2">)</span></td></tr><tr><td class="number">29</td><td><span class="k2">{</span></td></tr><tr><td class="number">30</td><td>     <span class="c">// Called at the right time?</span></td></tr><tr><td class="number">31</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>TilesAreSet <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>Loaded<span class="k2">)</span></td></tr><tr><td class="number">32</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>     <span class="c">// How many Rows and Columns fit on the screen?</span></td></tr><tr><td class="number">34</td><td>     <span class="k1">int</span> SRows <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>     <span class="k1">int</span> SCols <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>     SCols <span class="k3">=</span> screenWIDTH <span class="k3">/</span> m_Tiles-&gt;GetTileWidth<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>     SRows <span class="k3">=</span> screenHEIGHT <span class="k3">/</span> m_Tiles-&gt;GetTileHeight<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>          </td></tr><tr><td class="number">39</td><td>     <span class="k1">int</span> Column     <span class="k3">=</span> Xpos<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>     <span class="k1">int</span> Row        <span class="k3">=</span> Ypos<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>     </td></tr><tr><td class="number">42</td><td>     <span class="k1">int</span> Xpixel     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>     <span class="k1">int</span> Ypixel     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>     </td></tr><tr><td class="number">45</td><td>     <span class="k1">int</span> TileNumber <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>     <span class="k1">while</span><span class="k2">(</span>Row <span class="k3">&lt;</span> m_Height <span class="k3">&amp;</span><span class="k3">&amp;</span> Ypixel <span class="k3">&lt;</span> screenHEIGHT<span class="k2">)</span></td></tr><tr><td class="number">48</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">49</td><td>          <span class="k1">while</span><span class="k2">(</span>Column <span class="k3">&lt;</span> m_Width <span class="k3">&amp;</span><span class="k3">&amp;</span> Xpixel <span class="k3">&lt;</span> screenWIDTH<span class="k2">)</span></td></tr><tr><td class="number">50</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>               TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span><span class="k2">(</span>Row <span class="k3">+</span> Xpos<span class="k2">)</span> <span class="k3">*</span> m_Width <span class="k3">+</span> Column <span class="k3">+</span> Ypos<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>               m_Tiles-&gt;DrawTile<span class="k2">(</span>TileNumber, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Xpixel, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Ypixel<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>               Column<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>               Xpixel <span class="k3">+</span><span class="k3">=</span> m_Tiles-&gt;GetTileWidth<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>          <span class="k2">}</span></td></tr><tr><td class="number">56</td><td>          Xpixel <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>          Column <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>          Ypixel <span class="k3">+</span><span class="k3">=</span> m_Tiles-&gt;GetTileHeight<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>          Row<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">61</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Sun, 03 Dec 2006 16:11:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">firstmap.LoadMap<span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>map, <span class="n">21</span>, <span class="n">16</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></span><br />IMO this should be<br /><span class="source-code">firstmap.LoadMap<span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span>map, <span class="n">21</span>, <span class="n">16</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></span><br />as an array already represents a pointer.<br />But I&#39;m not exactly sure what you want to do there.</p><p><span class="source-code">TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span><span class="k2">(</span>Row <span class="k3">+</span> Xpos<span class="k2">)</span> <span class="k3">*</span> m_Width <span class="k3">+</span> Column <span class="k3">+</span> Ypos<span class="k2">]</span><span class="k2">;</span></span></p><p>I don&#39;t get that. What should (Row + Xpos) be? I think you mean (Row + Ypos). At the end you add Ypos where you probably meant Xpos.<br />Anyway, even if you swap Xpos and Ypos it doesn&#39;t make much sense, because you already added Xpos and Ypos to Row and Column before...
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> Column     <span class="k3">=</span> Xpos<span class="k2">;</span>
<span class="k1">int</span> Row        <span class="k3">=</span> Ypos<span class="k2">;</span>
</pre></div></div><p>
So, either make Column = 0; Row = 0; at the beginning and say (Row + Ypos) and Column + Xpos at the &quot;get TileNumber&quot; line or do the opposite in each case. But if you do both you will obviously run out of bounds.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Sun, 03 Dec 2006 18:18:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">firstmap.LoadMap<span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>map, <span class="n">21</span>, <span class="n">16</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></span> I&#39;ve switched it between those before and it had no effect via compile time but I switched it back to how you thought it should be.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> Column     <span class="k3">=</span> Xpos<span class="k2">;</span>
<span class="k1">int</span> Row        <span class="k3">=</span> Ypos<span class="k2">;</span>
</pre></div></div><p>
This sets it so when you call cMap::Draw() You can set the topleft coords to draw.  Normally this would be 0,0 But the map can be bigger than the tiles you can display on the screen so we are going to want to change that position a lot.  With a map 100x100tiles you are going to want to draw the rest of the map sometimes :-D.  In my example program Column and Row are set to 0.</p><p>Does anyone know of a way to get Two-Dimensional data out of a One-Dimensional array?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 04 Dec 2006 01:03:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Does anyone know of a way to get Two-Dimensional data out of a One-Dimensional array?
</p></div></div><p>
Sure bitmaps really are a single dimensional array, to get the x and y on a bitmap you can do some simple math:<br />bit_array[x + y * width];<br />which will give you x and y coordinates from a single dimensional array.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Mon, 04 Dec 2006 01:25:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Still hasn&#39;t solved my problem :-(  I&#39;ve narrowed it down though.  Something is going wrong with the inputs to cTile::Draw().  Its inputing some huge number as the TileNumber.  So it must be something wrong with my loop inside of cMap::Draw();
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 04 Dec 2006 02:35:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> Column     <span class="k3">=</span> Xpos<span class="k2">;</span>
<span class="k1">int</span> Row        <span class="k3">=</span> Ypos<span class="k2">;</span>
</pre></div></div><p>

This sets it so when you call cMap::Draw() You can set the topleft coords to draw. Normally this would be 0,0 But the map can be bigger than the tiles you can display on the screen so we are going to want to change that position a lot. With a map 100x100tiles you are going to want to draw the rest of the map sometimes :-D. In my example program Column and Row are set to 0.
</p></div></div><p>

Yeah, I know. I fully understand your code. But you add Xpos and Ypos twice!<br />First time:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> Column     <span class="k3">=</span> Xpos<span class="k2">;</span>
<span class="k1">int</span> Row        <span class="k3">=</span> Ypos<span class="k2">;</span>
</pre></div></div><p>
Second time:<br />(I assume that you have fixed the Xpos/Ypos error there)<br /><span class="source-code">TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span><span class="k2">(</span>Row <span class="k3">+</span> Ypos<span class="k2">)</span> <span class="k3">*</span> m_Width <span class="k3">+</span> Column <span class="k3">+</span> Xpos<span class="k2">]</span><span class="k2">;</span></span><br />So, try to figure. Let&#39;s say Xpos is 20.<br /><span class="source-code"><span class="k1">int</span> Column <span class="k3">=</span> Xpos</span><br />so Column is 20.<br /><span class="source-code">TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span><span class="k2">(</span>Row <span class="k3">+</span> Ypos<span class="k2">)</span> <span class="k3">*</span> m_Width <span class="k3">+</span> Column <span class="k3">+</span> Xpos<span class="k2">]</span><span class="k2">;</span></span><br />What do you think Column + Xpos is? 20 + 20 = 40. So you have 40 instead of 20.</p><p>I know it isn&#39;t the error you currently have, because Xpos and Ypos are 0 in your test case. You really should run your map<tt>::</tt>Draw function through a debugger. And maybe you should use std::vector instead of two-dimensional arrays as soon as you have fixed your problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Mon, 04 Dec 2006 04:09:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know this is not related to your problem, I just felt like pointing it out.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> cTile::LoadTileSet<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span> filename, <span class="k1">int</span> TileWidth, <span class="k1">int</span> TileHeight<span class="k2">)</span>
<span class="k2">{</span>
     m_Filename          <span class="k3">=</span> filename<span class="k2">;</span>
     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>m_TileWidth <span class="k3">=</span> TileWidth<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>m_TileHeight <span class="k3">=</span> TileHeight<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
     ...
</pre></div></div><p>

In these few lines of code, I can spot some issues that <i>might</i> be problematic. Let&#39;s have a closer look, shall we? <tt>if((m_TileWidth = TileWidth) &lt;= 0</tt>: Making use of side-effects never is a good idea. Why? Because it makes the code harder to read, and thus also harder to understand. Let&#39;s assume this method is called with 0 for <tt>TileWidth</tt> and some other value for <tt>TileHeight</tt> (not important). <tt>LoadTileSet</tt> will return <tt>false</tt> as expected, only that the internal state of this <tt>cTile</tt> instance now is really messed up. <tt>m_TileHeight</tt> wasn&#39;t assigned the value we passed, so it is probably uninitialized. <tt>m_TileWidth</tt> is 0, even though this is an incorrect value. <tt>m_Filename</tt> will hold the value of <tt>filename</tt>, even though the loading failed.</p><div class="source-code snippet"><div class="inner"><pre>     m_TileHeight   <span class="k3">=</span> TileHeight<span class="k2">;</span>
     m_TileWidth    <span class="k3">=</span> TileWidth<span class="k2">;</span>
</pre></div></div><p>

These lines are absolutely unnecessary if you keep the assignments in the previous <tt>if</tt> clause (which I advise you not to!).</p><p>My point is, you make it hard for anyone to determine the exact footprint (i.e., postcondition if you prefer that term) for all possible input data. I&#39;m guessing you are not overriding or implementing <tt>LoadTileSet</tt>, so for starters you could declare both <tt>TileHeight</tt> and <tt>TileWidth</tt> as <tt>unsigned int</tt>. This rules out negative numbers and makes that fact also obvious on first sight.</p><p>Keeping the state of the object clear might work like this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> cTile::LoadTileSet<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> filename, <span class="k1">unsigned</span> <span class="k1">int</span> TileWidth, <span class="k1">unsigned</span> <span class="k1">int</span> TileHeight<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>     <span class="k1">if</span><span class="k2">(</span>TileWidth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> TileHeight <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_TileSet.Load<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td>          <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>     <span class="c">// invariant: From here on, m_TileSet was loaded successfully</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>     m_Cols <span class="k3">=</span> m_TileSet.Width<span class="k2">(</span><span class="k2">)</span> <span class="k3">/</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>     m_Rows <span class="k3">=</span> m_TileSet.Height<span class="k2">(</span><span class="k2">)</span> <span class="k3">/</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>     </td></tr><tr><td class="number">13</td><td>     m_TileHeight   <span class="k3">=</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>     m_TileWidth    <span class="k3">=</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>     m_Filename <span class="k3">=</span> filename<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>     <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Alright, to wrap it up, always expect the worst to happen. Think through the cases with bad input and all combinations of them, and try to catch as many of them as you possibly can. Define what <i>exactly</i> a method should do (like, change any of the object&#39;s members only if successful, and on error leave the object entirely untouched). I can almost certainly assure you that this thinking will help the <i>prevention</i> of many bugs.</p><p>This might not help you right now, but hopefully you can use it in the long run.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Indeterminatus)</author>
		<pubDate>Mon, 04 Dec 2006 05:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ahh thank you very much Simon for pointing that out &gt;.&lt;  I&#39;m trying to get a formula to work for me right now.  I&#39;ve tried Column * Row + m_Width but I&#39;m still not getting correct results.</p><p>To Indeterminatus,<br />  Thanks for your insight to my LoadTileSet() method.  It makes perfect sense and I shall try and make future decisions like that :-D, really good advice.  I&#39;m having trouble though.  What should m_Filename be declared as?  I can&#39;t get it to be compatible with const char*.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 04 Dec 2006 09:13:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What should m_Filename be declared as? I can&#39;t get it to be compatible with const char*.
</p></div></div><p>

Best choice is probably <tt>std::string</tt>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Indeterminatus)</author>
		<pubDate>Mon, 04 Dec 2006 09:22:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright that works :-D  Now back to finding my big errrrrrooooooorrrrrr &gt;.&lt; <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Mon, 04 Dec 2006 09:41:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Ahh thank you very much Simon for pointing that out &gt;.&lt; I&#39;m trying to get a formula to work for me right now. I&#39;ve tried Column * Row + m_Width but I&#39;m still not getting correct results.
</p></div></div><p>
This is still wrong.<br />Example:
</p><div class="source-code snippet"><div class="inner"><pre><span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span>
<span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span>
<span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">1</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span>
<span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span> <span class="n">0</span>
</pre></div></div><p>
if the upper-left 0 is at the position (0,0), you want element (3,2). So how do you calculate the one-dimensional index? Each row has 7 numbers (m_Width in your case). So if we want row 2 we say 2 * m_Width, which is 2*7 = 14. Then we simply add the column index, 14 + 3 = 17. Let&#39;s count (beginning with 0).. it is RIGHT!<br />So your formula would be Row * m_Width + Column.</p><p>And if that doesn&#39;t work (another error somewhere else?) you should add debugging output like the following:<br />Original code
</p><div class="source-code snippet"><div class="inner"><pre>          <span class="k1">while</span><span class="k2">(</span>Column <span class="k3">&lt;</span> m_Width <span class="k3">&amp;</span><span class="k3">&amp;</span> Xpixel <span class="k3">&lt;</span> screenWIDTH<span class="k2">)</span>
          <span class="k2">{</span>
               TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span>Row <span class="k3">*</span> m_Width <span class="k3">+</span> Column<span class="k2">]</span><span class="k2">;</span>
               m_Tiles-&gt;DrawTile<span class="k2">(</span>TileNumber, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Xpixel, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Ypixel<span class="k2">)</span><span class="k2">;</span>
               Column<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
               Xpixel <span class="k3">+</span><span class="k3">=</span> m_Tiles-&gt;GetTileWidth<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
          <span class="k2">}</span>
</pre></div></div><p>

With debugging output:
</p><div class="source-code snippet"><div class="inner"><pre>          <span class="k1">while</span><span class="k2">(</span>Column <span class="k3">&lt;</span> m_Width <span class="k3">&amp;</span><span class="k3">&amp;</span> Xpixel <span class="k3">&lt;</span> screenWIDTH<span class="k2">)</span>
          <span class="k2">{</span>
               <span class="k1">int</span> arrayIndex <span class="k3">=</span> Row <span class="k3">*</span> m_Width <span class="k3">+</span> Column<span class="k2">;</span>
               <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Row: %d, Column: %d, ArrayIndex: %d, "</span>,Row,Column,arrayIndex<span class="k2">)</span><span class="k2">;</span> 
               TileNumber <span class="k3">=</span> m_Map<span class="k2">[</span>arrayIndex<span class="k2">]</span><span class="k2">;</span>
               <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"TileNumber: %d\n"</span>,TileNumber<span class="k2">)</span><span class="k2">;</span>
               m_Tiles-&gt;DrawTile<span class="k2">(</span>TileNumber, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Xpixel, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>Ypixel<span class="k2">)</span><span class="k2">;</span>
               Column<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
               Xpixel <span class="k3">+</span><span class="k3">=</span> m_Tiles-&gt;GetTileWidth<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
          <span class="k2">}</span>
</pre></div></div><p>

That will give you a lot of output, so you should redirect it to a file. Then you can check the following: Your map array in the test case is 16*21, so ArrayIndex mustn&#39;t be bigger than (16*21) = 336!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Mon, 04 Dec 2006 14:30:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright that formula works perfectly :-D  I am speculating that the error is inside the cTIle::Draw() method now.  I have been using debugging output like that, but in the form of allegro messages.  Because of annoyance of trying to close those pop-up messages and then trying to hit escape to close the program I devised a debugging key.  I use:
</p><div class="source-code snippet"><div class="inner"><pre><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_D<span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</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">"Output: %$"</span>, output I want to check<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

printf() has no way of displaying to the screen in allegro &gt;.&lt;</p><p>Edit:  Wee I&#39;m almost stuck again,  but I&#39;m a bad programmer if I can&#39;t find my mistake so I must tear into this some more &gt;.&lt;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Tue, 05 Dec 2006 05:56:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
printf() has no way of displaying to the screen in allegro &gt;.&lt;
</p></div></div><p>

I know. printf() outputs to the standard output, so if you are smart you compile your program as a console application, start it from terminal in windowed mode and then look at the output in the terminal. You can also start it like<br /><span class="source-code">program.exe <span class="k3">&gt;</span>log.txt</span><br />to output into a file. Or you directly write to a file, by using ofstream or fprintf().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Tue, 05 Dec 2006 13:33:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ooooo I&#39;m liking this.  I just tested it using that redirection operator mmmm. How I love writing &quot;moo&quot; to a file.  Thanks, I love learning new stuff <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Tue, 05 Dec 2006 13:36:25 +0000</pubDate>
	</item>
</rss>
