<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1862153997026570669</id><updated>2012-01-30T12:40:09.272-08:00</updated><category term='power-play'/><category term='pc'/><category term='QT'/><category term='doom'/><category term='dethklok'/><category term='checkers'/><category term='java'/><category term='tier systems'/><category term='engineering'/><category term='programming'/><category term='madden'/><category term='music'/><category term='games'/><category term='oop'/><category term='nhl'/><category term='zelda'/><category term='educational game'/><category term='ps2'/><category term='game design'/><category term='game programming'/><category term='quake'/><category term='adaptable games'/><category term='nes'/><category term='python'/><category term='software engineering'/><category term='procedural programming'/><category term='optimization'/><category term='blackjack'/><category term='pygame'/><category term='hockey'/><category term='game dev'/><category term='grand theft auto'/><category term='xbox'/><category term='c++'/><category term='cloud cover'/><category term='update'/><category term='gamegear'/><category term='game in a day'/><title type='text'>Game Programming</title><subtitle type='html'>I'm a Computer Science student with a focus in Game Development. This weblog will serve to document my experiences with game development as well as my opinions and views on computer games in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-4196871043414671408</id><published>2010-04-07T21:59:00.000-07:00</published><updated>2010-04-08T08:21:48.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud cover'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>How I Learned Python</title><content type='html'>Being primarily a C++ programmer, I have lived a hard life: All the rules, all the syntax, all the mean spirited compiler errors from the STL...&lt;br /&gt;&lt;br /&gt;While I have dabbled in scripting languages in the past, I never really put too much time into learning one. I decided it was time to learn a scripting language in more detail, and I chose Python. The best way to learn a new language is to create a relatively complex program in it, so to accomplish this task, I set out to make a game in no more than 7 days using Python and PyGame (SDL wrapper). Being familiar with using SDL from C++, I felt confident this project would be a success, and it was. 4 days later, I had a new game, &lt;a href="http://zachelko.com/projects/cloudcover"&gt;"Cloud Cover"&lt;/a&gt;, and I knew a decent amount of Python. Here's how it happened.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Game Design&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I had been toying with an idea for a game that involved the rain theme for quite some time. Originally, I wanted to develop the game for the iPhone and take advantage of the tilt-control. The idea at that point was to tilt the iPhone left and right to tilt platforms in order to fill up buckets with water in order to progress in the level. However, not particularly liking Objective-C or the hoops needed to jump through in order to develop for the iPhone, I nixed that idea.&lt;br /&gt;&lt;br /&gt;After hearing the instrumental &lt;a href="http://www.youtube.com/watch?v=SN1LcHaMaDk"&gt;"2 Die 4" by 'John 5'&lt;/a&gt; and then going to sleep, I awoke with the game design in my head. It literally came to me in my sleep. In fact, I even feature the song in my game because it fits so well (and it should since it inspired the game!).&lt;br /&gt;&lt;br /&gt;Essentially, the game design is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You play the part of a bowling ball who must fill up beakers with rain drops.&lt;/li&gt;&lt;li&gt;On each level, you will have either 1 or 2 beakers to fill, and they may be  positioned with at most 1 beaker on each side of the player&amp;nbsp; &lt;/li&gt;&lt;li&gt;The game will only have 2 controls: roll left and roll right. This adds to the challenge of the puzzles because you can only move each beaker in 1 direction. &lt;/li&gt;&lt;li&gt;Rain is created by a dynamic rain system from 1 or 2 clouds per-level.&lt;/li&gt;&lt;li&gt;The clouds can be configured to behave in many different ways, such as: being stationary, moving left/right (single or multiple passes), being restricted to certain x-value bounds, having endless rain drops, or having a limited supply of rain drops.&lt;/li&gt;&lt;li&gt;Tweaking the dynamic rain system along with the placement and movement of the cloud(s) and beaker(s) can be used to create challenging puzzles&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Implementation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Dynamic Rain System&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Implementing the dynamic rain system was a lot of fun, and a lot easier than you may think. Basically, it boils down to this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Assign each cloud a life span (number of drops it can produce)&lt;/li&gt;&lt;li&gt;Assign each cloud an intensity value (number of drops it produces per-frame) &lt;/li&gt;&lt;li&gt;Using the dimensions of the cloud, generate a random x,y coordinate at which to generate a new rain drop within the bounds of the cloud.&lt;/li&gt;&lt;li&gt;Generate the rain drops in a loop ranging from 1 to the intensity value&lt;/li&gt;&lt;li&gt; For each drop created, subtract 1 from the life span of the cloud&lt;/li&gt;&lt;li&gt;As long as the life span is &amp;gt; 0 (or the cloud has an infinite life span), continue to generate rain&lt;/li&gt;&lt;/ul&gt;Pretty simple, eh?&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Beakers&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;There were a few things I had to deal with when implementing the beakers. First, I wanted to have some sort of physics effect so that the character would be slowed down while pushing them. I decided to fake the physics first and see how well it worked before implementing the real deal. I got lucky on my first attempt at this. I gave each beaker a fractional weight value (settled on .5). Then, on collision, I would multiply the player's speed by the weight of the beaker. Since it is a fractional value, it would decrease the player's speed by a factor of the beaker's weight. The result is a very believable friction effect. Sorry, Newton, I don't need you today...&lt;br /&gt;&lt;br /&gt;The next issue with the beakers was getting them to "fill up" as they caught rain drops. This one took a little bit more time to nail down, but I'm pretty happy with the solution I came up with. Basically, each beaker keeps track of how many drops it can hold, and how many it's already caught. Using these values, combined with the height and width of the beaker, I do some simple division to create a fill percentage and draw a filled rectangle inside the beaker. This gets updated on every game update, so as you collect more drops, the box grows taller and taller, thus the beaker appears to be filling up. Until the beaker is full, the box is the same color as the rain drops, and once full, it turns red so the player knows to stop trying to fill it. Some normalization had to be done for when the beaker does fill up, as well as to account for leaving some space on the sides, but the code for this is pretty straightforward:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/359803.js?file=fillbeakers.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;I did have to address one issue with the beakers in that they were detecting "caught" drain drops anytime they collided with a rain drop. Clearly, you could collide with low-falling drops by pushing the beaker into them, but that's hardly catching them, so it had to be fixed.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://zachelko-gamedev.blogspot.com/2010/04/just-drop-in-bucket-or-was-it.html"&gt;this post&lt;/a&gt; for details on how I went about that.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Player&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The player is a fairly simple piece of code, although there is one neat trick I employed. I was faced with the question of, "How do I make the bowling ball roll around?". Sure, I could do some involved math to do it, but I'm just using a static image for the player character. So, what to do? Rotate the image!&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/359808.js?file=rotate.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;All in all, the game took around 4 days, but probably only about 15-20 hours of time. It was essentially the first non-trivial program I had ever written in Python, and it turned out really great if I do say so myself.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You can find the game &lt;a href="http://zachelko.com/projects/cloudcover"&gt;here&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_aRKf90uWNaM/S71rlg2j3SI/AAAAAAAAAOc/U-fgr1NGGko/s1600/4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_aRKf90uWNaM/S71rlg2j3SI/AAAAAAAAAOc/U-fgr1NGGko/s320/4.png" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_aRKf90uWNaM/S71r5x3v_xI/AAAAAAAAAOk/hEAZhcLNlDI/s1600/5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_aRKf90uWNaM/S71r5x3v_xI/AAAAAAAAAOk/hEAZhcLNlDI/s320/5.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_aRKf90uWNaM/S71sBBrZtfI/AAAAAAAAAOs/1rnYjmPnFDo/s1600/6.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_aRKf90uWNaM/S71sBBrZtfI/AAAAAAAAAOs/1rnYjmPnFDo/s320/6.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-4196871043414671408?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/4196871043414671408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=4196871043414671408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/4196871043414671408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/4196871043414671408'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2010/04/how-i-learned-python.html' title='How I Learned Python'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_aRKf90uWNaM/S71rlg2j3SI/AAAAAAAAAOc/U-fgr1NGGko/s72-c/4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-2066201510092968333</id><published>2010-04-07T21:20:00.000-07:00</published><updated>2010-04-07T21:26:52.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud cover'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>Just A Drop In The Bucket (or was it?)</title><content type='html'>I had a known bug in my new game, &lt;a href="http://zachelko.com/projects/cloudcover"&gt;"Cloud Cover"&lt;/a&gt; which involved detecting a "caught" rain drop when the drop actually hit the side of the beaker instead of in the opening. I knew about the issue, but due to the mechanism I was using to detect collisions (a pre-made function from the PyGame library), the solution wasn't immediately apparent. It would have been difficult and clunky to adjust the iteration on each collision detection to then ensure that the drop that had been detected as a collision was in the acceptable range, being y &amp;lt;= the top of the beaker (y increases towards the bottom of the screen).&lt;br /&gt;&lt;br /&gt;So, after some thinking, I came up with the following solution: Instead of checking the y-value of the drop once a collision is detected, only check for collisions against rain drops that are within the acceptable range. It works great, and it's pretty slick if I do say so myself.&lt;br /&gt;&lt;br /&gt;First, I store the heights of all beakers in the current level. Currently, each level has at least 1 beaker, no more than 2, the beakers exist for the duration of the level, and they are all of the same height. However, in the future this may change, and beakers may even be destroyed as the level plays on, so I had to ensure that I was able to keep track of the beakers that were currently on the screen: having a static list of the beakers that the level started with wouldn't have been sufficient. Then, I sort the list of beaker heights. This ensures the smallest beaker height will be in the front of the list. This is crucial because I need to use the y-value of the *smallest* beaker as my baseline for accepting collisions because even if I have taller beakers, a y-value of &amp;lt;= the smallest one will also suffice for any beakers taller (remember, y gets larger as it approaches the bottom of the screen). Now that I have the y-value of the shortest beaker, I check against this value when a collision is detected. If the rain drop's y-value is &amp;lt;= this number, I know it is within the area of the opening of the beaker, and I can consider that a collision, and thus a "caught" rain drop.&lt;br /&gt;&lt;br /&gt;This also has a nice benefit in that it eliminates a number of otherwise useless and costly collision comparisons. Before, every drop on the screen was being checked for a collision. Now, any drop that is below the shortest beaker is ignored entirely. With enough drops on the screen, this can be a big savings in performance.&lt;br /&gt;&lt;br /&gt;The code for this is as follows: &lt;script src="http://gist.github.com/359768.js?file=raindrops.py"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-2066201510092968333?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/2066201510092968333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=2066201510092968333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/2066201510092968333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/2066201510092968333'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2010/04/just-drop-in-bucket-or-was-it.html' title='Just A Drop In The Bucket (or was it?)'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-6328766010303129094</id><published>2010-04-01T10:06:00.000-07:00</published><updated>2010-04-02T13:28:54.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='educational game'/><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Game In A Day - "Hangman"</title><content type='html'>The second installment to my Game In A Day series is a project I started many years ago, and have maintained in not-so-consistent fashion: Hangman.&lt;br /&gt;&lt;br /&gt;I wrote this about 5-6 years ago in C++. The interface was console-based only and this lead to a lot of added headaches and bugs. I've been meaning to throw a GUI on this project for a while, but just never got around to it... until now!&lt;br /&gt;&lt;br /&gt;As part of my Software Engineering capstone, my group and I are making a set of educational games to teach 4th and 5th grade curriculum in Math, English, and Reasoning Skills. The English side of things was lacking a bit, so I decided to create Hangman in the context of my capstone project. Note that at the time, there were only 4 weeks left in the course and we had moved every other project into their final phase. So, if Hangman was to be added, it would definitely have to be developed in less than 1 day! &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Interface Design&lt;/b&gt;&lt;br /&gt;I came up with the design in a fairly short amount of time while I was sitting in one of my morning classes. Obviously, Hangman is a classic game and interfaces for it can only vary so much, but I did add a few tweaks. First, I designed it so that the vowels and consonants are displayed to the user in horizontal list form. This assists in the curriculum for the target audience as they can learn to identify the different letters as well as learn the words and definitions. Second, guessed letters (both correct and incorrect) get removed from their respective lists. This helps the player keep track of what they've already guessed and what's available to guess. Last, I added a "Solve" button to the interface so that at any time they can choose to solve the puzzle.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Game Design&lt;/b&gt;&lt;br /&gt;Much like the interface design, the gameplay for Hangman is relatively set in stone. The flow that I went with is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A definition is displayed to the player&lt;/li&gt;&lt;li&gt;Below the definition, a series of _ characters are displayed to the player to represent the number of letters in the answer&lt;/li&gt;&lt;li&gt;When the player types a letter, the game checks to see if that letter is in the puzzle, and if so, replaces each corresponding _ with the guessed letter.&lt;/li&gt;&lt;li&gt;A wrong guess results in the next Hangman image being displayed to the player on the interface. The images are looked up using the number of questions wrong as the index into the vector of images. In total, there are 9 images, and the game is over when you've missed 9 questions.&lt;/li&gt;&lt;li&gt;At any point the player can choose to hit "Solve" and try to solve the puzzle. An incorrect guess results in the player losing.&lt;/li&gt;&lt;/ul&gt;Pretty simple, eh? &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tools&lt;/b&gt;&lt;br /&gt;I decided to use C++ and QT for this project because I'm very familiar with QT and it is an incredibly powerful library.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Implementation&lt;/b&gt;&lt;br /&gt;Instead of adding a GUI to the pre-existing code I had, I decided to write the entire game from scratch. Using QT made this quite simple, actually. It allowed me to use the built-in QT types for everything (QString, QChar, QVector, etc...) and keep the code clean and consistent. You would think that writing a game entirely console-based would be easier, but when you have to deal with validating user input, alternating between std::string, char*, and char, things get messy in a hurry. Also, organizing game flow and game state create equally messy situations. A GUI environment like QT eliminates this mess with the use of dialogs and events to properly handle flow and state changes.&lt;br /&gt;&lt;br /&gt;All in all, the implementation was fairly straight forward and consisted of the following pieces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Event handler to grab alphabetic input (ignores all other input)&lt;/li&gt;&lt;li&gt;Function to check if a letter exists in the answer (and every location in which it does)&lt;/li&gt;&lt;li&gt;Function to handle solving the entire puzzle&lt;/li&gt;&lt;li&gt;Function to remove the last guessed character from both the vowel and consonant lists.&lt;/li&gt;&lt;li&gt;Functions to handle a correct and incorrect guess&lt;/li&gt;&lt;li&gt;Function to handle the end of the game&lt;/li&gt;&lt;li&gt;Function to handle resetting the game to the initial state&lt;/li&gt;&lt;/ul&gt;That's it. Total, the project only took around 5 hours from start to finish, so I'm very pleased with that result. The only thing left to do is to plug it in to our QuestionManager to dynamically grab pre-made questions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notable Code Snippets&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Determining If Input Is An Alphabetic Character&lt;br /&gt;&lt;script src="http://gist.github.com/353604.js?file=ASCII-tricks.cpp"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/353606.js?file=isAlpha.cpp"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Finding Every Occurrence Of A Letter In A Word&lt;br /&gt;&lt;script src="http://gist.github.com/353596.js?file=findAllOccurances"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-6328766010303129094?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/6328766010303129094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=6328766010303129094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6328766010303129094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6328766010303129094'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2010/04/game-in-day-hangman.html' title='Game In A Day - &quot;Hangman&quot;'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-3196970347984978719</id><published>2010-03-27T15:25:00.000-07:00</published><updated>2010-03-28T13:09:28.331-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='game programming'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='game in a day'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='dethklok'/><title type='text'>Game In A Day - "Free Fall"</title><content type='html'>A theme I've done twice now is "Game In A Day" in which I sit down and create a brand new game from scratch in no more than 24 calendar hours. This post will outline the first such "Game In A Day" experience which took place a little over a month or 2 ago...&lt;br /&gt;&lt;br /&gt;I'm huge into music. I play guitar, and I can't accomplish much of anything without my favorite tunes on. &lt;a href="http://zachelko-gamedev.blogspot.com/2008/03/how-sweet-sound.html"&gt;As I've mentioned in another post&lt;/a&gt;&lt;insert link=""&gt;, I've always wanted to create a game based entirely around music. I coupled this desire with my desire to make a brand new game from scratch in less than 1 day. The goal: Create a game that is inspired and based around a single song, and do it all in 1 day.&lt;/insert&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Tools &lt;/b&gt;&lt;br /&gt;Due to the time constraints and past success with the language/library, I chose to use Python along with the PyGame API for this project. PyGame is really just a front-end for SDL with some added goodies. I use SDL extensively from C++, so PyGame feels very comfortable to me.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Song &lt;/b&gt;&lt;br /&gt;As for the song, that was a harder decision. I loaded up about 5 band's worth of material, turned my monitor off, turned my lights off, and paced around for about an hour trying to find something that screamed, "Game!" to me.&lt;br /&gt;&lt;br /&gt;After a while, I decided on Dethklok - Comet Song. It's very fast paced and evokes a sense of urgency and thrill, 2 emotions perfect for a game.&lt;br /&gt;&lt;br /&gt;You can check the song out here:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=kRQ47oEbA6s"&gt;http://www.youtube.com/watch?v=kRQ47oEbA6s&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Game Design&lt;/b&gt;&lt;br /&gt;Using the flow of the song as my guide, I started to picture an environment in which I was under constant pressure to evade and/or maneuver. The more I listened to the song, the theme of being in space (as is the theme for the song) started to appeal to me. I decided to design the game around this idea in the following ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The character will be falling through space&lt;/li&gt;&lt;li&gt; There will be objects coming at it with varying rates of speed that it must avoid&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The character will only have 2 controls: move left, move right&lt;/li&gt;&lt;li&gt;The goal will be to stay alive as long as you can, earning points the longer you're alive&lt;/li&gt;&lt;/ul&gt;Pretty simple, but definitely has the potential for some fun, and it fits the song perfectly. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Game Implementation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parallax &lt;/b&gt;&lt;br /&gt;Right off the bat I knew I wanted to create some sort of parallax effect. I had never implemented it before, and creating a game in 1 day really isn't that difficult, so I wanted to add some level of challenge to it, as well as gain some experience doing something cool like parallax.&lt;br /&gt;&lt;br /&gt;The idea behind parallax is that you create the illusion of movement by layering background images on top of each other, giving each a different speed (and some layers don't move at all) to give the illusion of distance and speed in relation to the character.&lt;br /&gt;&lt;br /&gt;I spent probably more time designing and tweaking the parallax than I did on anything else in the project. I wanted to fake the character's fall through space by creating the parallax in such a way that the character would only ever move left or right, but the outer space background(s) would move from the bottom of the screen to the top of the screen, thus creating a falling effect.&lt;br /&gt;&lt;br /&gt;My final design was as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For each background image traveling at a particular speed, there needs to be another background image traveling at that same speed. The image can be different, but the speed must be the same. The images are the exact size of the screen coordinates.This second image will be offset from the first one by a distance of the height of the image (SCREEN_HEIGHT). The reason for this is so that as both images move towards the top, there will never be a gap in backgrounds before the second half of the pair appears on the screen.&lt;/li&gt;&lt;li&gt;Apply 1 or more static background images to create points of reference for the character&lt;/li&gt;&lt;li&gt;Have 2 pairs of moving layers: a fast pair and a slow pair. In my implementation, each pair had their own image, but the image was the same within the pair. The images were just basic star maps I made in The Gimp using various colors and sizes of dots placed randomly around the image. &lt;/li&gt;&lt;li&gt;Once an image has moved from the bottom of the screen to the top of the screen and then completely off the screen, reset it's position to it's original starting position (either y = SCREEN_HEIGHT or y = SCREEN_HEIGHT * 2)&lt;/li&gt;&lt;/ul&gt;That's basically it. It took a lot of tweaking to get it to that level, but in the end it's pretty simple, but does the job nicely for this project. Horizontal parallax is a bit more involved, but not too far of a reach from what I've done here. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Asteroids&lt;/b&gt;&lt;br /&gt;Since we're in space, I figured what better obstacle than asteroids and space debris? I browsed Google Images for something I could work with and then doctored it up in The Gimp. I essentially cut my own shape out of an image of a real asteroid and then colorized the image with a nice bright color. I ended up with 4 different colors if I recall correctly and they actually look really nice.&lt;br /&gt;&lt;br /&gt;Next, I had to decide where the asteroids would be "attacking" from. I toyed with the idea of having them come from every direction, but felt this would make it too difficult. Then I thought about maybe just up from the bottom and down from the top, but in practice, it took away from the parallax effect and it was no longer believable that the character was falling. I settled on just having the asteroids appear at a random X-value at the bottom of the screen and head upwards toward the player and I'm very happy with the result of this.&lt;br /&gt;&lt;br /&gt;I also had to determine how many asteroids I wanted to generate on each update of the game loop. I just went simple and kept track of the number of updates and used the modulus function to only generate an asteroid every 5 updates and it works surprisingly well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Character&lt;/b&gt;&lt;br /&gt;Next, I needed a fun character to play the main role in the game. I ended up deciding on a cute little leaf. It fit the theme of falling, and I thought there was some neat stuff I could do with a leaf in the game. When I threw the leaf in initially, I knew I had a problem: Only allowing left and right movement wasn't selling the parallax at all.&lt;br /&gt;&lt;br /&gt;I essentially had a static image that would just move in a straight line from one side of the screen to the other. So, what could I do? Hey, it's a leaf, how do leaves fall? They sway back and forth, right? So, my leaf should do the same! I used the same modulus trick to tackle this one, and every 5 updates I would rotate the leaf image by 90 degrees. This gave it a nice floating, flipping effect as you see leaves demonstrate when they fall. Once again, modulus saved the day!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scoring&lt;/b&gt;&lt;br /&gt;For scoring, I toyed with the idea of adding objects that you wanted to collide with (power-ups, bonuses, etc...) and the player would get points from those. I tossed this idea because with the random nature of how asteroids were being created, it would have proved difficult for the player to obtain these power-ups. I decided to just award points to the player for staying alive. I got lucky and picked some value multipliers at random and they ended up working out and I stuck with them:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The player has 3 lives&lt;/li&gt;&lt;li&gt;1 point is added to the player's score on every game loop update&lt;/li&gt;&lt;li&gt;100 points are deducted for colliding with an asteroid&lt;/li&gt;&lt;li&gt;On your 3rd collision, no points are deducted, thus allowing you to finish with the amount of points you've obtained since your last death.&lt;/li&gt;&lt;/ul&gt;The idea here is to facilitate high scores to keep the player excited and interested in beating their high score. With the scoring and lives, I had to go and implement a simple HUD (heads-up display). It's pretty basic and renders the number of lives (complete with mini images of the leaf) and the current score in the upper-left hand corner of the screen, and the high score in the upper-right hand corner of the screen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Extras&lt;/b&gt;&lt;br /&gt;After some play-throughs, I realized how fun and addicting the game was. It lacked one key thing though: score persistence. I found myself wanting to beat my high score, but only to find that I couldn't keep track of it! I whipped up a save and load mechanism to keep the player's score on disk. I also added the ability to play again once you died instead of having to restart the game.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;This project was a total success. I finished the entire thing start to finish in under 10 man hours, and that counts dallying around with images! I'm very pleased with the outcome in terms of the goal I set out to achieve, and honestly didn't expect the game to turn out to be as fun as it is!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Screenshots &lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_aRKf90uWNaM/S66ILbyJ04I/AAAAAAAAALE/kmsjkblY1Mg/s1600/2010-03-27-143149_1280x1024_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_aRKf90uWNaM/S66ILbyJ04I/AAAAAAAAALE/kmsjkblY1Mg/s320/2010-03-27-143149_1280x1024_scrot.png" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_aRKf90uWNaM/S66ISbm1nbI/AAAAAAAAALM/dkDPfP6EuA4/s1600/2010-03-27-143124_1280x1024_scrot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_aRKf90uWNaM/S66ISbm1nbI/AAAAAAAAALM/dkDPfP6EuA4/s320/2010-03-27-143124_1280x1024_scrot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-3196970347984978719?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/3196970347984978719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=3196970347984978719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/3196970347984978719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/3196970347984978719'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2010/03/game-in-day-free-fall.html' title='Game In A Day - &quot;Free Fall&quot;'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_aRKf90uWNaM/S66ILbyJ04I/AAAAAAAAALE/kmsjkblY1Mg/s72-c/2010-03-27-143149_1280x1024_scrot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-3280699717382391348</id><published>2009-07-28T08:16:00.000-07:00</published><updated>2009-07-28T08:43:04.029-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='game programming'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural programming'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>Designing A Hockey Power-Play System: Part 3</title><content type='html'>I finally found some time to sit down and revisit this problem. I made the decision a few days ago that I would wake up and devote my entire day to solving this problem once and for all, and I did just that. I realized that I had been going about the problem in the wrong fashion, which is why I never seemed to be able to come up with a solid solution.&lt;br /&gt;&lt;br /&gt;If you haven't read the other 2 posts on this topic (or if you haven't read them recently), I suggest you do that now in order to get a good grasp on the evolution of this design.&lt;br /&gt;&lt;br /&gt;Part 1&lt;br /&gt;&lt;a href="http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system.html"&gt;http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Part 2&lt;br /&gt;&lt;a href="http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system-part.html"&gt;http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system-part.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To summarize though, my initial thoughts were to design some sort of power-play "system" which would encapsulate all of the tricky details of managing complex penalty situations. At first thought, this seems logical. In software engineering we commonly encapsulate complex things into easy to use interfaces. However, something about this particular problem just wasn't meshing with this approach. You see, the most complicated part of a power-play situation (or set of power-play situations) isn't managing the players who commit the penalties (taking them off the ice, the length of the penalty, placing them back on the ice, etc...). Instead, the complex part is informing the user of the situation via the HUD (heads up display). The behind the scenes work is simple because you simply set a timer for each player who commits a penalty, draw him in the penalty box for that duration, and when it expires you place him back on the ice. With the HUD, you have to verbalize to the user the exact situation that is currently in effect (5 on 4, 5 on 3, 4 on 4, or 4 on 3), and the duration that situation will last. To do this requires knowledge of all other currently running penalties. When you start to think of all of the permutations, you'll get a headache.&lt;br /&gt;&lt;br /&gt;So, how did I alter the design to negate these issues? Simple: I solved the problem procedurally. Instead of using an object-oriented "system" approach to nicely encapsulate away all of the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;nastiness&lt;/span&gt;, I simply broke the problem set down into very simple functions. It took some detailed doodling on paper to get things right, but if you can't make an algorithm work on paper, you'll never get it working in code.&lt;br /&gt;&lt;br /&gt;Here is the algorithm I came up with:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Maintain a list of times that represent penalties that are currently being served. Tick each of the times in the list once every second (elapse time)&lt;/li&gt;&lt;li&gt;When a penalty occurs, remove this player from the ice and add his time to the list of penalty minutes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Count the players on the ice for each team (should be a simple call to a size() function on the container they are held in for each team)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set the situation timer (5 on 4, 5 on 3, etc...) equal to the smallest remaining time in the penalty times list. We use this time because as soon as a penalty expires, the situation will change, so we choose the time that expires soonest.&lt;/li&gt;&lt;li&gt;When a penalty expires, place the player back on the ice and repeat the process of counting players and setting the situation timer.&lt;/li&gt;&lt;/ol&gt;If the situation is 5 on 5, no display needs to be shown. Also, whichever team has the advantage, the situation label will appear under their label on the screen. For example, if the Penguins have a 5 on 4 power-play advantage, under the team label "Penguins" on the screen, the text "5 on 4" would be displayed. If it is an even strength situation (but not full strength), the display can be  shown in the middle of the 2 labels. This all depends on your interface and isn't really important as far as the algorithm is concerned, but it does have to be accounted for.&lt;br /&gt;&lt;br /&gt;The problem seems so much simpler once it is broken down into 3 or 4 very basic functions. At first I felt it odd and maybe even "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;hacky&lt;/span&gt;" to count the players in this fashion in order to display the situation, but then I realized that the serving of the penalties and the HUD are two totally different issues, so trying to put them into one solution was pointless and just led to more problems. I also believe this solution is very fast and light-weight. Consider the fact that you are adding the penalty times to a container of some sort. If you always insert them at the back, and tick each one every second, you can guarantee that the penalty which will expire soonest will always be in the first position. No searching, no sorting. Just grab the first element and you can set the situation timer. And as I mentioned before, chances are the players on each team are in some sort of container themselves, so "counting" the number of players simply means calling a size() function on that container which should be as fast of an operation as possible being that it is a standard library function (not to mention there are &lt; 20 players on a hockey team... =p ).&lt;br /&gt;&lt;br /&gt;Hopefully this has been helpful to someone out there. I'm putting the finishing touches on the code, so I'll post some screenshots of the demo in action once I complete it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-3280699717382391348?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/3280699717382391348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=3280699717382391348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/3280699717382391348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/3280699717382391348'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2009/07/designing-hockey-power-play-system-part.html' title='Designing A Hockey Power-Play System: Part 3'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-6213820639354696039</id><published>2008-07-21T17:47:00.000-07:00</published><updated>2008-07-21T17:57:46.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='game programming'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='grand theft auto'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptable games'/><title type='text'>Intrigue of Game Design</title><content type='html'>I was thinking about this the other day, so I wanted to get it down here. What makes game design / programming different from all other types of software development? Sure, it tends to be more difficult due to the melding of many forms of technologies, different programming/scripting languages, advanced math, physics, the list goes on. But I'm getting at something else entirely.&lt;br /&gt;&lt;br /&gt;The thing that intrigues me about game programming is simply this: As the developer, you have the ability to write some code, that when finished, can be able to provide endless fun and entertainment. The whole idea of writing something once, putting it on a disc or into an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;EXE&lt;/span&gt; and sending it out, only to be able to play that game and "create fun" each and every time you play it in new ways is really astounding. The game that really got me thinking about this was of course Grand Theft Auto. Therein lies a game in which all the work has been done, disc printed, shipped, sold. From there, anyone who plays this game can create their own fun, their own experience, and can do so for an unlimited number of years. All of this can be separate from what the makers of the game "intended" you to do, or it can include those elements as well.&lt;br /&gt;&lt;br /&gt;Another way to think of this is that someone can create something, and from that something, they can turn it into anything they want. Think about a car. The car maker produces this vehicle to get its customers from place to place safely. The customer can then take that car and choose to do anything they want with it. They can race it, enter it into demolition derbies, enter it in car shows, use it to transport materials, etc... It's a limited example in comparison to Grand Theft Auto, but the same motif of creating a system of some sort, and then being able to jump into that system and envelop yourself in it, creating fun and experiences as you go.&lt;br /&gt;&lt;br /&gt;Clearly, not every game is cut out for this type of adaptation, but I believe elements of this are possible in nearly every game. Keep this in mind as you design your game. Ask yourself, "Can the players of my game use elements inside the game to create their own fun/experiences that I didn't explicitly program into the game?"&lt;br /&gt;&lt;br /&gt;-Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-6213820639354696039?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/6213820639354696039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=6213820639354696039' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6213820639354696039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6213820639354696039'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/07/intrigue-of-game-design.html' title='Intrigue of Game Design'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-4443645700741188228</id><published>2008-07-21T17:33:00.000-07:00</published><updated>2008-07-21T17:43:51.324-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='power-play'/><category scheme='http://www.blogger.com/atom/ns#' term='hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='tier systems'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><title type='text'>Designing A Hockey Power-Play System: Part 2</title><content type='html'>After thinking about this for a few days, I've got some new thoughts about the whole thing. First off, in my previous post, I made a mistake. I stated that if the same team commits a second penalty prior to the first penalty expiring that we should set the 5 on 3 timer to &lt;span style="font-style: italic;"&gt;(duration of the second penalty) - (remaining duration of the first penalty)&lt;/span&gt;. In fact, each successive penalty situation after the first would be set to the lowest remaining time of all current penalties against that team. Even simpler is the fact that there are only 3 possible penalty levels: 5 on 4, 5 on 3, or 4 on 4. Remember, if a team commits a penalty when they are already at a 5 on 3 disadvantage, they remain at that disadvantage, but they have to sub a player out.&lt;br /&gt;&lt;br /&gt;The reason this problem is so tricky is that all of this work is only to provide the heads up display to the user. That is, when you watch hockey on TV, it tells you when it's a 5 on 4, 5 on 3, or 4 on 4. Because of that, we can't simply just pull guys off the ice, each with their own timer, and put them back on when it expires. We have to keep track of the penalty situation (5 on 4, 5 on 3, 4 on 4, etc...) and also provide the user with the proper timing information for how long that particular situation will last.&lt;br /&gt;&lt;br /&gt;In the background we'll handle penalties in that simple fashion of giving each player in the penalty box a timer and then when it expires, place him back on the ice. However, the tier system is what will handle the proper heads up display for the user.&lt;br /&gt;&lt;br /&gt;That's all for now, I just wanted to write down the areas that I've cleaned up in these past few days. More to come soon.&lt;br /&gt;&lt;br /&gt;-Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-4443645700741188228?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/4443645700741188228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=4443645700741188228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/4443645700741188228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/4443645700741188228'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system-part.html' title='Designing A Hockey Power-Play System: Part 2'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-8404494682662583165</id><published>2008-07-16T19:21:00.000-07:00</published><updated>2008-07-21T17:33:07.757-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nhl'/><category scheme='http://www.blogger.com/atom/ns#' term='power-play'/><category scheme='http://www.blogger.com/atom/ns#' term='hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='tier systems'/><title type='text'>Designing A Hockey Power-Play System</title><content type='html'>In hockey (using NHL as my reference here), there is something called a "power-play", or alternatively referred to as a "man advantage". In hockey each team has 5 players on the ice at 1 time: 3 forwards, 2 defense men, and 1 goalie. Teams are allowed to pull their goalie out and add an extra skilled player (usually a forward) in order to increase their chances of scoring, but that's not important here. When a team commits a penalty (more accurately, when a player commits a penalty), that player must sit in the penalty box for a duration of time, either 2, 4, 5, or 10 minutes (depending on severity). During this time, the opposing team is said to have a "power-play" and a 5 man to 4 man advantage. Naturally, if the team on a power-play commits a penalty while they have a man-advantage, they will lose that player to the penalty box, and the teams will be in a 4 on 4 situation.&lt;br /&gt;&lt;br /&gt;Additionally, if a team commits another penalty while they are already at a disadvantage, they can be reduced another man, and then they are on a 5 man to 3 man disadvantage. In the event a third penalty is committed by the same team prior to any of the previous two offenders being released from the box, that player will be substituted out of the game for a backup, and he too will go to the penalty box. Teams must always have at least 3 men on the ice, and no more than 3 in the penalty box. To make things even more troubling to deal with, power-plays carry over between periods. That is to say, if there is 1:30 left in the 2&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;nd&lt;/span&gt; period and a team commits a 2:00 penalty, then that player will have to remain in the penalty box for the first :30 of the 3rd period.&lt;br /&gt;&lt;br /&gt;So, what does this have to do with game programming? Quite a lot if you're making a hockey game! So, what are we left with? A very complex problem that needs solving! Being a huge hockey fan and clearly a game developer, I wanted to see what I could come up with solve this tricky issue. Sure, it's been done before, but not by me, so what good does that do me?&lt;br /&gt;&lt;br /&gt;My rough general overview of how to deal with this goes something like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When a penalty occurs, remove the player from the ice and start a timer for the appropriate duration&lt;/li&gt;&lt;li&gt;If another penalty occurs by the same team during that time, we'll need to save the time remaining in the first power play. Then, set the 5 on 3 timer to the&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Remaining Duration Of The 1st Penalty&lt;/span&gt;&lt;/li&gt;&lt;li&gt;When the 5 on 3 timer expires, set the 5 on 4 timer to the remaining duration of the 1st penalty that we saved earlier.&lt;/li&gt;&lt;li&gt;When the 5 on 4 timer expires, place the offender of the 2&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;nd&lt;/span&gt; penalty back on the ice and return as normal&lt;/li&gt;&lt;/ul&gt;Now, as you have probably already noticed, this is only accounting for that particular situation, when in fact any number of terrible combinations could happen, most of which involve the team &lt;span style="font-style: italic;"&gt;on&lt;/span&gt; the power-play &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;committing&lt;/span&gt; a penalty, or some awful back and forth situation of which I don't even want to think about...&lt;br /&gt;&lt;br /&gt;Anyhow, the way I'm working on tackling this is by using a tier system. The way it would work is that you could easily move up/down the penalty tier, sort of like Linux &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;runlevels&lt;/span&gt;. For instance, if the teams are at equal strength and then team 1 commits a penalty, you move that team to penalty tier 1, which is a 4 on 5 disadvantage. If they commit yet another penalty, you move them to penalty tier 2, which is a 3 on 5 disadvantage. You handle the timers the same &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;way&lt;/span&gt; as stated above, as all of that behavior would be encapsulated in the tier system. Then, when the first penalty expires, you move team 1 down from penalty tier 2 to penalty tier 1 (4 on 5 disadvantage), and etc...&lt;br /&gt;&lt;br /&gt;If designed properly, any sort of flip-flopping with the team on the power-play &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;committing&lt;/span&gt; a penalty should just work because the system would simply adjust the penalty tier of both teams, or something similar.&lt;br /&gt;&lt;br /&gt;The details aren't clear yet as I'm just starting this, but I'll update this with what I've come up with as time goes on, but I'm very excited to find a decent solution!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-8404494682662583165?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/8404494682662583165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=8404494682662583165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/8404494682662583165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/8404494682662583165'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/07/designing-hockey-power-play-system.html' title='Designing A Hockey Power-Play System'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-1341347972994788612</id><published>2008-05-25T20:32:00.001-07:00</published><updated>2008-05-25T20:51:24.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='blackjack'/><title type='text'>Blackjack</title><content type='html'>Been a while since an update, been busy, blah blah blah...&lt;br /&gt;&lt;br /&gt;Now with that out of the way, Blackjack!&lt;br /&gt;&lt;br /&gt;I decided to write a Blackjack game tonight. I've been thinking about it for a while. The real reason for the game is to create an AI for Blackjack which counts cards (tactic used to take advantage of the game). I wanted to see how much I could get done in a single night, starting from scratch.&lt;br /&gt;&lt;br /&gt;In just 90 minutes, I have the following classes:&lt;br /&gt;&lt;br /&gt;Player&lt;br /&gt;Card&lt;br /&gt;Deck&lt;br /&gt;&lt;br /&gt;Player and Card are trivial. Player currently only keeps track of the money they have to bet as well as the running total of their current hand. Card has an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;enum&lt;/span&gt; for the Suit of the card. It contains a function to print out the name of the Suit (instead of just the 0,1,2,3), as well as a number holding the face value. Note that I don't care about the rules of Blackjack within the Card class which pertain to the value of each card, I follow the standard of 4 suits that hold cards valued 1-13. 4x13 = 52.&lt;br /&gt;&lt;br /&gt;Deck is where the fun happens! A Deck object has an array of 52 Cards. Basically, a Deck &lt;span style="font-style: italic;"&gt;is &lt;/span&gt;an array of 52 Cards, but you get the point. The Deck of Cards gets populated by the default &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CTOR&lt;/span&gt; using a nested for-loop. It's pretty straightforward beings that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;enums&lt;/span&gt; are treated as integers, so increasing the Suit is as simple as incrementing a counter, and the same of course goes for the face value of each card.&lt;br /&gt;&lt;br /&gt;The fun stuff comes in when you realize you need to shuffle the deck. For the sake of brevity and getting something "quick and dirty" working, I implemented a really terrible swap mechanism. It's so terrible. Wow, is it bad. Well, O.K, it's not &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; bad... Here's how it currently works:&lt;br /&gt;&lt;br /&gt;1. I maintain a list of available positions. Initially the values 0-51 appear in this list.&lt;br /&gt;2. I loop over the Deck of Cards and I first save the current element in a temporary Card object.&lt;br /&gt;3. Inside a do-while structure I generate a random number between 0-51 and then call a search function I wrote which iterates through my list of available positions.&lt;br /&gt;4. If the number is found in the list, that means it's available for swapping. The return value is set and that number is removed from the list. If it isn't found, the do-while generates another value and tries again.&lt;br /&gt;5. With the available position in hand, we swap the current Card with that in the position of the random number we generated.&lt;br /&gt;6. Now, we place our temp Card object into the position of the element we just swapped (the one in the random number position of the Deck array)&lt;br /&gt;7. All done, we've "swapped" one Card, now we do it again for the next card.&lt;br /&gt;&lt;br /&gt;See, isn't that awful? Oh well, it works, and it will get better. So, basically I've got all of the basic mechanics for a card game working, whether it be Blackjack or anything else. Now I can focus on (fixing the above "problems" and...) implementing the Blackjack logic.&lt;br /&gt;&lt;br /&gt;This just goes to show how much work you can get done in a very short period of time if you sit down and really focus. Of course, I had been thinking about the basics of how to develop this type of system, and I think that's a big reason I was able to flesh this out so quickly, but it was more about focusing on a task and just "doing it". That's the reason why I wasn't too concerned with how terrible of a Shuffle mechanism I was implementing. I knew it would work, albeit contrived and inefficient, but that's the key: Get it working, and then get it &lt;span style="font-style: italic;"&gt;better.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'll try to update this more now that Summer is here, but I will be busy with Google Summer of Code, so don't hold me to that. Cheers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-1341347972994788612?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/1341347972994788612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=1341347972994788612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/1341347972994788612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/1341347972994788612'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/05/blackjack.html' title='Blackjack'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-6137473163915523055</id><published>2008-03-21T16:51:00.000-07:00</published><updated>2008-03-21T16:59:48.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Team Game Project - Update</title><content type='html'>We had our first meeting today, it went really well. I met the girl from the music department for the first time today, she's really into the software side of the game, so that's a huge plus. At the meeting I basically gave them the run-down of my idea for the checkers game that I've mentioned in a previous post. It was more or less an absorption session for them to sort of get on the same page with me. I was/am open to another game idea, but they seemed to like it.&lt;br /&gt;&lt;br /&gt;We seem to have agreed on using C++ and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SDL&lt;/span&gt;, so I'm happy about that. I've got a pretty substantial project already completed using these technologies, so that should save us some time right off the bat.&lt;br /&gt;&lt;br /&gt;They asked me to put together a design doc for the game, and I've now done that. I may attach it to the end of this post if I remember... As I was outlining the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;gameplay&lt;/span&gt; features I'd like to have in the game, it was amazing how quickly things branched into other things. It really sparks the creative process. I imagine that increasing when the other members of the team get into it and they'll form their own ideas as well, should be exciting.&lt;br /&gt;&lt;br /&gt;The goal is to meet up again sometime soon and essentially play checkers offline and incorporate some of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;gameplay&lt;/span&gt; tweaks. This will allow us to see what will work, what won't, and what needs to be adjusted. It should also give us some other ideas too. I can't wait for this stage, should be really fun. After that, the design document should be close to finalized and then we can start breaking the project down into tasks and assign people to them.&lt;br /&gt;&lt;br /&gt;Sometime concurrently to all of this we'll be getting some server software setup to house some version control, simple website, maybe even spring up a blog just for the project, etc...&lt;br /&gt;&lt;br /&gt;All in all the meeting was a total success. We were all able to communicate freely, everyone got along, and things just flowed. Very good signs. I'll keep you updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-6137473163915523055?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/6137473163915523055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=6137473163915523055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6137473163915523055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6137473163915523055'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/team-game-project-update.html' title='Team Game Project - Update'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-2256590213681929275</id><published>2008-03-18T06:57:00.001-07:00</published><updated>2008-03-18T09:10:49.722-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ps2'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='quake'/><category scheme='http://www.blogger.com/atom/ns#' term='nes'/><category scheme='http://www.blogger.com/atom/ns#' term='pc'/><category scheme='http://www.blogger.com/atom/ns#' term='gamegear'/><category scheme='http://www.blogger.com/atom/ns#' term='madden'/><category scheme='http://www.blogger.com/atom/ns#' term='doom'/><category scheme='http://www.blogger.com/atom/ns#' term='zelda'/><category scheme='http://www.blogger.com/atom/ns#' term='xbox'/><title type='text'>You are what you play</title><content type='html'>I figured it would be a good idea to compile the list of games that I have played extensively throughout the course of my life. I'll list them in no particular order of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;favoritism&lt;/span&gt;, but chances are they will be in chronological order simply because it will be easier to remember them that way as I'm making the list. For a game to qualify for this list, I should be able to name it off the top of my head after having been removed from it for over 10 years or more. I was serious about these games! Something to note is that when I was just a wee lad playing these games, I played them because I wanted to beat them, they weren't just entertainment. I'm sure a lot of people in this realm of life are the same way, though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;NES&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Mario Brothers 3 - &lt;span style="font-style: italic;"&gt;Who didn't love this game&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Tecmo&lt;/span&gt;&lt;/span&gt; Super Bowl - &lt;span style="font-style: italic;"&gt;The godfather of football games, step aside Madden&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Smash TV - &lt;span style="font-style: italic;"&gt;Very fun, unique smash-em-up game&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Micro Machines - &lt;span style="font-style: italic;"&gt;Great racing game, surprisingly challenging in areas&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Dig Dug II&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Highly addicting, unique &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;gameplay&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Adventure Island II&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Cooler version of a Mario-style game&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Legend of Zelda&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - One of the best games ever made&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Mario Brothers&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Again, everyone loves this game&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Ms. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Pacman&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Classic&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Al &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Unser&lt;/span&gt;&lt;/span&gt; Jr. Turbo Racing&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Great simulation racing game&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Mike Tyson's Punch Out&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Talk about a fun game&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Teenage Mutant Ninja Turtles II Arcade&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Challenging &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;gameplay&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Excitebike&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Ahead of it's time. Level editor, are you kidding me? Fun!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;R.C Pro-Am&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Great racing game, pretty challenging&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;Bad News Baseball&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - Really fun&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Gunsmoke&lt;/span&gt;&lt;/span&gt; -&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; Addicting, great sleepover game&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Sega&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Sonic 2 - &lt;span style="font-style: italic;"&gt;Just like Mario, everyone loves this great game&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Battletoads&lt;/span&gt;&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;Great &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;gameplay&lt;/span&gt;&lt;/span&gt;, classic&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Madden 1995 - &lt;span style="font-style: italic;"&gt;The start of a long relationship with me and Madden&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Ultimate Mortal &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Kombat&lt;/span&gt;&lt;/span&gt; 3 - &lt;span style="font-style: italic;"&gt;One of the best games made for the platform&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Mutant League Football - &lt;span style="font-style: italic;"&gt;Great alternative take on football. I still play this game!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;NHL 1995 - &lt;span style="font-style: italic;"&gt;Really fun to play&lt;/span&gt;&lt;/li&gt;&lt;li&gt;World Series Baseball - &lt;span style="font-style: italic;"&gt;Very impressive on all levels. Home Run Derby mode is more addicting than crack.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;NBA Jam - &lt;span style="font-style: italic;"&gt;One of the most fun games I've played&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Sega Game Gear&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Joe Montana Football - &lt;span style="font-style: italic;"&gt;Absolutely great football game, better than Madden on this platform. I still play this!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Columns - &lt;span style="font-style: italic;"&gt;Basically &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;tetris&lt;/span&gt;&lt;/span&gt; with some nice aesthetics and a few tweaks. Really fun&lt;/span&gt;&lt;/li&gt;&lt;li&gt;G-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Loc&lt;/span&gt;&lt;/span&gt; Air Battle - &lt;span style="font-style: italic;"&gt;Very impressive fighter jet combat game&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Deep Duck Trouble - &lt;span style="font-style: italic;"&gt;Addicting adventure game, sort of like Mario. Challenging in areas&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Nintendo 64&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Super Mario - &lt;span style="font-style: italic;"&gt;Amazingly in-depth game. Lots of fun&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Legend of Zelda Ocarina of Time - &lt;span style="font-style: italic;"&gt;I don't think I have to explain this one. Put Mario to shame as far as I'm concerned.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Cruisin&lt;/span&gt;&lt;/span&gt;' 64 - &lt;span style="font-style: italic;"&gt;Great racing game, very addicting&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Doom 64 - &lt;span style="font-style: italic;"&gt;Not as good as the original PC version, but still a load of fun as is to be expected&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Goldeneye&lt;/span&gt;&lt;/span&gt; 007 - &lt;span style="font-style: italic;"&gt;Quite possibly the greatest &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;gameplay&lt;/span&gt;&lt;/span&gt; ever. How much fun was it playing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;multiplayer&lt;/span&gt;&lt;/span&gt; on "Facility" and guarding your side of the map with hidden proximity mines?! I still play this game today.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Wave Race 64 - &lt;span style="font-style: italic;"&gt;Highly fun and addicting game.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Pilot Wings - &lt;span style="font-style: italic;"&gt;The freedom given to the player in this game is what makes it so fun.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;WWF&lt;/span&gt;&lt;/span&gt; War Zone - &lt;span style="font-style: italic;"&gt;Super fun!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;NFL Blitz - &lt;span style="font-style: italic;"&gt;Probably one of the most fun games I've played. This was always a nice aside from my friend and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;I's&lt;/span&gt;&lt;/span&gt; intense Madden games. We took this pretty seriously though, as well.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;San Francisco Rush Racing 1 and 2 - &lt;span style="font-style: italic;"&gt;Challenges &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Goldeneye&lt;/span&gt;&lt;/span&gt; 007 for most addicting and fun games. The scope of these games is staggering.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Wayne Gretzky's 3D Hockey - &lt;span style="font-style: italic;"&gt;Great &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;gameplay&lt;/span&gt;&lt;/span&gt;, a ton of fun&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Madden (all of them) - &lt;span style="font-style: italic;"&gt;Madden is the game closest to my heart, and it really took off for me on the 64.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Playstation&lt;/span&gt;&lt;/span&gt; 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(&lt;span style="font-style: italic;"&gt;Note: This list is small due to the fact that I became semi-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;professionally&lt;/span&gt; involved with Madden, and it was just not ideal to play anything other than Madden&lt;/span&gt;)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Madden - &lt;span style="font-style: italic;"&gt;This game deserves it's own post, so I'll spare details but to say that I have traveled all over the country playing this game, and made some money in the process.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;GTA&lt;/span&gt;&lt;/span&gt; (all of them) - &lt;span style="font-style: italic;"&gt;Hands down one of the most addicting and fun games&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Midnight Club Racing - &lt;span style="font-style: italic;"&gt;Really fun, looks great too&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Medal of Honor Front Line - &lt;span style="font-style: italic;"&gt;Really solid game&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Tiger Woods Golf - &lt;span style="font-style: italic;"&gt;Who thought golf could be so fun?&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;XBox&lt;/span&gt;&lt;/span&gt; / &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;Xbox&lt;/span&gt;&lt;/span&gt; 360&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Madden - &lt;span style="font-style: italic;"&gt;See above.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;PC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(Yeah yeah, limited mainly to outdated first person shooters)&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Original Doom - &lt;span style="font-style: italic;"&gt;This game is still fun today. It needs no introduction.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Quake 3 Arena - &lt;span style="font-style: italic;"&gt;Again, another id Software masterpiece that still has people playing it online. I've spent more time with this game than I'd care to admit, including both playing and editing source code.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Final Doom - &lt;span style="font-style: italic;"&gt;More of the same: greatness.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Saints &amp;amp; Sinners Bowling&lt;/span&gt;&lt;span style="font-style: italic;"&gt; - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Really&lt;/span&gt;&lt;/span&gt; fun &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;gameplay&lt;/span&gt;&lt;/span&gt; tweaks transform bowling into a whole new realm.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Pogo Bowling&lt;/span&gt;&lt;span style="font-style: italic;"&gt; - Great casual game&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Sam &amp;amp; Max&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; - First PC game I really got into other than Doom, loads of fun.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-2256590213681929275?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/2256590213681929275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=2256590213681929275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/2256590213681929275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/2256590213681929275'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/you-are-what-you-play.html' title='You are what you play'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-6132280512387730926</id><published>2008-03-14T12:54:00.000-07:00</published><updated>2008-03-14T13:08:34.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Team Project Update</title><content type='html'>Sorry about the delay on this, by the way. The original meeting never took place, scheduling issues I suppose on part of the other programmer. I sort of anticipated that, but it's a busy time of the year, so no hard feelings. In the mean time I've been thinking about various game design ideas and some of the basic utility classes that any game may need, and how I may implement them.&lt;br /&gt;&lt;br /&gt;I had planned on coding the game in C++ because, well, it rocks, I love it, and C++ sits atop the Kingdom of Game Programming throne and shuns non-believers with it's 7ft &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;scepter&lt;/span&gt;. The other programmer seemed fine with this, but now he's suggesting we use Java with some 2D graphics lib he's found online. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Meh&lt;/span&gt;. I checked it out, seems alright I guess, but it is Java and that's usually a deal breaker for me. It does however offer us the ability of fast iteration of ideas and whatnot, so I'm willing to do it. I'm really not too stubborn on this stuff, but if I can use either C++ or Java, I'm almost always choosing C++, but I don't want to even get into that...&lt;br /&gt;&lt;br /&gt;He didn't seem to have any details on how "involved" the girl from the Music department wanted to be, so we'll see how that unravels. Along that note (get it, note?) though I have thought more about my idea of a music-driven &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;gameplay&lt;/span&gt; element.&lt;br /&gt;&lt;br /&gt;The basic abstract concept is to have a simple 2D world which is very stage oriented such that you only see the current area until you complete all tasks or whatever it may be. The visuals would be very vivid. The vision I have for one stage is that of a very drab and dramatic village which is actually more like a small neighborhood. The view is behind the little character and it's viewing 3 or 4 huts. The huts would be very dark colored with really intense colors and the sky would share that sentiment. Just picture a sky before a really terrible storm. The music would coincide with this of course. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;gameplay&lt;/span&gt; concept I've got in mind is that the music in each stage (coupled with the look of the scene) would lead the player to perform their tasks. Changes in tone, speed, etc... should be evident enough as the player moves or does something that ideally it would be apparent what they need to do. I've tossed around the idea of the character needing to save the inhabitants of these small villages, whether they be creatures or plants, or something. It would incorporate some sort of time incentive which would be pushed by the music, so as you were running out of time the music would get more dramatic sort of like in a movie. An image that comes to mind is as the clouds roll in for a storm more and more of an area is covered in shadow. I think something like that could work well with my idea.&lt;br /&gt;&lt;br /&gt;Game design is a process, so I'll just have to keep working it out, but I welcome any comments. Oh, and sorry if I just described someones favorite game that they've played for 30 years, I don't exactly "get out much". Oh, and, don't steal my idea =p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-6132280512387730926?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/6132280512387730926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=6132280512387730926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6132280512387730926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6132280512387730926'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/team-project-update.html' title='Team Project Update'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-9163415656579097715</id><published>2008-03-03T19:21:00.000-08:00</published><updated>2008-03-03T19:48:50.129-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game dev'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>How sweet the sound...</title><content type='html'>I recently contacted a friend of mine here at school to get together and work on some games. He told me he'd definitely be interested, and not only that but he knew of a girl in the music department (student) that would probably love to get involved. Turns out, he was right. I must say, I'm really excited about the notion of sitting down with someone that isn't a programmer but still wants to be involved in the process by contributing their art form to the overall "product". This will definitely be my first experience of that sort.&lt;br /&gt;&lt;br /&gt;I think what intrigues me most is the fact that sound is often ignored/overlooked in games, and I'm as guilty of that as anyone. The only game music that comes to mind that wasn't immediately replaced by my mp3 collection is Doom / Quake III Arena. Granted, I don't play a large variety of games, but the music in the ones I have played annoyed the hell out of me. It may seem weird to see a game developer (aspiring nonetheless) that doesn't play a large variety of games. Well, I guess you'd be right, it is. However, I've played games like Zelda and Sonic since I was just a tiny lad. Not to mention the fact that I learned my multiplication tables of 7 from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Tecmo&lt;/span&gt; Super Bowl for the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;NES&lt;/span&gt; (great music, by the way) and Joe Montana's Football for the Sega Game Gear. More recently though, for the past 5 years I've been a competitive gamer on the Madden tournament circuit. I tend to stick to one group of things that I like in all aspects of life, not just games. I'm sort of backwards in the sense though that my love of programming has inspired me to play as many different games as possible. Most people are the opposite. They love games, they love computers, let's program games! I digress...&lt;br /&gt;&lt;br /&gt;The part that really excites me about this is that I love music. I always have my music playing, and I honestly can't function without it. I'm huge into playing guitar as well. I'm really interested to see if/how she will propose a game idea based on something she wants to do with music. I think that would be so cool if she had an idea for something she wanted to do with music that would be instrumental (no pun intended) to the game itself, aside from just serving as a supplement. Of course, she may not have that idea, but now I have it, and anyone reading this does as well, and I'm sure someone else has already made a game like that, so go nuts!&lt;br /&gt;&lt;br /&gt;I'll keep you posted and let you know how the first meeting goes on Thursday and hopefully I'll have a constant supply of updates related to the game we make.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-9163415656579097715?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/9163415656579097715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=9163415656579097715' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/9163415656579097715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/9163415656579097715'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/how-sweet-sound.html' title='How sweet the sound...'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-999585123855652868</id><published>2008-03-02T18:59:00.000-08:00</published><updated>2008-03-03T19:52:58.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='checkers'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Checkers</title><content type='html'>I love Checkers. Chess is too complicated for my likes, but Checkers has just the right mix of fun and strategy for me. I'm currently working on my own version of the game. Basically, I'm taking Checkers and adding a few tweaks to the gameplay, and hopefully that will create a new realm for the game that will be as enjoyable as the original. The point of this post, however, is to discuss the underlying structure of the Checkers board.&lt;br /&gt;&lt;br /&gt;Coding a Checkers board is similar to coding a deck of cards: there are countless ways you could go about doing it. I tend to like to find my own way of doing something like this without looking at how someone else did it first. I think Checkers is one of the most re-done games out there, or at least tile-based board games in general are, so I could be making life a lot easier for myself but where is the fun in that?&lt;br /&gt;&lt;br /&gt;The current idea that I'm toying with on paper is that of a custom linked list that not only has links to the item in front/behind, but also left/right. It took about 20 minutes of staring at a checkerboard to come up with this due to the orientation of the board. Pieces in Checkers can only move in diagonal directions, so thinking of a traditional linked list doesn't work too well...but if you simply turn the board on it's corners, you'll see you have a linear path up each column. That's when it clicked that adding left/right linkages to a traditional linked list setup could be a neat way of representing a checkerboard.&lt;br /&gt;&lt;br /&gt;The issue I'm working out now is the initial creation of the board and the subsequent management of the board when a new game is started or a saved game is loaded. Currently I'm thinking that I'd need an array that held 64 tile objects, and then I'd create each tile object in some init function. It would go through and setup the front/back/left/right links, the occupied flag, and the color of each tile on the board. As opposed to having 64 ctor calls in a row, I thought about storing tile data in a data file of some sort and then iterating over a vector to create each tile object. Then, that would also be the mechanism to save/load games. The game would simply write out each tile's data to the file and then upon resuming the game it would load them back in.&lt;br /&gt;&lt;br /&gt;The objects would be fairly small, so I don't think this would be too terrible of an approach, but I'm sure I could do it better. I need to do it this way first, though. After all, if you sit around and think about how to make something better, you'll never end up making it AT ALL!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-999585123855652868?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/999585123855652868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=999585123855652868' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/999585123855652868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/999585123855652868'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/checkers.html' title='Checkers'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1862153997026570669.post-6014140780013043635</id><published>2008-03-02T18:55:00.000-08:00</published><updated>2008-03-02T18:59:44.966-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Intro</title><content type='html'>This blog will be dedicated to topics related to game programming. I'll discuss current projects I'm working on or thinking about, certain problems I'm having or solving, things that I have/want to do, things that I've seen others do, etc...  I'm starting this so that I'll have something to refer back to in the future, and also so that others can possibly learn something about my experiences. I'll try to keep this sort of updated, no promises. I welcome any comments from anyone as long as they are semi-intelligent... Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1862153997026570669-6014140780013043635?l=zachelko-gamedev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zachelko-gamedev.blogspot.com/feeds/6014140780013043635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1862153997026570669&amp;postID=6014140780013043635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6014140780013043635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1862153997026570669/posts/default/6014140780013043635'/><link rel='alternate' type='text/html' href='http://zachelko-gamedev.blogspot.com/2008/03/intro.html' title='Intro'/><author><name>private</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
