<?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>natewm.com &#187; python</title>
	<atom:link href="http://natewm.com/blog/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://natewm.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 26 Jul 2010 19:43:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Simple Recursive Maze</title>
		<link>http://natewm.com/blog/2010/07/26/simple-recursive-maze/</link>
		<comments>http://natewm.com/blog/2010/07/26/simple-recursive-maze/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 19:39:51 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[maze]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[py]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[recursion]]></category>
		<category><![CDATA[recursive]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=155</guid>
		<description><![CDATA[Here is a simple recursive maze generator I wrote to help a friend learn a little more about how recursion works. I figured I&#8217;d post it here as well. #! /usr/bin/env python import random # Width and height of maze needs to be an even number because of walls WIDTH = 60 HEIGHT = 20 [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a simple recursive maze generator I wrote to help a friend learn a little more about how recursion works.  I figured I&#8217;d post it here as well.</p>
<pre class="brush:python">#! /usr/bin/env python

import random

# Width and height of maze needs to be an even number because of walls
WIDTH = 60
HEIGHT = 20

# The change in x and y for all four directions
UP = (0, -1)
DOWN = (0, 1)
LEFT = (-1, 0)
RIGHT = (1, 0)

def recursive_maze(maze, x=0, y=0, dirx=0, diry=0):
	# Check if current position is inside maze boundry
    if 0 &lt;= y &lt; len(maze):
        if 0 &lt;= x &lt; len(maze[0]):
			# Check if this position can have a new hallway going to it
            if maze[y][x] == "#":
				# Make this position into a hallway
                maze[y][x] = " "

                # Connect this position with previous position
                maze[y-diry][x-dirx] = " "

                # Create direction list and randomize it's order
                directions = [UP, DOWN, LEFT, RIGHT]
                random.shuffle(directions)

                # Follows each direction when the callstack returns here
                for dx, dy in directions:
					# Go down this current direction
                    recursive_maze(maze, x + dx*2, y + dy*2, dx, dy)

def draw_maze(maze):
	# Draw top wall
    print "#" * (len(maze[0])+1)
    # Draw each line with left wall added in
    for line in maze:
        print "#" + "".join(line)

# Initialize the maze as am array of arrays filled with wall spaces
maze = [["#" for j in xrange(WIDTH)] for i in xrange(HEIGHT)]

# Start making the maze
recursive_maze(maze)

# Finally, draw it
draw_maze(maze)</pre>
<p>The output of this program will look similar to this:</p>
<pre class="brush:text">#############################################################
# #       #     #           #           #               #   #
# ##### # # ### # ######### ####### ### # ########### # # ###
#   #   # #   # #   #     #   #   # # # # #           # #   #
### # ### ### # ### ### # ### # # # # # ### ########### ### #
#   #   #     #   # #   # #   # #   # #   # #     #   # #   #
# ##### ######### # # ### # ### ##### ### # # ### # # # # ###
# #     # #     #   #   # # #   #     #   #     # # # # #   #
# # ##### # # ######### ### # ### ### # ######### # ### ### #
# # #       #         #   #   #     # #         # # #   #   #
# # ### ########### # ### ######### ########### # # # ### ###
# #   #   #       # #     #         #           # # # #     #
# # # ### # ####### ####### ### ### # ########### # # # ### #
# # # # #   #       #     #   #   # # #           # # # #   #
# # # # # ### ##### # ### ### ### ### ########### # # ### # #
# # # #   #   #     # # #     #   #   #         # #   #   # #
# ### # ### ##### ### # ####### ### ### ####### # # ### ### #
# #   # # # #   # #   #       #     #   #     #   #     #   #
# # ### # # # # ### ####### # ######### # ### ########### ###
#   #     #   #             #           #   #               #
#############################################################</pre>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/07/26/simple-recursive-maze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Message Queues and Publishers</title>
		<link>http://natewm.com/blog/2010/03/05/python-message-queues/</link>
		<comments>http://natewm.com/blog/2010/03/05/python-message-queues/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 01:37:37 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[publisher]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[subscriber]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=127</guid>
		<description><![CDATA[PyWeek is approaching, so I&#8217;ve decided that I will post some cut-and-paste code to hopefully make the process of game development quicker and easier.  Usually I end up needing to rewrite basically the same code over and over again and spend most of the first two days of any competition just implementing basic features. This [...]]]></description>
			<content:encoded><![CDATA[<p>PyWeek is approaching, so I&#8217;ve decided that I will post some cut-and-paste code to hopefully make the process of game development quicker and easier.  Usually I end up needing to rewrite basically the same code over and over again and spend most of the first two days of any competition just implementing basic features.</p>
<p>This first article will feature message queue and publisher classes.  They are quite simple, yet certainly useful.</p>
<h3>Message Queue</h3>
<p>The message queue class is very short and simple.</p>
<pre class="brush:python">class MsgQueue:
    def __init__(self):
        self.messages = []

    def post(self, msg, category, *args):
        self.messages.append((msg, category, args))

    def get(self):
        for msg in self.messages:
            yield msg
        self.messages = []</pre>
<p>Messages can be posted to it and retrieved from it through the &#8216;post&#8217; and &#8216;get&#8217; functions.  The messages that are posted are tuples of message, category, and arguments.  The categories can be used to group messages of similar types together.  For example, in a game there might be a category called &#8216;switches,&#8217; where a message is posted each time a switch in the level is turned on or off.</p>
<p>The &#8216;get&#8217; function is a generator for iterating through the messages then clearing the list of messages.</p>
<pre class="brush:python">#Example Use for MsgQueue
q = MsgQueue()
q.post("red switch on", "switches")
q.post("red switch off", "switches", "with an extra argument")

# elsewhere in a sea of code ...

for msg,category,args in q.get():
    if category == "switches":
        if msg == "red switch on":
            fire_laser_beams("Pew! Pew!")
        elif msg == "red switch off":
            stop_firing_those_lasers()</pre>
<h3>Publisher With Message Queues Subscribers</h3>
<p>Message queues can subscribe to message categories within this message publisher class.</p>
<pre class="brush:python">class MsgPublisher:
    def __init__(self):
        self.categories = {}

    def subscribe(self, subscriber, category='default'):
        if not self.categories.has_key(category):
            self.categories[category] = []

        self.categories[category].append(subscriber)

    def unsubscribe(self, subscriber, category = None):
        if category is None:
            for c in self.categories.itervalues():
                c.remove(subscriber)

        else:
            if self.categories.has_key(category):
                self.categories[category].remove(subscriber)

    def post(self, msg, category='default', *args):
        if self.categories.has_key(category):
            for subscription in self.categories[category]:
                subscription.post(msg, category, *args)</pre>
<p>The method &#8216;subscribe&#8217; is used to subscribe a message queue to a publisher.  Categories are used to group subscriptions so that a single publisher can serve several uses.  A subscribing message queue will need to subscribe to each of these categories separately.  If category is blank &#8216;default&#8217; will be used.</p>
<p>The method &#8216;unsubscribe&#8217; removes a subscribed message queue from it&#8217;s subscription list(s).  If category is &#8216;None&#8217; (default) it will be unsubscribed from all of the categories.</p>
<p>The method &#8216;post&#8217; is used for posting messages to the subscribed message queues.  Each message will be sent to all of the message queues that have subscribed to the specified category.</p>
<pre class="brush:python">#Example use of MsgPublisher
qa = MsgQueue()
qb = MsgQueue()
qc = MsgQueue()

p = MsgPublisher()
p.subscribe(qa)
p.subscribe(qb)
p.subscribe(qb, "new category")
p.subscribe(qc, "new category")

p.post("message")  # sent to qa and qb
p.post("something else", "new category")  # sent to qb and qc

p.unsubscribe(qa)
p.unsubscribe(qb, "new category")  # qb will be removed from "new category"
p.unsubscribe(qb)  # now qb removed from all categories
p.unsubscribe(qc)  # will be removed from all categories</pre>
<h3>Opportunities for Use</h3>
<p>There are many times when speed and direct interaction are not needed but flexibility is.  In a game objects can simply plug in and listen to the messages being sent &#8212; creating an easy and modular system.  Also it is more like asking for things to happen than telling other parts of your program to do things.  These messages can be ignored.</p>
<p>Some instances where message queues and publishers might be useful include: game state changes, abstraction to other systems such as sound, world dynamics, communications between game entities, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/03/05/python-message-queues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIRATE KART II: KLIK HARDER</title>
		<link>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/</link>
		<comments>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 00:11:20 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[kart]]></category>
		<category><![CDATA[klik & Play]]></category>
		<category><![CDATA[pirate]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[quick]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=124</guid>
		<description><![CDATA[I had a lot of fun making four simple games for the THE 371-IN-1 KLIK &#38; PLAY PIRATE KART II: KLIK HARDER.  It was basically a challenge to see if a bunch of random people could make at least 371 games over the February 27-28 weekend.  We succeeded and then some!  106 people contributed and [...]]]></description>
			<content:encoded><![CDATA[<p>I had a lot of fun making four simple games for the <a href="http://www.glorioustrainwrecks.com/node/437">THE 371-IN-1 KLIK &amp; PLAY PIRATE KART II: KLIK HARDER</a>.  It was basically a challenge to see if a bunch of random people could make at least 371 games over the February 27-28 weekend.  We succeeded and then some!  106 people contributed and <a href="http://www.glorioustrainwrecks.com/games/pk2">529 games</a> were made.</p>
<p>Most of the simply used graphics and sounds stolen from other sources, but I decided to make custom content for all my games.  My favourite is Rolling Hills, which even has music!</p>
<p><a href="http://www.glorioustrainwrecks.com/games/pk2/ArmchairArmada">My four games can be found at here.</a> Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2010/03/05/pirate-kart-ii-klik-harder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Random Neighborhood Generator</title>
		<link>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/</link>
		<comments>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 22:18:43 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[neighborhood]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=86</guid>
		<description><![CDATA[I was wondering how visually interesting a randomly generated neighborhood could be a made by using simple binary subdivision.  Basically the algorithm starts with a square, cuts it in half, cuts those halves in half, and so on to produce streets and plots of land. It is in no way how a real neighborhood would [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_87" class="wp-caption aligncenter" style="width: 610px"><img class="size-full wp-image-87" title="neighborhood" src="http://natewm.com/blog/../media/blog/2009/01/neighborhood.gif" alt="Random Neighborhood Generator" width="600" height="257" /><p class="wp-caption-text">Random Neighborhood Generator</p></div>
<p>I was wondering how visually interesting a randomly generated neighborhood could be a made by using simple binary subdivision.  Basically the algorithm starts with a square, cuts it in half, cuts those halves in half, and so on to produce streets and plots of land.</p>
<p>It is in no way how a real neighborhood would be laid out, but for such simplicity I am rather satisfied with the results.  Such a system could randomly produce results that are visually interesting enough for possibly a small, simple flying or driving based game &#8212; such as having to rush a firetruck to burning homes, for example.</p>
<p>Here is the source code: <a title="Random Neighborhood Generator" href="http://www.natewm.com/media/software/experiments/python/neighborhood.py">neighborhood.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/20/random-neighborhood-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Towlr</title>
		<link>http://natewm.com/blog/2009/01/20/towlr/</link>
		<comments>http://natewm.com/blog/2009/01/20/towlr/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 21:27:25 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[towlr]]></category>
		<category><![CDATA[ychytaeit]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=82</guid>
		<description><![CDATA[A bunch of people at a game development competition site was putting together short confusing games they called &#8220;Towlrs.&#8221;  The intent of a Towlr is to leave the player wondering, &#8220;What exactly am I suppose to do to beat this game?&#8221;  I decided to get in on the action. You Can&#8217;t Have Your Towlr And [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_83" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-83" title="ychytaeit" src="http://natewm.com/blog/../media/blog/2009/01/ychytaeit.gif" alt="You Can't Have Your Towlr And Eat It Too" width="320" height="240" /><p class="wp-caption-text">You Can&#39;t Have Your Towlr And Eat It Too</p></div>
<p>A bunch of people at a game development competition site was putting together short confusing games they called &#8220;Towlrs.&#8221;  The intent of a Towlr is to leave the player wondering, &#8220;What exactly am I suppose to do to beat this game?&#8221;  I decided to get in on the action.</p>
<p><em>You Can&#8217;t Have Your Towlr And Eat It Too</em> was my attempt at a Towlr.  It may be considerably easier than many of the other Towlrs, but the concept is somewhat interesting.</p>
<p>You can download it at the <a title="Towlr" href="http://towlr.com/">Towlr website</a> (which includes a Windows executable), or you can go to the <a href="http://natewm.com/ychytaeit/">page</a> I quickly thrown up on my site (Which requires Python and Pygame because I&#8217;m too lazy to copy the compiled vesion to my site.  Also, in the future I may move this to a different directory on my site, so be warned!)</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2009/01/20/towlr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Various Python Experiments</title>
		<link>http://natewm.com/blog/2008/11/06/various-python-experiments/</link>
		<comments>http://natewm.com/blog/2008/11/06/various-python-experiments/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 01:42:10 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=53</guid>
		<description><![CDATA[Every so often I decide to write simple test programs in Python just for the fun of it.  Here are a few that I had written over in the past.  Please note, because these were originally just simple experiments the source code could be a little messy and poorly optimized in most of them.  Also [...]]]></description>
			<content:encoded><![CDATA[<p>Every so often I decide to write simple test programs in Python just for the fun of it.  Here are a few that I had written over in the past.  Please note, because these were originally just simple experiments the source code could be a little messy and poorly optimized in most of them.  Also note, these are not meant to be all that impressive.</p>
<p>All of the programs require <a href="http://www.python.org">Python</a> and <a href="http://www.pythonware.com/products/pil/">PIL</a> (The Python Imaging Library.)</p>
<h3>Simple Recursive Maze Generator</h3>
<div id="attachment_54" class="wp-caption aligncenter" style="width: 410px"><a href="http://natewm.com/blog/../media/blog/2008/11/maze_py_test.gif"><img class="size-full wp-image-54" src="http://natewm.com/blog/../media/blog/2008/11/maze_py_test.gif" alt="Simple Recursive Maze Generator" width="400" height="200" /></a><p class="wp-caption-text">Simple Recursive Maze Generator</p></div>
<p>This is just a simple maze generator that uses a recursive function.  It creates a near-infinite number of random mazes.</p>
<p>Source: <a href="http://www.natewm.com/media/software/experiments/python/maze.py">maze.py</a></p>
<h3>Rectangle Packing</h3>
<div id="attachment_55" class="wp-caption aligncenter" style="width: 266px"><a href="http://natewm.com/blog/../media/blog/2008/11/rect_pack_py_test.gif"><img class="size-medium wp-image-55" src="http://natewm.com/blog/../media/blog/2008/11/rect_pack_py_test.gif" alt="Rectangle Packing" width="256" height="256" /></a><p class="wp-caption-text">Rectangle Packing</p></div>
<p>I wanted to figure out a simple and effective way of packing rectangle images in an OpenGL texture &#8212; which is useful for hardware accelerated 2D graphics.  The solution I came up with simply subdivides the availible free space and packs the rectangles from largest to smallest.  It may not produce the best packing results and there are quite a few wasted cycles in this implimentation, but, for being as simple as it is, it produces fairly reasonable results rather quickly.</p>
<p>Source: <a href="http://www.natewm.com/media/software/experiments/python/rect_packing.py">rect_packing.py</a></p>
<h3>Simple Error Diffused Dithering</h3>
<div id="attachment_56" class="wp-caption aligncenter" style="width: 370px"><a href="http://natewm.com/blog/../media/blog/2008/11/dither_py_test.gif"><img class="size-full wp-image-56" src="http://natewm.com/blog/../media/blog/2008/11/dither_py_test.gif" alt="Error Diffuse Dithering" width="360" height="215" /></a><p class="wp-caption-text">Error Diffuse Dithering</p></div>
<p>Just simple error diffusion based image dithering.  The above image is showing four color dithering.</p>
<p>Source: <a href="http://www.natewm.com/media/software/experiments/python/dither_test.py">dither_test.py</a></p>
<h3>Random Forest Path</h3>
<div id="attachment_57" class="wp-caption aligncenter" style="width: 492px"><a href="http://natewm.com/blog/../media/blog/2008/11/forest_path_py_test.gif"><img class="size-full wp-image-57" src="http://natewm.com/blog/../media/blog/2008/11/forest_path_py_test.gif" alt="Random Paths Through a Forest" width="482" height="121" /></a><p class="wp-caption-text">Random Paths Through a Forest</p></div>
<p>I decided to try to see if I could easily produce a visual effect resembling erosion patterns in a forest area.  This was part of some preliminary work in trying to write a game that randomly generates a completely different world each time it&#8217;s played.  The results were very satisfying considering how simple the solution is.  Essentially it&#8217;s just squiggly lines of varying thickness with some textureing applied to it.</p>
<p>Source: <a href="http://www.natewm.com/media/software/experiments/python/forest_path.py">forest_path.py</a></p>
<h3>Image Outlining</h3>
<div id="attachment_58" class="wp-caption aligncenter" style="width: 330px"><a href="http://natewm.com/blog/../media/blog/2008/11/outline_py_test.jpg"><img class="size-full wp-image-58" src="http://natewm.com/blog/../media/blog/2008/11/outline_py_test.jpg" alt="" width="320" height="200" /></a><p class="wp-caption-text">Outlining an Image</p></div>
<p>Originally I wanted to see if I could have interesting features of an image identified and later used in some sort of image recoginition system.  Hilighting sharp edges brought out too many points to practically be used for comparing spacial relationships and proportions, but it did produce some nice results for drawing outlines on an image.</p>
<p>I wanted to test it on a picture of a person, so I found the above image online.  It is actually a composit of 32 american male faces averaged together.  I hope the creators of the <a href="http://www.uni-regensburg.de/Fakultaeten/phil_Fak_II/Psychologie/Psy_II/beautycheck/english/durchschnittsgesichter/durchschnittsgesichter.htm">website</a> he&#8217;s from does&#8217;t mind.</p>
<p>Source: <a href="http://www.natewm.com/media/software/experiments/python/img_outline.py">img_outline.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2008/11/06/various-python-experiments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MiniLD #2 &#8211; The Wizard</title>
		<link>http://natewm.com/blog/2008/10/24/minild-2-the-wizard/</link>
		<comments>http://natewm.com/blog/2008/10/24/minild-2-the-wizard/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 21:34:43 +0000</pubDate>
		<dc:creator>Nate</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Competitions]]></category>
		<category><![CDATA[Game Dev]]></category>
		<category><![CDATA[ludum dare]]></category>
		<category><![CDATA[minild]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://natewm.com/blog/?p=41</guid>
		<description><![CDATA[Way back in July I wrote this simplified Super Mario Brothers 3 game for the Mini Ludum Dare (a 48 hour mini-competition) that month.  The theme of the competition was a game based on a movie.  The movie that I picked was &#8220;The Wizard,&#8221; which is a movie about some kids who hitchhike across several [...]]]></description>
			<content:encoded><![CDATA[<p class="center"><img src="http://www.natewm.com/media/img/minild2_wizard.gif" alt="MiniLD#2 - The Wizard" /></p>
<p>Way back in July I wrote this simplified Super Mario Brothers 3 game for the Mini <a title="Ludum Dare - A 48 Hour Game Competition" href="http://www.ludumdare.com/">Ludum Dare</a> (a 48 hour mini-competition) that month.  The theme of the competition was a game based on a movie.  The movie that I picked was &#8220;<a title="The Wizard on Wikipedia" href="http://en.wikipedia.org/wiki/The_Wizard_(film)">The Wizard</a>,&#8221; which is a movie about some kids who hitchhike across several states playing Nintendo games &#8212; so this would have been a video game about a movie about video games.</p>
<p>Originally I was going to have elements from Teenage Mutant Ninja Turtles and Double Dragon (both also featured in the movie) all tied together with an arcade style game where you control Jimmy and play these mini-games against people.  I figured if I made the Super Mario Brothers 3 part (which is the final showdown against Lucas) then I could easily adapt that to make the other parts.</p>
<p>All-in-all it was a little over ambitious, but I think I could have possibly pulled it off if I actually had two full days.  That saturday I went to watch a movie with friends, so I really only had one of the two days to work with.  I am, however, still very satisified with how much was accomplished in such a short amount of time.</p>
<p>Arrow Keys makes mario run, &#8216;x&#8217; key makes him jump.</p>
<p><a title="The Wizard - The Game" href="http://www.natewm.com/media/software/games/compo/minild2_wizard.zip">Download &#8220;The Wizard &#8211; The Game.&#8221;</a></p>
<p>Requires <a title="Python Programming Language" href="http://python.org/">Python</a> and <a title="PyGame - Python Game Development" href="http://www.pygame.org">PyGame</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://natewm.com/blog/2008/10/24/minild-2-the-wizard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
