Friday, July 19, 2013

Now on GitHub!

Hey guys! Haven't worked much on this project, but the code is now on GitHub if you are interested in looking at it!

Thursday, July 11, 2013

June 12: Monster Spawning and Threading

Hey guys!

My work today wasn't groundbreaking, but it's a start. With the help of this post, I managed to create a MonsterSpawner thread, whose implementation looks something like this:
        self.monsterThread1 = MonsterSpawner( "Spawner", self.screen, self, 0.5, 100, [0,300], self.player)
        self.monsterThread2 = MonsterSpawner( "Spawner2", self.screen, self, 1, 100, [800,0], self.player)
        self.monsterThread3 = MonsterSpawner( "Spawner3", self.screen, self, 0.25, 100, [400,0], self.player)
        self.monsterThread4 = MonsterSpawner( "Spawner4", self.screen, self, 0.1, 100, [400,600], self.player)
        self.monsterThread1.start()
        self.monsterThread2.start()
        self.monsterThread3.start()
        self.monsterThread4.start()
There's no collision just yet (neither with the players, his arrows, nor the other monsters), and the AI is simple: chase the player. Tomorrow's goal is adding slightly more complex AI and collision and unit killing. Here's a short clip showing off the different spawn locations and spawn rates:

 Thanks for reading!

Sunday, July 7, 2013

July 7: Game States in Dodge Arena

Hey all!

In terms of features to show off, little to nothing happened today in Dodge Arena. One thing I did implement, however, was the idea of game states. Basically, I have something called a StateManager which I can call to change states. 'States' in this case refer to things like being in the game, the main menu, the options menu, etc. Earlier, since I was just rushing to get something onto the screen, it was very inelegant; I had it such that, for example, clicking 'New Game' created a Game world right there. Instead, now, I have this very simple line:
if self.text == "New Game":
     mainMenuState.getManager().changeState(1)

The state manager knows that '1' means 'GameState' and destroys the menu state and creates the game state accordingly. I needed to do this in order to do what I am doing next, which is the in-game menu (Where I need the functionality that, if the player hits escape, the game freezes while I show them a menu to choose options from). So there's nothing to show off today, it was mostly all behind-the-scenes stuff cleaning up messy code in implementing 'correct' design concepts. Tomorrow I'll hopefully have some screenshots or a video of an in-game menu, and possibly some walls or monsters.

P.S., huge shoutout to SyntaxHighlighter for creating an awesome JavaScript library to show off code on Blogger, and CraftFella for his blog post on how to install it. Thanks guys!

Saturday, July 6, 2013

My project: Dodge Arena

Hey all!

Like I said in my first post, the primary purpose of this blog was to show off my improvement as a programmer and coder. Right now, I am attempting to best do this by working on my own projects. My current primary project is a game developed in Python using Pygame, called Dodge Arena.

Dodge Arena is highly influenced by a game I played often years ago called Crimsonland. It's a very fun top down hectic shooter that I recommend you all check out. The basic idea of the game is you hold off wave after waves of minions which give experience, and every time you level, you can choose a Perk which gives you various benefits; shooting faster, different gun, more experience game, etc. In addition, powerups and weapons spawn on the map at random locations, which adds choices (do i try to power through this horde of minions to grab this powerup?). Here's a screenshot showing off Crimsonland:



When setting out to make Dodge Arena, I had a similar idea, but I wanted to add features and game mechanics missing from Crimsonland. I wanted a top-down shooter where you hold off swarms of minions, and where power-ups spawn. However, there are three key differences that I want in Dodge Arena:


  • Crimsonland has no terrain; it's simple a wide open map. I wanted to spawn less minions and have a maze-like terrain set-up, with corridors and twist and turns. This has the additional challenge of not getting caught (i.e., walking into a dead end, or having minions coming from both ends of a two-way tunnel). My general idea (and consequently the first map I'm working on) is something like the Pacman map:
  • Crimsonland levels give you a random list of Perks to choose from. In Dodge Arena, I want a skill tree (Similar to Diablo 2, WoW, League of Legends, etc.) I think this adds more strategy and allows you to better tailor your character to how you want to play (i.e. straight up damage, more movement and utility, etc.)
  • Crimsonland has random power-ups that cause abilities, such as adding fire to your bullets or setting off a nuke, but there are no abilities. I want Dodge Arena to have abilities like those in League of Legends, such as jumping, knock backs, blinks, terrain hooks, and so on. This combines well with the maze-like (or to keep the LoL analogy going, jungle-like) map that I have; you'd be able to jump over the maze walls, funnel minions into one tunnel then knock them all back or deal huge AoE damage, and so on.
Dodge Arena is still in very, very, very early alpha, but just to give you a feel for how the game will feel, I uploaded a very quick video (again, very very early alpha, it isn't pretty):



Later blog posts will show off code snippets and videos of specific game progress, but this post was just to show off my general game idea and my philosophy going forward. Thanks for reading!

Welcome!

Hey all!

This is my first post to this blog, Quantum Bogosort. The purpose of this blog is to track my progress in being a better programmer. There will be a range of different types of posts here, but the large majority will be focused on my currently in development Pygame game, Dodge Arena.

Thanks for reading and feel free to contact me about anything!