<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>is my project code bad praticing??</title>
		<link>http://www.allegro.cc/forums/view/609056</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 20 Dec 2011 01:13:23 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi all, i am starting a new project, a bomberman fan game and i am gathering resources and testing codes...so i decided to make my code this way..</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">// first i make a class pure virtual</span>
<span class="number">  2</span><span class="k1">class</span> cEntity
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  public:
<span class="number">  5</span>    <span class="k1">virtual</span> <span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">virtual</span> <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// a class that will control all animations of all classes</span>
<span class="number"> 10</span><span class="k1">class</span> cAnimation
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>  public:
<span class="number"> 13</span>    <span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">void</span> increase_frame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  private:
<span class="number"> 19</span>    <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">int</span> w<span class="k2">;</span>
<span class="number"> 22</span>    <span class="k1">int</span> h<span class="k2">;</span>
<span class="number"> 23</span>    <span class="k1">int</span> frame<span class="k2">;</span>
<span class="number"> 24</span>    <span class="k1">int</span> max_frame<span class="k2">;</span>
<span class="number"> 25</span>    <span class="k1">float</span> speed_frame<span class="k2">;</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>sprite<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="c">// then i will make the enemies classes and player class that inherits cEntity and cAnimation</span>
<span class="number"> 30</span><span class="k1">class</span> cPlayer <span class="k2">:</span> <span class="k1">public</span> cEntity, <span class="k1">public</span> cAnimation <span class="c">// and so on with enemies classes</span>
<span class="number"> 31</span><span class="k2">{</span>
<span class="number"> 32</span>  public:
<span class="number"> 33</span>    <span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>
is this way bad praticing or is a good code??</p><p>in player and enemies classes i make this...
</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">void</span> cPlayer::logic<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  cAnimation::logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="c">// here more code of the logic of player</span>
<span class="k2">}</span>

<span class="k1">void</span> cPlayer::render<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  cAnimation::render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
then i create a class cManager that will hold a list of all cEntity objects, <br />so i simplify the loop with this...</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">// function to add elements to the list</span>
<span class="number">  2</span><span class="k1">void</span> cManager::add_elements<span class="k2">(</span>cEntity <span class="k3">*</span>e<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  entity_list.push_back<span class="k2">(</span>e<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// function of logic of all elements in the list</span>
<span class="number">  8</span><span class="k1">void</span> cManager::logic<span class="k2">(</span><span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>  <span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>cEntity <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> entity_list.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> entity_list.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 11</span>  <span class="k2">{</span>
<span class="number"> 12</span>    cEntity <span class="k3">*</span>e <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 13</span>    e-&gt;logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k2">}</span>
<span class="number"> 15</span><span class="k2">}</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">void</span> cManager::render<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 18</span><span class="k2">{</span>
<span class="number"> 19</span>  <span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>cEntity <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> entity_list.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> entity_list.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 20</span>  <span class="k2">{</span>
<span class="number"> 21</span>    cEntity <span class="k3">*</span>e <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 22</span>    e-&gt;render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k2">}</span>
<span class="number"> 24</span><span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="c">// in the main function</span>
<span class="number"> 27</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 28</span><span class="k2">{</span>
<span class="number"> 29</span>  cManager manager<span class="k2">;</span>
<span class="number"> 30</span> 
<span class="number"> 31</span>  manager.logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span><span class="c">// then drawing (after the fps control) </span>
<span class="number"> 34</span>  manager.render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span><span class="k2">}</span>
<span class="number"> 36</span><span class="c">//simple</span>
</div></div><p>
I just want to know if my code style is good, sugestions and so on
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gabriel Campos)</author>
		<pubDate>Wed, 14 Dec 2011 23:47:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s good that you&#39;re abstracting functionality into separate classes (e.g., animations). It&#39;s bad that your entities inherit animation. A player isn&#39;t really an animation. A player <i>has</i> an animation. You would be better off to use composition instead of inheritance:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> cPlayer
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>private:
<span class="number">  4</span>    cAnimation anim_<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>public:
<span class="number">  7</span>    <span class="c">// Etc...</span>
<span class="number">  8</span>
<span class="number">  9</span>    <span class="k1">void</span> logic<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">void</span> render<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">void</span> cPlayer::logic<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 14</span><span class="k2">{</span>
<span class="number"> 15</span>    this-&gt;anim_-&gt;logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="c">// Etc...</span>
<span class="number"> 17</span><span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="c">// Etc...</span>
</div></div><p>

Another thing that you&#39;re doing is giving each of your entities and animations, etc., too much responsibility (e.g., their own logic and render methods). A lot of people do it like this and it does work. I prefer not to do it that way because IMHO it ends up violating good design practices and requires a lot of redundant code. It requires your different objects to know how to draw themselves. In practice, they usually don&#39;t need to know this. Often you draw every different type of entity the same exact way or ways. Ideally, you would figure out an interface (or interfaces) to draw with and write a <i>single</i> manager object to actually draw everything.</p><p>I have already demonstrated this for you before. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> See <a href="http://www.allegro.cc/forums/thread/606117">here</a>.</p><p>Similarly, it requires all of your objects to know about the world around them to interact with it. Ideally, it would be the world or the game that does the thinking, not the <span class="source-code">Player</span>, and the <span class="source-code">Boss</span>, and the <span class="source-code">Bridge</span>, etc. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 15 Dec 2011 02:06:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree with bamccaig that your entities should own an animation, not be an animation.</p><p>However, I don&#39;t agree that entities and animations shouldn&#39;t have their own logic and render methods. All animations share the same basic logic and rendering. I see how it might help if you really need flexibility in how you render an animation, but unless you need shaders/effects/something other than plain bitmap drawing, then I don&#39;t think an external object should render an animation. I definitely disagree that entities and animations should not have their own logic methods.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 15 Dec 2011 05:08:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree with Edgar on all accounts. </p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940320#target">bamccaig</a> said:</div><div class="quote"><p>Ideally, it would be the world or the game that does the thinking, not the Player, and the Boss, and the Bridge, etc</p></div></div><p>

There is every reason for the Player, Boss and Bridge to do their own thinking, if it is thinking specific to them.  If I want to find Player-specific logic, I expect to find it in the Player class. Certainly <i>not</i> somewhere in the World.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> it requires all of your objects to know about the world around them to interact with it</p></div></div><p>

Which is fine. Give them an interface (or set of interfaces) to the World which is sensible (e.g. it might be bounded by location).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (james_lohr)</author>
		<pubDate>Thu, 15 Dec 2011 05:15:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940335#target">James Lohr</a> said:</div><div class="quote"><p>
I agree with Edgar on all accounts.
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 15 Dec 2011 05:19:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Globally, it&#39;s a rather-well-used pattern, familiar to many people. Yet everyone will have different advice, depending on one&#39;s idea of how generic the game engine should be, or if it should be simply limited to what the game will need : For example, if you never plan to use particles or vector objects, I got the impression that all your cEntities subclasses will derivate from cAnimation. If they do, then it makes sense to design one class instead of two, it&#39;s less code to write (and to understand later).</p><p>For cAnimation, as I understand it you&#39;ve tried to isolate every piece of data that can be needed to draw a character/bonus/explosion/whatever. The evident common code is the render(), and increase_frame() is useful if it does what I think it does (ie: be called by any specific entities&#39; logic() when they request to advance the animation by one step.). But then I wonder what&#39;s the intent of cAnimation:update() or cAnimation:logic(). logic() looks especially dubious, because every specific cEntity (CPlayer, etc.) is forced to implement a method of this name, which will always override cAnimation&#39;s one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 15 Dec 2011 07:17:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thanx to all for explanation...<br />so, after reading this i got new ideas...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> Entity
<span class="k2">{</span>
  public:
    <span class="k1">virtual</span> <span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k1">virtual</span> <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Animation
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  public:
<span class="number">  4</span>    ~Animation<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    <span class="k1">void</span> render<span class="k2">(</span><span class="k1">int</span>, <span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">void</span> increase_frame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  private:
<span class="number">  9</span>    <span class="k1">int</span> w<span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">int</span> h<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">float</span> frame<span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">int</span> max_frame<span class="k2">;</span>
<span class="number"> 13</span>    <span class="k1">float</span> speed_frame<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">bool</span> visible<span class="k2">;</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>sprite<span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>Animation::~Animation<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 19</span><span class="k2">{</span>
<span class="number"> 20</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>sprite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>Animation::render<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>  <span class="k1">if</span><span class="k2">(</span>visible<span class="k2">)</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>sprite, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span>Animation::increase_frame<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>  frame <span class="k3">+</span><span class="k3">=</span> speed_frame<span class="k2">;</span>
<span class="number"> 32</span>  <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>frame <span class="k3">&gt;</span> max_frame<span class="k2">)</span>
<span class="number"> 33</span>    frame <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Player <span class="k2">:</span> <span class="k1">public</span> Entity
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  public:
<span class="number">  4</span>    Player<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    <span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    <span class="c">// other functions</span>
<span class="number">  8</span>  
<span class="number">  9</span>  private:
<span class="number"> 10</span>    <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 12</span>    Animation animation<span class="k2">;</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">void</span> Player::logic<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 16</span><span class="k2">{</span>
<span class="number"> 17</span>  <span class="c">// player logic</span>
<span class="number"> 18</span><span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>  this-&gt;animation-&gt;render<span class="k2">(</span>x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
</div></div><p>
so i think is this way good, right?? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>and one more thing to know your opinions...about tiles...<br />should i create a Level class that have a matrix tiles[][] to compare collision<br />or should i create a Level class that have a lot of tiles objects (class Tile, with information of x, y, size, is solid or not)??
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gabriel Campos)</author>
		<pubDate>Thu, 15 Dec 2011 16:51:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>so i think is this way good, right?? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p></div></div><p>
You have x and y fields and two places now.  I think you should do what Audric suggested: dump Entity and rename Animation to Entity.  Both logic and rendering code need much of the same information, you shouldn&#39;t duplicate it.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940399#target">Gabriel Campos</a> said:</div><div class="quote"><p>should i create a Level class that have a matrix tiles[][] to compare collision<br />or should i create a Level class that have a lot of tiles objects (class Tile, with information of x, y, size, is solid or not)??
</p></div></div><p>
You could do it like this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> Tile <span class="k2">{</span>
    <span class="k1">int</span> x, y<span class="k2">;</span>
    <span class="k1">int</span> size<span class="k2">;</span>
    <span class="k1">bool</span> solid<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

Tile tiles<span class="k2">[</span><span class="k2">]</span><span class="k2">[</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>

A struct is a good match for tiles, since they are just dumb data.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Thu, 15 Dec 2011 17:10:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Tiles: I&#39;d recommend to separate two things:<br />- Available tiles: An array or list or vector where you enumerate the available tiles.<br />- Maps: each is (or contains) a 2D array or list&lt;list&gt; or vector&lt;vector&gt; of indices that refer to the distinct tiles above.</p><p>ie:
</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>tiles <span class="k3">=</span> <span class="k1">new</span> vector<span class="k3">&lt;</span>Tile <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">;</span>
<span class="number">  2</span>tiles<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>floor_bitmap, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// second argument means "walkable"</span>
<span class="number">  3</span>tiles<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>wall_bitmap, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>tiles<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>boulder_bitmap, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">int</span> level<span class="k2">[</span><span class="k2">]</span><span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="c">// should be loaded from file, but to give you an idea:</span>
<span class="number">  7</span><span class="k2">{</span> <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span> <span class="k2">}</span>,
<span class="number">  8</span><span class="k2">{</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">1</span> <span class="k2">}</span>,
<span class="number">  9</span><span class="k2">{</span> <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">1</span> <span class="k2">}</span>,
<span class="number"> 10</span><span class="k2">{</span> <span class="n">1</span>, <span class="n">0</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span> <span class="k2">}</span>,
<span class="number"> 11</span><span class="k2">{</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">1</span> <span class="k2">}</span>,
<span class="number"> 12</span><span class="k2">{</span> <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span> <span class="k2">}</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="c">// Get the tile at a given cell position.</span>
<span class="number"> 16</span>Tile <span class="k3">*</span> tile_at_pos<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 17</span><span class="k2">{</span>
<span class="number"> 18</span>  <span class="k1">return</span> tiles<span class="k2">[</span> level<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 15 Dec 2011 19:00:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940401#target">torhu</a> said:</div><div class="quote"><p>
You have x and y fields and two places now.  I think you should do what Audric suggested: dump Entity and rename Animation to Entity.  Both logic and rendering code need much of the same information, you shouldn&#39;t duplicate it.
</p></div></div><p>
Entity could hold x and y, and Animation::Render could take x and y as input parameters.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940411#target">Audric</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>tiles <span class="k3">=</span> <span class="k1">new</span> vector<span class="k3">&lt;</span>Tile <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">;</span>
tiles<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>floor_bitmap, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// second argument means "walkable"</span>
tiles<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>wall_bitmap, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
tiles<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">=</span><span class="k1">new</span> Tile<span class="k2">(</span>boulder_bitmap, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>

Don&#39;t forget to resize or use push_back, and dereference the pointer :
</p><div class="source-code snippet"><div class="inner"><pre>tiles <span class="k3">=</span> <span class="k1">new</span> vector<span class="k3">&lt;</span>Tile<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">;</span>
tiles-&gt;reserve<span class="k2">(</span><span class="n">3</span>,NULL<span class="k2">)</span><span class="k2">;</span>
<span class="k2">(</span><span class="k3">*</span>tiles<span class="k2">)</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="c">//...</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 16 Dec 2011 00:53:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940399#target">Gabriel Campos</a> said:</div><div class="quote"><p>
so i think is this way good, right?? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div></div><p>
Firstly, your animation class doesn&#39;t seem to be an animation at all. It has a single bitmap. That is just a sprite. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> You do seem to have some of the workings for an animation (e.g., a frame) so perhaps you are just keeping the implementation simple for now and will extend it into an animation later (e.g., <span class="source-code">std::vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">&gt;</span> sprites</span>)?</p><p>Secondly, I think being visible is more an attribute of an entity within the game, not the animation itself. You care if the <i>entity</i> is visible, not if its animation is visible. At least, that seems logical to me. I guess it might depend on the game, but I think that is true for any generic entity vs. animation. If they aren&#39;t generic classes then you might want to give them more specific names.
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940399#target">Gabriel Campos</a> said:</div><div class="quote"><p>
should i create a Level class that have a matrix tiles[][] to compare collision<br />or should i create a Level class that have a lot of tiles objects (class Tile, with information of x, y, size, is solid or not)??
</p></div></div><p>
Audric&#39;s solution is good: tiles are usually reused in a level to make a bigger level from fewer tiles. To save memory you might want to load your tiles into memory once into a manager/container and then reference them somehow from your levels. In memory, your level can store a matrix of numeric indexes, string keys (probably a bad idea for performance reasons), or even pointers to these tiles. That way you don&#39;t waste too much memory, but you can still reference tiles relatively efficiently.</p><p>For example, you could use a single <span class="source-code"><span class="k1">char</span></span> to identify your tiles. Assuming you use mnemonics to assign characters to your tiles, this could make it relatively easy to create levels with them. Load them up into a map and look them up once at level load-time.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Tile
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>private:
<span class="number">  4</span>    <span class="c">// Etc...</span>
<span class="number">  5</span>
<span class="number">  6</span>    Tile<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Create an invalid tile.</span>
<span class="number">  7</span>public:
<span class="number">  8</span>    <span class="k1">typedef</span> boost::shared_ptr<span class="k3">&lt;</span>Tile&gt; Ptr<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    Tile<span class="k2">(</span><span class="c">/*...etc...*/</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Create a real tile.</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <span class="k1">const</span> <span class="k1">static</span> Tile InvalidTile<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>    <span class="c">// "...Wait, can he do that?" I JUST DID! &gt;:( (I don't know...)</span>
<span class="number"> 15</span>    <span class="k1">const</span> <span class="k1">static</span> Tile::Ptr InvalidTilePtr<span class="k2">(</span><span class="k3">&amp;</span>InvalidTile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="c">// Etc...</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">class</span> TileManager
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>private:
<span class="number"> 23</span>    <span class="k1">typedef</span> std::map<span class="k3">&lt;</span><span class="k1">char</span>, Tile::Ptr&gt; Map<span class="k2">;</span>
<span class="number"> 24</span>    <span class="k1">typedef</span> Map::const_iterator MapIt<span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    Map tiles_<span class="k2">;</span>
<span class="number"> 27</span>public:
<span class="number"> 28</span>    <span class="k1">typedef</span> std::vector<span class="k3">&lt;</span>Tile::Ptr&gt; Row<span class="k2">;</span>
<span class="number"> 29</span>    <span class="k1">typedef</span> boost::shared_ptr<span class="k3">&lt;</span>Row&gt; RowPtr<span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>    <span class="c">// Etc...</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    <span class="k1">const</span> Tile::Ptr getTile<span class="k2">(</span><span class="k1">char</span> id<span class="k2">)</span> <span class="k1">const</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k1">const</span> Tile::Ptr TileManager::getTile<span class="k2">(</span><span class="k1">char</span> id<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 37</span><span class="k2">{</span>
<span class="number"> 38</span>    TileManager::MapIt it <span class="k3">=</span> this-&gt;tiles_.find<span class="k2">(</span>id<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>    <span class="k1">if</span><span class="k2">(</span>it <span class="k3">=</span><span class="k3">=</span> this-&gt;tiles_.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 41</span>        <span class="k1">return</span> Tile::InvalidTilePtr<span class="k2">;</span>
<span class="number"> 42</span>
<span class="number"> 43</span>    <span class="k1">return</span> it-&gt;second<span class="k2">;</span>
<span class="number"> 44</span><span class="k2">}</span>
<span class="number"> 45</span>
<span class="number"> 46</span><span class="k1">class</span> Level
<span class="number"> 47</span><span class="k2">{</span>
<span class="number"> 48</span>    std::vector<span class="k3">&lt;</span> Tile::RowPtr <span class="k3">&gt;</span> tiles<span class="k2">;</span>
<span class="number"> 49</span>public:
<span class="number"> 50</span>    Level<span class="k2">(</span><span class="k1">const</span> TileManager <span class="k3">&amp;</span>, <span class="k1">const</span> <span class="k1">char</span> <span class="k2">[</span><span class="k2">]</span><span class="k2">[</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</span>Level::Level<span class="k2">(</span>
<span class="number"> 54</span>        <span class="k1">const</span> TileManager <span class="k3">&amp;</span> manager,
<span class="number"> 55</span>        <span class="k1">const</span> <span class="k1">int</span> width,
<span class="number"> 56</span>        <span class="k1">const</span> <span class="k1">int</span> height,
<span class="number"> 57</span>        <span class="k1">const</span> <span class="k1">char</span> <span class="k2">[</span><span class="k2">]</span><span class="k2">[</span><span class="k2">]</span>data<span class="k2">)</span>
<span class="number"> 58</span><span class="k2">{</span>
<span class="number"> 59</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>width<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 60</span>    <span class="k2">{</span>
<span class="number"> 61</span>        Tile::RowPtr row<span class="k2">(</span><span class="k1">new</span> Tile::Row<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>
<span class="number"> 63</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span>height<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 64</span>        <span class="k2">{</span>
<span class="number"> 65</span>            row-&gt;push_back<span class="k2">(</span>manager.getTile<span class="k2">(</span>data<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>        <span class="k2">}</span>
<span class="number"> 67</span>
<span class="number"> 68</span>        this-&gt;tiles_.push_back<span class="k2">(</span>row<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>    <span class="k2">}</span>
<span class="number"> 70</span><span class="k2">}</span>
</div></div><p>

(Untested... There is some very questionable code regarding const/static initialization, but you get the idea...)</p><p>Well that all turned out pretty messy, but hopefully not too messy to follow. <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" /></p><p>The idea is that your levels can be like this:</p><pre>
# media/levels/the-alter
A=media/tiles/alter.bmp
g=media/tiles/grass.bmp
T=media/tiles/tree.bmp
-=media/tiles/wall_horz.bmp
|=media/tiles/wall_vert.bmp

|------------|
|gggggggggggg|
|ggTgg---gggg|
|ggggg|Aggggg|
|ggggg---ggTg|
|ggggTggggggg|
|gggggggggggg|
|------------|
</pre><p>

<tt>&lt;over-engineer carried-away=&quot;true&quot; /&gt;&lt;/tangent&gt;&lt;/digress&gt;</tt>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940456#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Entity could hold x and y, and Animation::Render could take x and y as input parameters.
</p></div></div><p>
That&#39;s already exactly what happens.. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940456#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
...and dereference the pointer...
</p></div></div><p>
Better yet, use an automatic variable instead, if possible. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 16 Dec 2011 03:24:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940481#target">bamccaig</a> said:</div><div class="quote"><p>
That&#39;s already exactly what happens.. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div></div><p>
&lt;checks eyesight...&gt;<br />The latest incarnation of Entity doesn&#39;t hold x or y.<br />animation::render does take two ints...</p><p>1pt bambam, 1pt reynaldo
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 16 Dec 2011 03:33:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>first thanx to all for the atention....<br />responding the questions....</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940481#target">bamccaig</a> said:</div><div class="quote"><p>so perhaps you are just keeping the implementation simple for now and will extend it into an animation later (e.g., std::vector&lt;ALLEGRO_BITMAP *&gt; sprites)?</p></div></div><p>
is just simple for this post. I use a bitmap with all animation sprite with specific size and clip them acordiling..</p><p>e.g. al_draw_bitmap_region(sprite, frame * w, stance * h, x, y, w, h, 0);</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Secondly, I think being visible is more an attribute of an entity within the game, not the animation itself. You care if the entity is visible, not if its animation is visible. At least, that seems logical to me. I guess it might depend on the game, but I think that is true for any generic entity vs. animation. If they aren&#39;t generic classes then you might want to give them more specific names.
</p></div></div><p>
hmmm, dont know.. but i agree with you in this point <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>for tiles i will try to find someway first, then after ask!! <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Better yet, use an automatic variable instead, if possible.</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940485#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>The latest incarnation of Entity doesn&#39;t hold x or y.<br />animation::render does take two ints...</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gabriel Campos)</author>
		<pubDate>Mon, 19 Dec 2011 18:21:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Gabriel Campos said:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940481#target">bamccaig</a> said:</div><div class="quote"><p>
Better yet, use an automatic variable instead, if possible.
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div></div><p>
Use one on the stack - a local.</p><div class="quote_container"><div class="title">Gabriel Campos said:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title">Edgar said:</div><div class="quote"><p>
The latest incarnation of Entity doesn&#39;t hold x or y.<br />animation::render does take two ints...
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div></div><p>
I was talking to bamccaig - you&#39;re fine. It just makes sense for entity to store the position, not animation. That&#39;s all I was saying.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 20 Dec 2011 00:41:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609056/940995#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Use one on the stack - a local.
</p></div></div><p>
Not necessarily the stack. A class member can still be automatic, but the class instance itself can be on the heap.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Example
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>private:
<span class="number">  4</span>    <span class="k1">int</span> x_<span class="k2">;</span> <span class="c">// Automatic.</span>
<span class="number">  5</span>    <span class="k1">int</span> <span class="k3">*</span> y_<span class="k2">;</span> <span class="c">// Pointer is automatic; int may or may not be automatic.</span>
<span class="number">  6</span>    <span class="k1">int</span> <span class="k3">*</span> z_<span class="k2">;</span> <span class="c">// Pointer is automatic; int may or may not be automatic.</span>
<span class="number">  7</span>public:
<span class="number">  8</span>    Example<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  9</span>        y_<span class="k2">(</span><span class="k1">new</span> <span class="k1">int</span><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>, <span class="c">// int not automatic.</span>
<span class="number"> 10</span>        z_<span class="k2">(</span><span class="k3">&amp;</span>x_<span class="k2">)</span> <span class="c">// int is automatic (it's actually x_).</span>
<span class="number"> 11</span>    <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k2">}</span>
<span class="number"> 13</span>
<span class="number"> 14</span>    ~Example<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 15</span>    <span class="k2">{</span>
<span class="number"> 16</span>        <span class="k1">delete</span> this-&gt;y_<span class="k2">;</span> <span class="c">// Not automatic; we destroy it ourselves.</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>    <span class="k1">int</span> x<span class="k2">;</span> <span class="c">// Automatic.</span>
<span class="number"> 23</span>    <span class="k1">int</span> <span class="k3">*</span> y <span class="k3">=</span> <span class="k1">new</span> <span class="k1">int</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Pointer is automatic; int is not automatic.</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">delete</span> y<span class="k2">;</span>
<span class="number"> 26</span>    y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>    Example ex<span class="k2">;</span> <span class="c">// Automatic.</span>
<span class="number"> 29</span>
<span class="number"> 30</span>    <span class="c">// Pointer is automatic; Example instance is not automatic.</span>
<span class="number"> 31</span>    Example <span class="k3">*</span> p_ex <span class="k3">=</span> <span class="k1">new</span> Example<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    <span class="k1">delete</span> p_ex<span class="k2">;</span>
<span class="number"> 34</span>    p_ex <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k2">}</span>
</div></div><p>

*Something* like that anyway. Automatic variables are much easier to use and understand, which is why I suggested using them whenever possible.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 20 Dec 2011 01:13:23 +0000</pubDate>
	</item>
</rss>
