<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Doolwind&#039;s Game Coding Blog</title>
	<atom:link href="http://www.doolwind.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doolwind.com/blog</link>
	<description>Random Thoughts On Game Development</description>
	<lastBuildDate>Sun, 21 Feb 2010 23:36:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Finding Indie Game Developers</title>
		<link>http://www.doolwind.com/blog/finding-indie-game-developers/</link>
		<comments>http://www.doolwind.com/blog/finding-indie-game-developers/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 22:05:09 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Artists]]></category>
		<category><![CDATA[Designers]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Indie Game Development]]></category>
		<category><![CDATA[Programmers]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=465</guid>
		<description><![CDATA[Back in 2006 I wrote an article detailing one of the biggest problems I saw with indie game development.  Since then, I’ve seen a rise in another problem that I’ll outline today.  This problem stems from the lack of communication within the indie game industry and I look for possible solutions.

The Problem
 Indie developers have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/indiegamedevs.jpg"><img class="alignright" title="Indie Game Devs" src="http://www.doolwind.com/images/blog/indiegamedevs.jpg" alt="" width="325" height="101" /></a>Back in 2006 I wrote an article detailing one of the <a href="http://www.doolwind.com/blog/the-indie-problem/">biggest problems</a> I saw with indie game development.  Since then, I’ve seen a rise in another problem that I’ll outline today.  This problem stems from the lack of communication within the indie game industry and I look for possible solutions.</p>
<p><span id="more-465"></span></p>
<p><strong>The Problem</strong></p>
<p><strong><em> </em></strong><em>Indie developers have trouble finding other like-minded indie developers to work with.</em></p>
<p>I talk with a lot of indie developers and they tend to fall into three main categories:  programmers, designers and artist.  Each of these groups has a hard time finding quality people from the other two groups.  This is a major problem for indie game development as fewer games are being produced and talent is going to waste.</p>
<p><strong>The Cause</strong></p>
<p>The main cause of this problem is a lack of communication between the groups.  There is no reliable way for Programmer Pete to find Artist Andy or Designer Dave.  Pete was in the games industry for 10 years before “going indie” but he knows few people.  He kept to himself and while he is friends with a lot of other programmers he hasn’t kept in contact with many artists or designers.  Andy has a lot of trouble finding programmers and designers he can work with.  They are always so restrictive in what they let Andy achieve.  Dave is full of great ideas but can’t find a good programmer who’s happy to implement his idea.</p>
<p>There are hundreds of Pete’s, Andy’s and Dave’s in the world, but few of them know or have a reliable way of finding each other.</p>
<p><strong>Key Contention Points</strong></p>
<p>In the rare occasions when developers from these individual groups do meet up, often they are incompatible.  From my experience, the key points of contention fall into these main categories:</p>
<ul>
<li><strong>Compensation</strong> – Working for free, profit share, an hour rate or a fixed amount.  Where a developer is in their life will often drive their monetary needs.  While Dave has 3 years of savings he’s happy to burn through, Pete needs a large paycheque to buy all his programming books and pizza.</li>
<li><strong>Game Type</strong> – Each developer has their favourite game type and many developers don’t like to stray too far from their comfort zone.  Andy just wants to work on an FPS but Pete is an RTS fanatic while Dave has an idea for the greatest MMO of all time.</li>
<li><strong>Game Size</strong> – Projects range from days to years to develop.  The level of investment needs to match each individual’s situation.  While Pete might be happy to spend the next 3 years slowly plugging away at a game, Andy wants it down within the next month so he can get back to working on his comic book.</li>
<li><strong>Availability</strong> – The bills still need to be paid and the time dedicated to a “real job” directly affects how much time each developer can spend on the game.  Pete is a contract programmer who has half his week spare to work on the game while Dave works at McDonald’s 50 hours a week to make ends meet.</li>
</ul>
<p><strong>The Solution</strong></p>
<p>One solution I’ve seen for this problem comes in the form of “help wanted” sections in popular websites such as <a href="http://www.gamedev.net/community/forums/forum.asp?forum_id=8">gamedev.net</a> and <a href="http://forums.indiegamer.com/forumdisplay.php?s=a0035e12943a981bc9852e6fc367fbb1&amp;f=15">indiegamer.net</a>.  These sites allow teams to post their project and the skills they are after.  Another solution is networking.  Taking every opportunity to meet like minded game developers and talking to as many people as possible until like-minded people are found.  Whether visiting an IGDA meeting, the GDC or the local game development educational institute.</p>
<p>I’ve often thought that a site dedicated to connecting indie developers would be beneficial.  Teams or individual developers could post their projects with exactly what they are looking for.  Developers can also post their skills so others can find them.  A match making system could connect these two groups and reduce the uncertainty when looking for other developers.  Do you think there’s a need for such a site, or does this site already exist and it’s not well known?  Would this site be beneficial to your current situation or are you happy with the current solutions?</p>
<p><strong>Conclusion</strong></p>
<p>Is this a problem you face as an indie developer?  Of all the indie developers I know, over half of them are facing this problem right now.  Have you managed to solve this problem, and if so, how?  How are you currently finding other developers to work with and how do you determine if you are compatible?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/finding-indie-game-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Best Graphics Programming and Game Programming Blogs</title>
		<link>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/</link>
		<comments>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 06:15:57 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Graphics Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=455</guid>
		<description><![CDATA[Below are a collection of Blogs relating to game development, primarily graphics programming.  Use your favourite reader (eg Google Reader) to read them.  Know of any blogs not on the list that you can recommend? Add a comment and I&#8217;ll add them to the list. Big thanks to Damian Trebilco for help with the list. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/rssfeed.jpg"><img class="alignright" title="RSS Feed" src="http://www.doolwind.com/images/blog/rssfeed.jpg" alt="" width="130" height="119" /></a>Below are a collection of Blogs relating to game development, primarily graphics programming.  Use your favourite reader (eg <a href="http://www.google.com/reader">Google Reader</a>) to read them.  Know of any blogs not on the list that you can recommend? Add a comment and I&#8217;ll add them to the list. Big thanks to <a href="http://glintercept.nutty.org/">Damian Trebilco</a> for help with the list.  The blogs are listed alphabetically rather than by any preference of mine.</p>
<p><span id="more-455"></span></p>
<p>.mischief.mayhem.soap.<br />
<a href="http://msinilo.pl/blog/?feed=rss2"> http://msinilo.pl/blog/?feed=rss2</a></p>
<p>Atom<br />
<a href="http://farrarfocus.blogspot.com/feeds/posts/default "> http://farrarfocus.blogspot.com/feeds/posts/default </a></p>
<p>Beautiful Pixels<br />
<a href="http://feeds.feedburner.com/BeautifulPixels"> http://feeds.feedburner.com/BeautifulPixels</a></p>
<p>Dead Voxels<br />
<a href="http://deadvoxels.blogspot.com/feeds/posts/default"> http://deadvoxels.blogspot.com/feeds/posts/default</a></p>
<p>Diary of a Graphics Programmer<br />
<a href="http://diaryofagraphicsprogrammer.blogspot.com/feeds/posts/default"> http://diaryofagraphicsprogrammer.blogspot.com/feeds/posts/default</a></p>
<p>direct to video<br />
<a href="http://directtovideo.wordpress.com/feed/"> http://directtovideo.wordpress.com/feed/</a></p>
<p>Gamasutra<br />
<a href="http://feeds.feedburner.com/GamasutraNews">http://feeds.feedburner.com/GamasutraNews</a></p>
<p>Game Angst<br />
<a href="http://gameangst.com/?feed=rss2">http://gameangst.com/?feed=rss2</a></p>
<p>Game Rendering<br />
<a href="http://www.gamerendering.com/feed/"> http://www.gamerendering.com/feed/</a></p>
<p>GameArchitect<br />
<a href="http://gamearchitect.net/feed/"> http://gamearchitect.net/feed/</a></p>
<p>GameDev.Net<br />
<a href="http://www.gamedev.net/xml/">http://www.gamedev.net/xml/</a></p>
<p>Geeks3D Forums &#8211; 3D-Tech News Around The Web<br />
<a href="http://feeds2.feedburner.com/Geeks3DTechNewsForum">http://feeds2.feedburner.com/Geeks3DTechNewsForum</a></p>
<p>GPGPU» :: GPGPU.org<br />
<a href="http://www.gpgpu.org/cgi-bin/blosxom.cgi/index.rss">http://www.gpgpu.org/cgi-bin/blosxom.cgi/index.rss</a></p>
<p>Graphic Rants<br />
<a href="http://graphicrants.blogspot.com/feeds/posts/default"> http://graphicrants.blogspot.com/feeds/posts/default</a></p>
<p>Graphics Size Coding<br />
<a href="http://sizecoding.blogspot.com/feeds/posts/default"> http://sizecoding.blogspot.com/feeds/posts/default</a></p>
<p>Humus<br />
<a href="http://www.humus.name/rss.xml"> http://www.humus.name/rss.xml</a></p>
<p>Ignacio Castaño<br />
<a href="http://castano.ludicon.com/blog/feed/"> http://castano.ludicon.com/blog/feed/</a></p>
<p>John Ratcliff&#8217;s Code Suppository<br />
<a href="http://codesuppository.blogspot.com/feeds/posts/default"> http://codesuppository.blogspot.com/feeds/posts/default</a></p>
<p>level of detail<br />
<a href="http://www.jshopf.com/blog/?feed=rss2"> http://www.jshopf.com/blog/?feed=rss2</a></p>
<p>Level of Detail<br />
<a href="http://levelofdetail.wordpress.com/feed/"> http://levelofdetail.wordpress.com/feed/</a></p>
<p>Lost in the Triangles<br />
<a href="http://feeds.feedburner.com/LostInTheTriangles"> http://feeds.feedburner.com/LostInTheTriangles</a></p>
<p>Make It Big In Games<br />
<a href="http://makeitbigingames.com/feed/">http://makeitbigingames.com/feed/</a></p>
<p>meshula.net<br />
<a href="http://meshula.net/wordpress/?feed=rss2"> http://meshula.net/wordpress/?feed=rss2</a></p>
<p>OpenGL News<br />
<a href="http://www.opengl.org/news/rss_2.0/"> http://www.opengl.org/news/rss_2.0/</a></p>
<p>NVIDIA Developer News<br />
<a href="http://news.developer.nvidia.com/rss.xml"> http://news.developer.nvidia.com/rss.xml</a></p>
<p>Outside Hollywood<br />
<a href="http://www.outside-hollywood.com/feed/"> http://www.outside-hollywood.com/feed/</a></p>
<p>Real-Time Rendering<br />
<a href="http://www.realtimerendering.com/blog/feed/"> http://www.realtimerendering.com/blog/feed/</a></p>
<p>realtimecollisiondetection.net &#8211; the blog<br />
<a href="http://realtimecollisiondetection.net/blog/?feed=rss2"> http://realtimecollisiondetection.net/blog/?feed=rss2</a></p>
<p>Sanders&#8217; blog<br />
<a href="http://sandervanrossen.blogspot.com/feeds/posts/default"> http://sandervanrossen.blogspot.com/feeds/posts/default</a></p>
<p>Scattered Pixels<br />
<a href="http://feeds.feedburner.com/ScatteredPixels"> http://feeds.feedburner.com/ScatteredPixels</a></p>
<p>Solid Angle<br />
<a href="http://solid-angle.blogspot.com/feeds/posts/default"> http://solid-angle.blogspot.com/feeds/posts/default</a></p>
<p>The Hacks of Life<br />
<a href="http://hacksoflife.blogspot.com/feeds/posts/default"> http://hacksoflife.blogspot.com/feeds/posts/default</a></p>
<p>w00t<br />
<a href="http://bpeers.com/blog/xml-rss2.php"> http://bpeers.com/blog/xml-rss2.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fluent Game Design With Fluent Interfaces</title>
		<link>http://www.doolwind.com/blog/fluent-game-design-with-fluent-interfaces/</link>
		<comments>http://www.doolwind.com/blog/fluent-game-design-with-fluent-interfaces/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:00:08 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Game Coding]]></category>
		<category><![CDATA[Game Designer]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Scripting Language]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=419</guid>
		<description><![CDATA[Game designers often find themselves writing code in modern games.  Often, they have little to no programming experience and therefore must be taught the basics of programming (sequence, conditionals and loops).  I propose utilizing a technique that simplifies the code written by game designers in their games.  This technique is known as “Fluent Interfaces”.

What is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/fluentinterfaces.jpg"><img class="alignright" title="Fluent Interfaces" src="http://www.doolwind.com/images/blog/fluentinterfacessm.jpg" alt="" width="200" height="125" /></a>Game designers often find themselves writing code in modern games.  Often, they have little to no programming experience and therefore must be taught the basics of programming (sequence, conditionals and loops).  I propose utilizing a technique that simplifies the code written by game designers in their games.  This technique is known as “<a href="http://en.wikipedia.org/wiki/Fluent_interface">Fluent Interfaces</a>”.</p>
<p><span id="more-419"></span></p>
<p><strong>What is Fluent?</strong></p>
<p>Fluent interfaces allow game designers to <span class="pullquote pqRight">write more fluid and readable code</span>.  Through the use of method chaining, English like sentences can be written to express game functionality.  Fluent interfaces can be implemented in any object oriented programming language.  Below is an example of a line in the game design document, a standard implementation example and a fluent example:</p>
<p><span style="text-decoration: underline;">Game Design Document:</span></p>
<p>&#8220;Do 5 damage to all enemy tanks within range 2 of an entity&#8221;</p>
<p><span style="text-decoration: underline;">Standard Example:</span></p>
<pre class="csharpcode"><span class="csharp05">foreach</span><span class="csharp10">(</span><span class="csharp00"> </span>var<span class="csharp00"> </span>unit<span class="csharp00"> </span><span class="csharp05">in</span><span class="csharp00"> </span>player<span class="csharp10">.</span>UnitsWithinRange<span class="csharp10">(</span><span class="csharp04">2</span><span class="csharp10">)</span><span class="csharp00"> </span><span class="csharp10">)</span><span class="csharp00">
</span><span class="csharp10">{</span><span class="csharp00">
    </span><span class="csharp05">if</span><span class="csharp10">(!</span>unit<span class="csharp10">.</span>IsType<span class="csharp10">(</span>Enemy<span class="csharp10">)</span><span class="csharp00"> </span><span class="csharp10">||</span><span class="csharp00"> </span><span class="csharp10">!</span>unit<span class="csharp10">.</span>IsType<span class="csharp10">(</span>Tank<span class="csharp10">))</span><span class="csharp00">
        </span><span class="csharp05">continue</span><span class="csharp10">;</span><span class="csharp00">

    </span>unit<span class="csharp10">.</span>Damage<span class="csharp10">(</span>5<span class="csharp10">);</span><span class="csharp00">
</span><span class="csharp10">}</span><span class="csharp00">
</span></pre>
<p><span style="text-decoration: underline;">Fluent Example:</span></p>
<pre class="csharpcode">player<span class="csharp10">.</span>UnitsWithinRange<span class="csharp10">(</span><span class="csharp04">2</span><span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Enemy<span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Tank<span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>DoDamage<span class="csharp10">(</span><span class="csharp04">5</span><span class="csharp10">);</span></pre>
<p>This fluent example closely matches the design document and is easier to read.  It also uses less language constructs like loops and conditions.  With Intellisense, designers are given a context sensitive list of operations they can perform.  Designers simply build up the expression that describes the original line in the game design document they are implementing.</p>
<p><strong>How to implement Fluent Interfaces </strong></p>
<p>Fluent interfaces are actually quite easy to implement.  Objects expose methods that return a reference to the object itself allowing method chaining.  The best way to describe this is by showing the implementation required for the examples above.</p>
<p>First, we create the object we will be working on (I’ve called it UnitsList in my examples).  This gives us the first part of the fluent call (Get.UnitsWithinRange(2)).</p>
<pre class="csharpcode"><span class="csharp05">public</span><span class="csharp00"> </span><span class="csharp05">class</span><span class="csharp00"> </span>ScriptObject<span class="csharp00">
</span><span class="csharp10">{</span><span class="csharp00">
    </span>UnitsList<span class="csharp00"> </span>UnitsWithinRange<span class="csharp10">(</span><span class="csharp05">int</span><span class="csharp00"> </span>range<span class="csharp10">)</span><span class="csharp00">
    </span><span class="csharp10">{</span><span class="csharp00">
        </span><span class="csharp05">return</span><span class="csharp00"> </span><span class="csharp05">new</span><span class="csharp00"> </span>UnitsList<span class="csharp10">(</span>range<span class="csharp10">);</span><span class="csharp00">
    </span><span class="csharp10">}</span><span class="csharp00">
</span><span class="csharp10">}</span><span class="csharp00">
</span></pre>
<p>The UnitsList object must have a set of methods that return references to the object itself allowing method chanining:</p>
<pre class="csharpcode"><span class="csharp05">public</span><span class="csharp00"> </span><span class="csharp05">class</span><span class="csharp00"> </span>UnitsList<span class="csharp00">
</span><span class="csharp10">{</span><span class="csharp00">
    </span><span class="csharp05">public</span><span class="csharp00"> </span>UnitsList<span class="csharp00"> </span>Where<span class="csharp10">(</span>UnitIs<span class="csharp00"> </span>condition<span class="csharp10">)</span><span class="csharp00">
    </span><span class="csharp10">{</span><span class="csharp00">
        </span><span class="csharp05">this</span><span class="csharp10">.</span>conditions<span class="csharp10">.</span>Add<span class="csharp10">(</span>condition<span class="csharp10">);</span><span class="csharp00">
        </span><span class="csharp05">return</span><span class="csharp00"> </span><span class="csharp05">this</span><span class="csharp10">;</span><span class="csharp00">
    </span><span class="csharp10">}</span></pre>
<p>The fluent expressions are terminated by returning void from a function.  This lets the designer know they have no more options and often that the actual operation will be performed.</p>
<pre class="csharpcode"><span class="csharp05">public</span><span class="csharp00"> </span><span class="csharp05">class</span><span class="csharp00"> </span>UnitsList<span class="csharp00">
</span><span class="csharp10">{</span><span class="csharp00">
    </span><span class="csharp05">public</span><span class="csharp00"> </span><span class="csharp05">void</span><span class="csharp00"> </span>DoDamage<span class="csharp10">(</span><span class="csharp05">int</span><span class="csharp00"> </span>damage<span class="csharp10">)</span><span class="csharp00">
    </span><span class="csharp10">{</span><span class="csharp00">
        </span><span class="csharp05">foreach</span><span class="csharp10">(</span><span class="csharp00"> </span>var<span class="csharp00"> </span>unit<span class="csharp00"> </span><span class="csharp05">in</span><span class="csharp00"> </span><span class="csharp05">this</span><span class="csharp10">.</span>mainUnit<span class="csharp10">.</span>UnitsWithinRange<span class="csharp10">(</span>range<span class="csharp10">)</span><span class="csharp00"> </span><span class="csharp10">)</span><span class="csharp00">
        </span><span class="csharp10">{</span><span class="csharp00">
            </span><span class="csharp05">if</span><span class="csharp10">(!</span>PassesConditions<span class="csharp10">(</span>unit<span class="csharp10">))</span><span class="csharp00">
                </span><span class="csharp05">continue</span><span class="csharp10">;</span><span class="csharp00">

            </span>unit<span class="csharp10">.</span>Damage<span class="csharp10">(</span>damage<span class="csharp10">);</span><span class="csharp00">
        </span><span class="csharp10">}</span><span class="csharp00">
    </span><span class="csharp10">}</span><span class="csharp00">

    </span><span class="csharp05">private</span><span class="csharp00"> </span><span class="csharp05">bool</span><span class="csharp00"> </span>PassesConditions<span class="csharp10">(</span>Unit<span class="csharp00"> </span>unit<span class="csharp10">)</span><span class="csharp00">
    </span><span class="csharp10">{</span><span class="csharp00">
        </span><span class="csharp05">foreach</span><span class="csharp10">(</span><span class="csharp00"> </span>var<span class="csharp00"> </span>condition<span class="csharp00"> </span><span class="csharp05">in</span><span class="csharp00"> </span>conditions<span class="csharp10">)</span><span class="csharp00">
        </span><span class="csharp10">{</span><span class="csharp00">
            </span><span class="csharp05">if</span><span class="csharp10">(!</span>unit<span class="csharp10">.</span>IsType<span class="csharp10">(</span>condition<span class="csharp10">))</span><span class="csharp00">
                </span><span class="csharp05">return</span><span class="csharp00"> </span><span class="csharp05">false</span><span class="csharp10">;</span><span class="csharp00">
        </span><span class="csharp10">}</span><span class="csharp00">
        </span><span class="csharp05">return</span><span class="csharp00"> </span><span class="csharp05">true</span><span class="csharp10">;</span><span class="csharp00">
    </span><span class="csharp10">}</span><span class="csharp00">
</span><span class="csharp10">}</span><span class="csharp00">
</span></pre>
<p>There are a couple of key things to notice:</p>
<ol>
<li>This last code example      looks a lot like the original standard example</li>
<li>A lot more “engine” code      is required to setup a fluent interface than a standard interface</li>
</ol>
<p>So, in effect, an extra layer of abstraction is being placed over the original code.  Rather than designers working on loops and conditions, they are calling (well named) methods.  This makes their life a lot easier and simplifies maintenance of their gameplay code.  It pushes the burden of maintenance down from the gameplay to the engine level and therefore on programmers, who are better suited to maintaining code.  If there is a change in the engine or game, this extra level of abstraction serves to buffer the designers and reduce the amount of code that needs to be written.</p>
<p><strong>Good Interface Design</strong></p>
<p>Care needs to be taken when designing the interfaces and exposing methods to the designers.  Rather than exposing all functions off a single object my recommendation is to define different objects for different situations.  The example provided starts with the player and retrieves a list of units around it.  Filters are then added before the final operation is performed on the resulting list.  By limiting the methods available to the designer to simple filters there is little risk of them making a mistake.  Also, the fact that the &#8220;DoDamage&#8221; function returns void stops them from chaining anything further.</p>
<p><strong>Other Syntaxes</strong></p>
<p>One small point is that designers can structure their fluent “sentences” in any way they please:</p>
<pre class="csharpcode">player<span class="csharp10">.</span>UnitsWithinRange<span class="csharp10">(</span><span class="csharp04">2</span><span class="csharp10">).</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Enemy<span class="csharp10">).</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Tank<span class="csharp10">).</span>DoDamage<span class="csharp10">(</span><span class="csharp04">5</span><span class="csharp10">);</span></pre>
<pre class="csharpcode">player<span class="csharp10">.</span>UnitsWithinRange<span class="csharp10">(</span><span class="csharp04">2</span><span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Enemy<span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>Where<span class="csharp10">(</span>UnitIs<span class="csharp10">.</span>Tank<span class="csharp10">)</span><span class="csharp00">
  </span><span class="csharp10">.</span>DoDamage<span class="csharp10">(</span><span class="csharp04">5</span><span class="csharp10">);</span></pre>
<p>There is no difference between the above two examples.  It’s simply a matter of coding style preferred by the writer.</p>
<p><strong>Conclusion</strong></p>
<p>What do you think of Fluent Interfaces?  Have you used a similar technique before?  Do you think the extra engine code and maintenance is too much hassle for the gain in clarity to designers?</p>
<p>As an experiment, try exposing a small set of functionality through a fluent interface and see whether your designers like working with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/fluent-game-design-with-fluent-interfaces/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Virgin Play Testers</title>
		<link>http://www.doolwind.com/blog/virgin-play-testers/</link>
		<comments>http://www.doolwind.com/blog/virgin-play-testers/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 12:21:09 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Game Designer]]></category>
		<category><![CDATA[Play Testing]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=403</guid>
		<description><![CDATA[How many virgins have played your game?  Do you make sure they&#8217;re virgins before they play?  You need at least one virgin per week to keep you on track and you should be filming them!

What are virgin play testers?
A virgin is anyone who has never played nor seen someone play your game before.  That second [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/virginplaytester.jpg"><img class="alignright" title="Virgin Play Tester" src="http://www.doolwind.com/images/blog/virginplaytester.jpg" alt="" width="131" height="109" /></a>How many virgins have played your game?  Do you make sure they&#8217;re virgins before they play?  You need at least one virgin per week to keep you on track and you should be filming them!</p>
<p><span id="more-403"></span></p>
<p><strong><span style="text-decoration: underline;">What are virgin play testers?</span></strong></p>
<p>A virgin is anyone who has never played nor seen someone play your game before.  That second part is important.  If Bob is watching Jim play your game then both Bob and Jim are no longer virgins.</p>
<p>They are equivalent to someone downloading the demo of your game and firing it up for the first time.  They should come from your target audience and preferably be scattered throughout this demographic.</p>
<p><strong><span style="text-decoration: underline;">Why do you need virgin play testers?</span></strong></p>
<p>People have a short attention span these days.  You only have minutes to convince someone your game is worth buying.  Watching a virgin play your game lets you watch the experiences every player will go through when they first play it.  This is absolutely vital if you want to make your game playable and get a conversion.</p>
<p>Gladwell in <a href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0316017922">Outliers</a> has the 10,000 hour rule: the time it takes to become proficient in an activity.  I have the 1,000 hour rule.  <span class="pullquote pqLeft">After 1,000 hours working on (and playing) your game you can&#8217;t objectively determine its quality</span>. The only caveat to this rule is that after a year of not having anything to do with the game your virgin status is reset.  This doesn’t really help in the world of game development as you can rarely take a year off.  It’s much easier to just go out and find virgins. The bottom line is that the only way you can experience what your game is like for a virgin is watching them play.</p>
<p><strong><span style="text-decoration: underline;">What’s the best process?</span></strong></p>
<p>Here are some simple rules to help you:</p>
<ul>
<li><strong>Video tape everything</strong> – If possible, try and get the game and their hands in the shot at the same time.  This lets you see what buttons/sticks they are pressing at different stages, particularly if they get stuck<strong></strong></li>
<li><strong>Don’t help</strong> – If you have to help them your game needs some major changes.  Imagine that same person sitting at home without you there; they will most likely give up on the game.<strong></strong></li>
<li><strong>Get them to say what they are thinking</strong> – The best way to find out when they are stuck, bored, excited, surprised or confused is to get them to tell you what they are thinking as they play through the game<strong></strong></li>
<li><strong>Don’t dismiss anything</strong> – No matter how trivial a comment is you need to take it on board.  Even if the person dismisses their comment later you should take notice of it.  On a number of occasions people would say a particular part of the game wasn’t a problem after having it explained and it’s easy to then ignore that issue.<strong></strong></li>
<li><strong>Fix the problems – </strong>This is vital.  There’s no point getting virgins in to play the game if you don’t fix problems they find.  This might seem like a simple idea, but it’s important you keep a record of every issue and resolve them.<strong></strong></li>
</ul>
<p><strong><span style="text-decoration: underline;">Where can you find virgin play testers?</span></strong></p>
<p>There are 4 main places you can find virgins to play test your game:</p>
<ol>
<li><strong>Within your company</strong> – If you work for a large company, start internally.  This reduces NDA and other issues, helps build community within the company and encourages other teams to start virgin play testing if they don’t already</li>
<li><strong>Friends and family</strong> – The next best step is people you know and trust.  You’ll still want them to sign an NDA, but there’s less chance they’ll break it.  This is also a great way to catch up with your partner who you haven’t seen since before crunch started.</li>
<li><strong>Local game development education institutions</strong> – Go to your local game education centre and put up a sign on the notice board reading “Get your name in the credits of a game, right now!”  I guarantee* at least 90% of them will jump at the opportunity.  This also has the secondary benefits of letting you scope out talent and you might even get some good suggestions for your game.</li>
<li><strong>Everyone else</strong> – This is the most important and largest group.  Grab random people off the street or from your local video game shop.  You want to be taking a large cross reference of people here.  It’s also a good idea to find some people outside your target audience.  You may find the game appeals to a larger audience, or that making some small tweaks will broaden your audience substantially.  Free beer and/or pizza is usually payment enough for people to sit and play games for a few hours.<strong></strong></li>
</ol>
<p>*Not a guarantee</p>
<p><strong><span style="text-decoration: underline;">Conclusion</span></strong></p>
<p>I’d like to say a big thanks to <a href="http://www.digitalcream.com.au/blog/">Matt Ford</a> for a lot of the ideas from this post.</p>
<p>I was blown away by how important it was to watch virgins playing our game each and every week.  It does take time and resources, but it’s well worth the effort.  It helps keep you on track and focussing on the initial user experience, the most important part for making the sale.</p>
<p>Go out right now, find someone that hasn’t played your game before, sit them down and watch them play.  I guarantee* you’ll learn something about your game that will make it better.</p>
<p>*This one is a guarantee (unless you’re a lawyer)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/virgin-play-testers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Where Is Virtual Reality?</title>
		<link>http://www.doolwind.com/blog/where-is-virtual-reality/</link>
		<comments>http://www.doolwind.com/blog/where-is-virtual-reality/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 23:51:35 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Virtual Reality]]></category>
		<category><![CDATA[VR]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=392</guid>
		<description><![CDATA[Have you ever used Virtual Reality?  Whether the big cumbersome headsets in the early 90’s or the sleeker more refined technology of today, chances are you’ve encountered virtual reality in your travels.  It was touted as the “next big thing” in computers and was expected to be in every home but it never eventuated.  Today [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/virtual_reality.jpg"><img class="alignright" title="Virtual Reality" src="http://www.doolwind.com/images/blog/virtual_reality.jpg" alt="" width="168" height="126" /></a>Have you ever used Virtual Reality?  Whether the big cumbersome headsets in the early 90’s or the sleeker more refined technology of today, chances are you’ve encountered virtual reality in your travels.  It was touted as the “next big thing” in computers and was expected to be in every home but it never eventuated.  Today I’m going to discuss what virtual reality means for gamers and game developers.</p>
<p><span id="more-392"></span></p>
<p><strong>Introduction</strong></p>
<p>I first used virtual reality in 1995 while visiting SegaWorld in London.  They had a ride you sat in, donned a virtual reality headset and furiously pressed buttons to win or lose a battle (along with 20 or so other people).  I was so excited to finally get to use virtual reality that I took a wrong turn getting on the ride and fell off into the hydraulics.  I’m not sure if it was the amazing 3D, head tracking or loss of blood from my injuries but I had an awakening experience.  I knew that in the future, we’d all be playing games using virtual reality, and the world would be a better place.  Unfortunately, this never happened, but is it too late?</p>
<p><strong>Should it be the “Next Big Thing”?</strong></p>
<p>VR has a number of key features that make it the obvious path for game development in the future:</p>
<ul>
<li><strong>Full 3D Immersion</strong> – rather      than looking at the game world sitting on a monitor that’s sitting in your      room you are actually in the world.       Even 2D games take up your entire peripheral vision making them      immersive.</li>
<li><strong>True 3D (for free)</strong> –      Having two images allows a true stereoscopic display of the 3D world</li>
<li><strong>Head tracking</strong> – Most VR      headsets have built in head tracking which adds to the immersion.  Now you can look at the pre-pubescent      kid in counter strike before he headshots you.</li>
<li><strong>Look cool</strong> – Why wear nerdy      3D glasses when you can look like this:</li>
</ul>
<p style="text-align: center;"><a href="http://www.doolwind.com/images/blog/virtual_reality_helmet.jpg"><img class="aligncenter" title="Virtual Reality Helmet" src="http://www.doolwind.com/images/blog/virtual_reality_helmet.jpg" alt="" width="281" height="201" /></a></p>
<p>It’s best suited to the following games:</p>
<ul>
<li>Flight Sims</li>
<li>First-Person Shooters</li>
<li>Racing Games</li>
<li>Sport Games</li>
</ul>
<p>VR also opens up the possibility of relaxation and full emersion games that aren’t possible with regular monitors.  This might sound a little hippie like, but I can see some great opportunities in games for children in hospitals and rehabilitation from injuries.</p>
<p>In my eyes, these benefits make it the ideal candidate for game development in the future.  The current bout of <a href="http://edition.cnn.com/2010/SHOWBIZ/Movies/01/11/avatar.movie.blues/">depression</a> leading from the immersion experienced in the “Avatar” movie is proof that even 3D movies are enough to have a greater impact on people (and that some people are fairly weak).</p>
<p>3D movies bring up an interesting stepping stone towards VR.  Monitors are now available with high enough refresh rates that 3D glasses can be used to present a 3D image on the screen at 50Hz.  This might be an easier sell now that 3D movies are becoming more mainstream.  I find it interesting that some people are happy to accept 3D movies as the “next big thing” while dismissing virtual reality as a thing of the past, despite the fact it has much greater qualities.<strong></strong></p>
<p><strong>So why hasn’t Virtual Reality taken off?</strong></p>
<p>There are a few main reasons why Virtual Reality is still not in the mainstream of gaming:</p>
<ul>
<li><strong>Price</strong> – With the <a href="https://e-store.emagin.com/miva/merchant.mvc?Screen=PROD&amp;Store_Code=E&amp;Product_Code=Z3V&amp;Category_Code=">average      headset</a> coming in at $1,500USD, this is a lot for an 800&#215;600      display by anyone’s standards.       While it is comparable to some larger end monitors it’s still too      high for the average gamer.  If the      price of headsets can come down below $750USD and resolutions can be at      least 1024&#215;768 I expect a much larger uptake.  That’s certainly the sweet spot for      price and resolution for me.</li>
<li><strong>Vertigo/Eye Strain</strong> – Some people      have issues focussing on the screens in the virtual reality headset and      others suffer from eye strain.  Most      people should get used to this over time however it might simply mean some      people never adopt the technology</li>
<li><strong>Lack of interest</strong> – People just      got bored with the idea.  For so      long we kept hearing about how VR was going to change the world and it      never did.  A great example of this is the fact that searches for “Virtual Reality” are <a href="http://www.google.com/insights/search/#q=virtual%20reality&amp;cmpt=q">down 80%</a> since 2004!</li>
</ul>
<p><strong>Any other crazy thoughts?</strong></p>
<p>What would a blog post from me be without a reference to Microsoft?  The ultimate way for virtual reality to take off is for Microsoft to develop the headsets.  They make awesome peripherals, have the money to back it and have the console to go along with it.  Having both Xbox and PC support virtual reality would be better for gamers, game developers and give Microsoft more of an edge over the competition.</p>
<p><strong>What do you think?</strong></p>
<p>Have you used Virtual Reality before?  Did you like it?  How much would you be willing to pay and what resolution do you think should be the minimum supported?  Many people I’ve spoken to about Virtual Reality think it’s dead, what do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/where-is-virtual-reality/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Building A Strong Indie Game Development Team</title>
		<link>http://www.doolwind.com/blog/building-a-strong-indie-game-development-team/</link>
		<comments>http://www.doolwind.com/blog/building-a-strong-indie-game-development-team/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 10:06:51 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Indie Game Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=286</guid>
		<description><![CDATA[Are you looking to set up an independent game development team?  You’ll need a team that covers all areas of game development including programming, art, design, sound, project management and business.  You need to pick the right people that can work together for months or even years.  Below are some tips for putting the right [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/idsoftware.jpg"><img class="alignright" title="Id Software" src="http://www.doolwind.com/images/blog/idsoftware.jpg" alt="" width="195" height="116" /></a>Are you looking to set up an independent game development team?  You’ll need a team that covers all areas of game development including programming, art, design, sound, project management and business.  You need to pick the right people that can work together for months or even years.  Below are some tips for putting the right team together to increase your chances of success.</p>
<p><span id="more-286"></span></p>
<p><strong><span style="text-decoration: underline;">Roles</span></strong><strong></strong></p>
<p>Game development involves a number of common roles as well as some overlooked ones.  Individual team members can handle multiple roles on smaller teams and some roles can be shared by more than one person.</p>
<p><strong>Programming</strong></p>
<p>Programming on an independent team is about more than just game development.  The programming department will be responsible for tools and website development.  They will also have to handle the creation of the installer.</p>
<p><strong>Design</strong></p>
<p>Design is one of the great areas it pays to share ownership.  The designer has the final say on decisions and is the go to if people are unsure.  They also maintain the game design document to unify the team.  A wiki is a great way to collaborate on the design document.</p>
<p><strong>Art</strong></p>
<p>The art department is responsible for not just game art but also creation of marketing material and web design.  Artists need to work closely with the programmers to make sure technical requirements are met and to drive the requirements for tools.  They also need to collaborate with design to make sure the look and feel of the game is met.</p>
<p><strong>Sound</strong></p>
<p>Often overlooked, sound is vitally important to give atmosphere to the game.  Sound should not be left to the last minute as it will feel disconnected and won’t add as much to the game.  The programmers should build the infrastructure for the sound early to allow experimentation.</p>
<p><strong>Project Management</strong></p>
<p>Project managers are responsible for the velocity of the team (how much they are achieving each milestone).  They need to be aware of when team members are falling behind and make sure everyone is performing their duties.  Visibility is the key to making sure everyone on the team is aware of their current goals and deadlines.</p>
<p><strong>QA</strong></p>
<p>Without QA the game will be unplayable.  QA is another area that is good to share across the whole team.  The team should be playing the game constantly and fixing bugs as they go.  It is preferable to have non-programmers doing QA as it is easy for them to overlook issues in their own code.  Sharing the games with friends and having a beta-testing period is a great way to share the load.</p>
<p><strong>Business</strong></p>
<p>Without someone managing the business side of game development, you may as well be making the game just for fun.  One team member needs to be responsible for making sure the game will be profitable.  The entire team needs to be mindful of the fact they are making a game for profit, not just fun.  Business includes marketing, sales, business plan writing and possibly seeking funding.  The team needs a business plan covering:</p>
<ul>
<li><strong>Marketing Strategy</strong> – How will people find out about your game?  How will you sell the game and how much will it cost?</li>
<li><strong>Cash flow Summary</strong> – What are the expenses of the team and how will you afford to keep the business running?</li>
<li><strong>Economic Assessment</strong> – How much do you expect to make from the game, based on similar games</li>
</ul>
<p><strong><span style="text-decoration: underline;">Co-Location</span></strong></p>
<p>If possible, the entire team should work together in the one building.  This lets the team quickly test ideas, keep each other motivated, play-test the game together and watch each other play.  Renting an office is expensive and it’s important to keep costs as low as possible.  Get creative, work together on laptops in a coffee shop, move in together, or work in each other garages or basements.</p>
<p><strong><span style="text-decoration: underline;">Workloads</span></strong></p>
<p>Depending on the situation each team member may have differing hours they can devote to the project.  Each team member’s level of commitment should be discussed and decided up front.  The closer these levels can be the better.  Having a large imbalance in working hours can lead to resentment and hostility between team members.  Some ways of evening out imbalances include:</p>
<ul>
<li>Larger share/profit ownership</li>
<li>More creative control over project</li>
</ul>
<p><strong><span style="text-decoration: underline;">Personalities</span></strong></p>
<p><span class="pullquote pqRight">Personality trumps ability on indie teams</span>.  As with most high-intelligence professions, game developers often have strong personalities.  While these personalities might be annoying at a large game studio, it can be the death of a small indie team.  Each developer needs to put the game and the team ahead of their own agenda.  When possible a team should be formed with people that have worked together previously.</p>
<p><strong><span style="text-decoration: underline;">Conflict</span></strong></p>
<p>Every team has conflict.  Conflict can be minimized having a unified goal.  The best option is to have someone in a position of power to settle disputes.  This person must be trusted by everyone not to push their own agenda.  Some solutions to solving conflict in your team:</p>
<ul>
<li><strong>Talk it through</strong> – Open, continuous conversation is the best way to solve problems</li>
<li><strong>Compromise</strong> – The larger the team, the harder it is to keep everyone happy.  Compromise is a necessity.  Ultimately the team is in it together and need to compromise to solve disputes.</li>
<li><strong>Give everyone a voice – </strong>Voting is a great way to solve disputes.  The team must agree that a voting mechanism will be used and respected up front.<strong></strong></li>
</ul>
<p><strong><span style="text-decoration: underline;">Outsourcing vs In-house</span></strong></p>
<p>Many Indie companies have little money, necessitating all work is done in-house.  Outsourcing gives a reliable quality for a fixed price.  Some areas worth outsourcing include:</p>
<ul>
<li><strong>Game Engines</strong> – shared by the whole team, they can save a lot of development time</li>
<li><strong>Sound Libraries</strong> – can be used as building blocks to create sounds for the game</li>
<li><strong>Art</strong> – Art is often the critical path in development.  Outsourcing may save time and money</li>
</ul>
<p><strong><span style="text-decoration: underline;">Conclusion</span></strong></p>
<p>This should set you up on the path to creating a solid team for your next indie game project.  What are your experiences with building a team?  Where have you succeeded and failed? Do you have any recommendations for others who are building their team?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/building-a-strong-indie-game-development-team/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Top 10 Software Development Books</title>
		<link>http://www.doolwind.com/blog/top-10-software-development-books/</link>
		<comments>http://www.doolwind.com/blog/top-10-software-development-books/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 10:40:30 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Softare Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=277</guid>
		<description><![CDATA[Good software development books are hard to find.  I&#8217;m always being asked which books I recommend so I thought I&#8217;d compile a list of my favourites.  These are books every software developer should read.  All of these books have made me a better programmer.  The list covers everything from the basics [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/top10books/Top10SoftwareDevelopmentBooks.jpg"><img class="alignright" title="Top 10 Software Development Books" src="http://www.doolwind.com/images/blog/top10books/Top10SoftwareDevelopmentBooks.jpg" alt="" width="82" height="103" /></a>Good software development books are hard to find.  I&#8217;m always being asked which books I recommend so I thought I&#8217;d compile a list of my favourites.  These are books every software developer should read.  All of these books have made me a better programmer.  The list covers everything from the basics of coding to agile development and architectural software development.</p>
<p><span id="more-277"></span></p>
<p><strong>The Pragmatic Programmer: From Journeyman to Master</strong><br />
<a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X"><img src="http://www.doolwind.com/images/blog/top10books/ThePragmaticProgrammer.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=020161622X" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Code Complete</strong><br />
<a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670"><img src="http://www.doolwind.com/images/blog/top10books/CodeComplete.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0735619670" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Rapid Development: Taming Wild Software Schedules</strong><br />
<a href="http://www.amazon.com/gp/product/1556159005?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1556159005"><img src="http://www.doolwind.com/images/blog/top10books/RapidDevelopment.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=1556159005" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Agile Software Development, Principles, Patterns, and Practices</strong><br />
<a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0135974445"><img src="http://www.doolwind.com/images/blog/top10books/AgileSoftwareDevelopment.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0135974445" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Refactoring: Improving the Design of Existing Code</strong><br />
<a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201485672"><img src="http://www.doolwind.com/images/blog/top10books/Refactoring.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201485672" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Peopleware: Productive Projects and Teams</strong><br />
<a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633439"><img src="http://www.doolwind.com/images/blog/top10books/Peopleware.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0932633439" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>The Mythical Man-Month: Essays on Software Engineering</strong><br />
<a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201835959"><img src="http://www.doolwind.com/images/blog/top10books/TheMythicalManMonth.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201835959" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Design Patterns: Elements of Reusable Object-Oriented Software</strong><br />
<a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201633612"><img src="http://www.doolwind.com/images/blog/top10books/DesignPatterns.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201633612" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Software Estimation: Demystifying the Black Art</strong><br />
<a href="http://www.amazon.com/gp/product/0735605351?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735605351"><img src="http://www.doolwind.com/images/blog/top10books/SoftwareEstimation.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0735605351" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Patterns of Enterprise Application Architecture</strong><br />
<a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321127420"><img src="http://www.doolwind.com/images/blog/top10books/PatternsOfEnterpriseApplicationArchitecture.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0321127420" border="0" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/top-10-software-development-books/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How To Make A Game (For Free In XNA)</title>
		<link>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/</link>
		<comments>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 20:48:52 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Xbox 360]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=273</guid>
		<description><![CDATA[Do you want to learn how to make your own computer games?  Not sure where to start?  This step-by-step tutorial shows you how to create your own games for free using XNA.  I’ve been asked by a number of people what the best route to take when learning to develop games.  The following tutorial will [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/xna.jpg"><img class="alignright" title="XNA" src="http://www.doolwind.com/images/blog/xna.jpg" alt="" width="169" height="98" /></a>Do you want to learn how to make your own computer games?  Not sure where to start?  This step-by-step tutorial shows you how to create your own games for free using XNA.  I’ve been asked by a number of people what the best route to take when learning to develop games.  The following tutorial will give you a good start towards creating your first few games for PC and Xbox 360.  I cover the software you’ll need, a list of tutorial both in C# and XNA and other helpful links.</p>
<p><span id="more-273"></span></p>
<p><strong>Software</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; ">1. Download Visual Studio 2008 Express &#8211; <a href="http://bit.ly/VCSExp">http://bit.ly/VCSExp</a></span></strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; "><a href="http://bit.ly/VCSExp"></a>2. Download XNA Game Studio 3.1 &#8211; <a href="http://bit.ly/XNAGS31">http://bit.ly/XNAGS31</a></span></strong></p>
<p><strong>Learning C#</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; ">3. Read these C# tutorials</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal; ">a. C# Station Tutorial &#8211; <a href="http://bit.ly/CSTut1">http://bit.ly/CSTut1</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal; "><a href="http://bit.ly/CSTut1"></a>b. C# WikiBooks &#8211; <a href="http://bit.ly/CSWiki">http://bit.ly/CSWiki</a></span></strong></p>
<p><strong>Learning XNA</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal;">4. Read these XNA tutorials</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;">a. Introduction &#8211; <a href="http://bit.ly/XNATut1">http://bit.ly/XNATut1</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://bit.ly/XNATut1"></a>b. 2D Introduction &#8211; <a href="http://bit.ly/XNATut2D">http://bit.ly/XNATut2D</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://bit.ly/XNATut2D"></a>c. 3D Introduction &#8211; <a href="http://bit.ly/XNATut3D">http://bit.ly/XNATut3D</a></span></strong></p>
<p style="padding-left: 30px;">5.<strong> <span style="font-weight: normal;">Look at these starter kits &#8211; <a href="http://bit.ly/XNAKit">http://bit.ly/XNAKit</a></span></strong></p>
<p><strong>Other Links</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal;">6. Visit the following for more information on game development</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;">a. Gamedev.net &#8211; <a href="http://www.gamedev.net/">http://www.gamedev.net/</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://www.gamedev.net/"></a>b. Gamasutra &#8211; <a href="http://gamasutra.com/">http://gamasutra.com/</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://gamasutra.com/"></a>c. Indie Gamer Forums &#8211; <a href="http://forums.indiegamer.com/">http://forums.indiegamer.com/</a></span></strong></p>
<p><strong>What should you create?</strong></p>
<p>I&#8217;ve found the best way to learn game development is by creating a full game.  Exactly what game you create depends on what you want to get out of game development.  There are a number of paths I commonly see people taking:</p>
<ul>
<li><strong>Becoming a game programmer</strong> &#8211; The best route here is to take an existing game like Pong, Space Invaders or Mario and recreating it.  The game design done is already complete, allowing you to focus on learning the skills required to code the game</li>
<li><strong>Becoming a game designer</strong> &#8211; Rather than recreating an existing game, come up with a new, simpler design.</li>
<li><strong>Getting a job at a particular game company </strong>- Before you begin your new game, you should find out what technology the company is using.  You are much more likely to be hired by them if you are experienced in their technology suite.  If you&#8217;re unsure of what they use, ask them.  Game companies are always looking for good talent and they&#8217;ll be happy to share the technologies they use with you.</li>
</ul>
<p><strong>Want more?</strong></p>
<p>I’d like this list to become a comprehensive, step-by-step introduction to game development that takes developers from zero experience to creating their own 3D (or 2D) games.  If you get to a point where you’re stuck and don’t know what to do next, please email me and I’ll help you fill in the blanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pragmatic Game Development</title>
		<link>http://www.doolwind.com/blog/pragmatic-game-development/</link>
		<comments>http://www.doolwind.com/blog/pragmatic-game-development/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 21:11:07 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Pragmatic]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=269</guid>
		<description><![CDATA[Games take a lot of time and money to create.  Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.  Developers need to become more pragmatic in the way they developer their games.  This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/pragmatic.jpg"><img class="alignright" title="Pragmatic" src="http://www.doolwind.com/images/blog/pragmatic.jpg" alt="" width="173" height="130" /></a>Games take a lot of time and money to create.  Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.  Developers need to become more pragmatic in the way they developer their games.  This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the shortest time possible.</p>
<p><span id="more-269"></span></p>
<p><strong>Leverage existing technology</strong></p>
<p>Game developers have a bad habit of re-inventing the wheel.  The easiest way to run a game into the ground is to spend all our time creating new technology that already exists in the world.  We need to swallow our pride and use technology someone else has spent time and money creating.  Our core focus is making games, not game technology.  Let the experts handle the technology for us.</p>
<p>For programmers, there are countless engines we can take advantage of from Unity3D to Torque to UDK.  Project managers have access to countless tools to streamline the management process and keep them focussed on running a good team.</p>
<p>Learn to spend money where it&#8217;s needed.  Development time costs money.  If a problem has an off-the-shelf solution, we compare the cost of buying this to developing the solution in-house.  Nine times out of ten, it will be far cheaper to go with the former.</p>
<p><strong>Aim Small</strong></p>
<p>Projects always grow over time, sometimes uncontrollably.  We aim to start small, and keep a keen eye out for features that can be cut, checking the cost-to-benefit ratio of everything we do.  Ordering features by this ratio and cutting features from the bottom of the list when time runs out.</p>
<p>Feature creep is a killer on projects of all sizes.  By keeping milestones short we minimize the opportunities for us to diverge too far from our main goal.  If a feature grows in complexity beyond the scope of the initial design we take a step back and re-evaluate whether that feature is necessary given the new estimate on how long it will take to complete.</p>
<p><strong>Build what you need, not what you think you need</strong></p>
<p>Too many developers spend months working on the technology for their next game before starting the game itself.  Sometimes, they never make it to developing the game!  The most pragmatic solution to this is using someone else&#8217;s engine.  However, if we must create our own technology then we only create what we need right now.</p>
<p>A trap many developers fall into is thinking &#8220;we&#8217;ll be using this feature in the next five games, so it&#8217;s worth putting a lot of time into it now&#8221;.  If we do this for all our features, we won&#8217;t create our first game, let alone the next five.  My rule is that I don&#8217;t have enough information to make a generalised solution until I&#8217;ve implemented it at least a couple of times.</p>
<p>A great way of achieving these goals is adopting an agile development practice.  We are using Scrum for our current game which helps to keep us focussed on creating just enough to reach each sprint/milestone.</p>
<p><strong>It&#8217;s done when people are happy to pay for it</strong></p>
<p>A game is never going to be perfect.  I&#8217;m not advocating the release of buggy, broken games, but we do need to be practical when deciding whether our game is ready for release.  Creating constant playable builds is the best way to make sure the game is always fun and always meets a pre-determined quality bar set by the team.</p>
<p>It&#8217;s easy to fall into the trap of not wanting to release the game until it&#8217;s perfect.  After working on a game for months or years, it feels like your baby and you don&#8217;t want it out in the real world before it&#8217;s ready.  Being pragmatic means making the tough decision of deciding when the time is right to release the game even if you&#8217;re not 100% happy with it.</p>
<p>It is often better to cut a feature to give time to polish the existing gameplay which leads me to my next point&#8230;</p>
<p><strong>&#8220;We&#8217;ll do that in version 2&#8243;</strong></p>
<p>Release early and release often.  The best way to break the hit-driven nature of the games industry is to break the usual tradition of a big release with minimal updates after.  Plan to give away free (or cheap) &#8220;expansions&#8221; of core gameplay pushing the development of these features back until after initial release.  This has a number of key benefits:</p>
<ul>
<li>Begin to earn revenue sooner</li>
<li>Drive the initial cost of the game down by      releasing additional content in a paid or subscription format (e.g. DLC, in-game      assets)</li>
<li>Valuable feedback on the direction to take the      game</li>
<li>Focus on the bare minimum set of features to      sell the game, minimizing feature creep</li>
<li>Form a closer relationship with gamers by      giving them constant updates</li>
</ul>
<p><strong>Use the highest level of abstraction possible</strong></p>
<p>The higher the level of abstraction, the more time can be spent working on the game, rather than working on technology.  We are happy to give up some of the control over run-time performance for an increase in development speed.  Programmers can use a programming language like C# allowing them to spend time making a fun game, rather than managing memory and resources.  Artists can use a tool like ZBrush to create good looking models more easily and quickly.<strong></strong></p>
<p><strong>Automate</strong></p>
<p>Any repetitive day-to-day tasks should be automated by technology.  From build creation to the art pipeline.  We keep our time focussed on making a better game, not performing menial, repetitive tasks.  Programmers need to get in the mindset of spending a few hours per week working on tools to make everyone&#8217;s life better.  A programmer spending a few hours adding a new tool or updating an existing one can save weeks of work for the rest of the team.  Artists can learn batch operations in 3DSMax and Photoshop to help this process</p>
<p><strong>Conclusion</strong></p>
<p>This gives an insight into the ways we are being pragmatic in the development of our game.  By constantly focussing on the final product we make sure our time is spent on the most important tasks at all time.</p>
<p>How pragmatic are you in game development?  Do you have any other tips for minimizing cost and time?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/pragmatic-game-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using C# For a Commercial Game</title>
		<link>http://www.doolwind.com/blog/using-csharp-for-a-commercial-game/</link>
		<comments>http://www.doolwind.com/blog/using-csharp-for-a-commercial-game/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 03:27:13 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Game Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Scripting Language]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=260</guid>
		<description><![CDATA[Does the title of this article make you cringe?  People have mixed feelings when it comes to C# and the .NET framework.  Just like many hardcore game developers 10 years ago swore that games should only be made in straight C, many developers today say that C++ is the only way to go.  This article [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/csharpcommercial.jpg"><img class="alignright" title="C# Commercial" src="http://www.doolwind.com/images/blog/csharpcommercial.jpg" alt="" width="109" height="82" /></a>Does the title of this article make you cringe?  People have mixed feelings when it comes to C# and the .NET framework.  Just like many hardcore game developers 10 years ago swore that games should only be made in straight C, many developers today say that C++ is the only way to go.  This article outlines my reasoning for using C# for a commercial game on PC.</p>
<p><span id="more-260"></span></p>
<p><strong>Rapid Application Development</strong></p>
<p>The primary reason for using C# is because coding in it is more productive than any other language I&#8217;ve used.  Language features like interfaces, generics and delegates make it a cleaner language than C++.  Development practices such as unit testing and dependency injection are also easier to use in C#.  This clarity translates to more readable code and less bugs, particularly when working with a larger or younger team of developers.</p>
<p>The second productivity gain comes from having access to the .NET framework.  From its XML handling for configuration, to built-in math libraries, many of the core functions you can think of are taken care of.  This saves you writing the code yourself and lets a reliable, tested framework do the heavy lifting in areas you don&#8217;t want to spend your time.</p>
<p>C# lets you focus on making a game rather than writing an engine, or learning someone else&#8217;s engine.</p>
<p><strong>Unified Code &#8211; Client, Server, Tools, Scripting</strong></p>
<ul>
<li><strong>Server</strong> &#8211; I&#8217;m writing the server      architecture (matchmaking, leaderboard, etc) in ASP.NET and C#.  This lets me share libraries between the      client and server and makes calling web services from the client a breeze.</li>
<li><strong>Tools</strong> &#8211; All our tools are also      written in C#.  This means that our      tools can have rendering within them, can reuse libraries and simplifies      the creation of in-game tools.</li>
<li><strong>Scripting &#8211; </strong>As I&#8217;ve mentioned in a <a href="http://www.doolwind.com/blog/why-you-should-use-csharp-for-your-scripting-language/">previous article</a>, I&#8217;m using C# for the scripting      language in our game.</li>
</ul>
<p><strong>Better Software Development</strong></p>
<p>C# supports better software development practices in a number of key ways:</p>
<ul>
<li><strong>Refactoring      Tools</strong> &#8211;      Visual Studio has great refactoring support such as renaming identifiers      and extracting methods &amp; interfaces.</li>
<li><strong>Separation of      Concerns</strong> &#8211;      Splitting a project into separate .dll&#8217;s is trivial in C#.  This helps with maintainability and encapsulation      of code and encourages good separation of concerns.</li>
<li><strong>Unit Testing</strong> &#8211; C# has great support for      unit testing through NUnit or MSTest.       As I&#8217;ve <a href="http://www.doolwind.com/blog/test-driven-game-development/">previously discussed</a>, unit      testing fits perfectly in certain areas of game development.  The easier unit testing is to achieve,      the more people are likely to adopt it.</li>
</ul>
<p><strong>In-Game Web Browser</strong></p>
<p>As part of the game engine we are developing we decided all interaction with the server for matchmaking would be through http/html.  This reduces the need for creating such a complex in-game UI system and simplifies communication with the server.  The .NET web browser control is extremely easy to use and communication between the browser and host application (the game) is a simple.</p>
<p><strong>Run-time isn&#8217;t too large</strong></p>
<p>I&#8217;m currently targeting the .NET 2 framework.  This put&#8217;s the footprint at around 20MB.  The latest .NET frameworks (3.5 and 4) both have a &#8220;client profile&#8221;.  This is a subset of the .NET framework that comes in at about 30MB.  My plan is to use the .NET 4 client profile once it is released as it gives me access to all the latest language features (Linq, lambda expressions, dynamic objects, etc).  MS is <a href="http://blogs.msdn.com/jgoldb/">currently planning</a> to make .NET 4 client profile a windows update meaning the .NET framework will finally become (almost) ubiquitous among PC&#8217;s running windows.</p>
<p><strong>Negatives</strong></p>
<p>There are obvious drawbacks to using C# for a commercial game engine which we took into consideration when making our decisions.</p>
<ul>
<li><strong>Not Cross      Platform</strong> &#8211;      While engines like Unity have proven that C# can run on multiple      platforms, this does not occur out of the box.  As we&#8217;re targeting PC&#8217;s exclusively for      our first release this was not a problem.</li>
<li><strong>Xbox run-time      not great</strong> &#8211;      C# can run on the Xbox as part of XNA game studio, however the run-time      performance isn&#8217;t great.  Garbage      collection is a particular problem which requires refactoring code to      achieve acceptable frame rates.<strong></strong></li>
<li><strong>Harder to use      C++ libraries</strong> &#8211; Linking to straight C++ (non-COM) libraries is not trivial like it is      connecting to other .NET libraries.       Extra time is required if there is a requirement to use existing      libraries such as RakNet.<strong></strong></li>
<li><strong>Some performance      concerns</strong> &#8211; C#      does have some performance concerns with garbage collection and certain      double math operations.  However the      algorithmic gains received from working with such a great language outweigh      the small performance issues in certain areas.  As with any language, bad code will run      slow.<strong></strong></li>
</ul>
<p><strong>Conclusion</strong></p>
<p>C# is a great language.  I thoroughly enjoy coding for it and I find it makes me more productive when creating games.  I plan to release my MVC engine in the future as an open source project.  Until then, I&#8217;m continuing to develop our engine and I&#8217;ll keep you up to date with the progress.</p>
<p>For reference, here are a couple of commercial games using C#:</p>
<p><strong>Arena Wars</strong> -<a href=" http://www.arenawars.net"> http://www.arenawars.net</a><strong></strong></p>
<p><strong>AI War Fleet Command</strong> &#8211; <a href="http://www.arcengames.com/aiwar_features.php">http://www.arcengames.com/aiwar_features.php</a></p>
<p><strong>Sacraboar</strong> &#8211; <a href="http://www.sacraboar.com">http://www.sacraboar.com</a></p>
<p>Have you used C# for game development?  Are you sick of chasing memory leaks and crashes in your C++ applications?  Do you think game developers will move on from C++ now or in the future?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/using-csharp-for-a-commercial-game/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
