<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Using Rand()</title>
		<link>http://www.allegro.cc/forums/view/587343</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 01 Sep 2006 19:38:27 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, first things first. This program is meant to create a random number between 1 and however high the max is. It is basically a dice rolling simulation. I have fixed some problems that the compiler returned, but I need help.
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">//gamemech.cpp</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;cstdlib&gt;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">class</span> Die_roll<span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="c">//Left Blank For Possible Privates</span></td></tr><tr><td class="number">7</td><td>    public:</td></tr><tr><td class="number">8</td><td>        <span class="k1">int</span> dieroll<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>        <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><span class="k1">unsigned</span> dieroll<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">void</span> roll_die<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">11</td><td>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D4<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D6<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D8<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D10<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D12<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>        <span class="k1">friend</span> <span class="k1">class</span> D20<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">class</span> D4<span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    <span class="p">#undef RAND_MAX</span></td></tr><tr><td class="number">23</td><td>    <span class="p">#define RAND_MAX 4</span></td></tr><tr><td class="number">24</td><td>    public:</td></tr><tr><td class="number">25</td><td>        <span class="k1">int</span> roll_die<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">int</span> main<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">29</td><td>    </td></tr><tr><td class="number">30</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_PAUSE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</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">"Trial"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    </td></tr><tr><td class="number">36</td><td>    D4 xdieroll<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    xdieroll.roll_die<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <span class="c">//Conversion from xdieroll to printable text here</span></td></tr><tr><td class="number">39</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="c">/* Printable Text */</span>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    </td></tr><tr><td class="number">41</td><td>    <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    </td></tr><tr><td class="number">43</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td><span class="k2">}</span></td></tr><tr><td class="number">45</td><td><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>
This gives me a few errors.
</p><ul></ul><p> In function `Die_roll _mangled_main()&#39;:</p><ul></ul><p>I need to fix this so that I can get an integer (doesn&#39;t matter how just so that it is positive) from the D4 through D20 list. If I can get the D4 fixed, then I can just change the RAND_MAX to whatever number I need. This is where the last two comments come in. I need a conversion apparently to get to use the result, and I wanted to have it printed to test the program to make sure it works. Please help. I am confused <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> right now.&lt;/li&gt;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dragonsoulj)</author>
		<pubDate>Thu, 31 Aug 2006 23:46:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wouldn&#39;t it be just easier to use something 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="p">#define DIES 6</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>vector<span class="k3">&lt;</span>int&gt; dierolls<span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">int</span> dies<span class="k2">[</span>DIES<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">4</span>, <span class="n">6</span>, <span class="n">8</span>, <span class="n">10</span>, <span class="n">12</span>, <span class="n">20</span> <span class="k2">}</span><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="k1">void</span> rolldie<span class="k2">(</span><span class="k1">int</span> die<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>  dierolls.push_back<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%die<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">12</td><td><span class="k2">{</span></td></tr><tr><td class="number">13</td><td>  <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>DIES<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span> rolldie<span class="k2">(</span>dies<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">14</td><td>  </td></tr><tr><td class="number">15</td><td>  <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>dierolls.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">16</td><td>  <span class="k2">{</span> <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"D%d: %d"</span>, dies<span class="k3">&lt;</span>i&gt;, dierolls<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>  </td></tr><tr><td class="number">18</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CursedTyrant)</author>
		<pubDate>Thu, 31 Aug 2006 23:59:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wait a second...why are you bothering with all that D4..D20 stuff? It would be easier (and better) to keep RAND_MAX at some arbitrary value (ex: 65536), and then just use the mod operator( % ) to return the remainder of the division.
</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">unsigned</span> <span class="k1">int</span> random_number<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> sides<span class="k2">)</span>
  <span class="k2">{</span>
    <span class="k1">return</span> <span class="k2">(</span> Rand<span class="k2">(</span><span class="k2">)</span> % die_sides <span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
</pre></div></div><p>


I don&#39;t quite understand why you have &quot;xdieroll.roll_die&quot; in your code. EDIT: You forgot the () there, since roll_die is also what you named your function. Please do not name variables and functions the same thing if at all possible <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />. Also, make it public function that returns an unsigned integer instead.</p><p>You are undefining and redefining RAND_MAX in D4. Even if you were to get it to work that way, defines are at compile-time, not run-time, so no mater which friend class you used, it would give the same result.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Fri, 01 Sep 2006 00:05:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Elverion: You forgot +1, misspelled parameter name and used upper case in &quot;rand&quot; function name. The code should look as follows: <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">int</span> random_number<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> die_sides<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">return</span> <span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % die_sides <span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Krzysztof Kluczek)</author>
		<pubDate>Fri, 01 Sep 2006 00:21:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The symbol <a href="http://www.delorie.com/gnu/docs/glibc/libc_396.html">RAND_MAX</a> is already defined in libc, it is usually not a good idea to &#39;recycle&#39; it.</p><p>I kinda remember classes require a final ; like<br />class Die_roll{<br />// stuff<br />};<br />This should explain the &#39;line 28&#39; messages.</p><p>Why do you declare &quot;int srand(unsigned dieroll);&quot; in your class ? it is a libc function you should call. Just once.</p><p>Even when it will compile, there is a lot of stuff in there that doesn&#39;t make much sense... good luck
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 01 Sep 2006 00:46:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Elverion said:</div><div class="quote"><p>
I don&#39;t quite understand why you have &quot;xdieroll.roll_die&quot; in your code.
</p></div></div><p>I don&#39;t really remember why I started to use that part of the code. I had to change the variable name so it doesn&#39;t match the rest, and I did forget to add the (). I will try not to name the functions the same in the future.</p><div class="quote_container"><div class="title">Krzysztof Kluczek said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">int</span> random_number<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> die_sides<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">return</span> <span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % die_sides <span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div></div><p>Thanks. Just for future reference, could:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">int</span> random_number<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> die_sides<span class="k2">)</span>
<span class="k2">{</span>
    <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k1">return</span> <span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % die_sides <span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>work as well?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dragonsoulj)</author>
		<pubDate>Fri, 01 Sep 2006 00:55:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes, but that would return the same value every time.<br />srand sets the seed. It should be done once. Either with a value (then you will get the same series of values each time) or with time(0) (for &quot;real random&quot; behaviour).<br />also, you still need the +1
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Fri, 01 Sep 2006 00:59:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would throw that call to srand into a new function, void Init(). You could, if you choose, put it in the default constructor, but then remember it would be called every time you create an instance of that object.</p><p>Krzysztof Kluczek: Well, don&#39;t I feel like an <span class="cuss"><span>ass</span></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Fri, 01 Sep 2006 02:31:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Elverion: I just wanted to be helpful and make this code more useable example. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Krzysztof Kluczek)</author>
		<pubDate>Fri, 01 Sep 2006 02:52:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OMG, way over the top.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> roll_dice<span class="k2">(</span><span class="k1">unsigned</span> sides<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">return</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % sides<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">unsigned</span> roll_multi_dice<span class="k2">(</span><span class="k1">unsigned</span> nr_dices, <span class="k1">unsigned</span> sides<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">unsigned</span> result <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
  <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> nr_dices<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
    result <span class="k3">+</span><span class="k3">=</span> roll_dice<span class="k2">(</span>sides<span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
  <span class="k1">return</span> result<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
There. You don&#39;t need no complicated class hierarchy just to roll a dice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Fri, 01 Sep 2006 19:27:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But what about all the pretty over-design? D:
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Fri, 01 Sep 2006 19:31:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It doesn&#39;t use templates nor singletons, so it&#39;s not half bad.<br />I&#39;d suggest you add a few useful defines:
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#define ONE 1</span>
<span class="p">#define TWO 2</span>
<span class="p">#define THREE 3</span>
<span class="p">#define FOUR 4</span>
<span class="p">#define FIVE 5</span>
<span class="c">// snip</span>
<span class="p">#define TWO_MILLION_SIX_HUNDRED_AND_FORTY_FIVE_THOUSAND_TWO_HUNDRED_AND_THIRTEEN 2645213</span>
</pre></div></div><p>
That should cover all numbers you&#39;ll ever need. You could even write a program that automatically writes these defines into a dedicated header! Then to roll the dice using my function, you can do this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> r <span class="k3">=</span> roll_dice<span class="k2">(</span>FOUR<span class="k2">)</span><span class="k2">;</span> <span class="c">// Rolls a 4-sided dice, storing the result in r</span>
<span class="k1">if</span> <span class="k2">(</span>r <span class="k3">=</span><span class="k3">=</span> ONE<span class="k2">)</span> <span class="c">// if r equals 1...</span>
  do_stuff_one<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// do "one"-stuff</span>
<span class="k1">if</span> <span class="k2">(</span>r <span class="k3">=</span><span class="k3">=</span> TWO<span class="k2">)</span> <span class="c">// if r equals 2...</span>
  do_stuff_two<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// do the "2"-stuff</span>
</pre></div></div><p>
Hehe. Anyone&#39;s stomach turning yet?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Fri, 01 Sep 2006 19:38:27 +0000</pubDate>
	</item>
</rss>
