For a long time I have wanted to create a puzzle game like this. The concept is simple enough. Your character needs to get from the level entrance to the level exit and along the way you must avoid traps and figure out how to use the objects in the level to proceed. Fundamentally I would say the game is very similar to the boulder puzzles found in the Dragon Warrior/Quest games. In these puzzles you must push boulders around in order to get to a hidden staircase or a treasure chest, but the boulders are positioned in such a way as to make the solution non-trivial. There are also any number of similar flash games that can be found online and tons of other games that work in a similar manner such as the Lolo games on Nintendo. The big difference between games I have played in the past and the game I wanted to make is that my game is in 3D so that you are not restricted to either top down puzzles (Lolo) or platform puzzles (Lode Runner).
Shortly after the Nintendo Wii was released videos began popping up online of people controlling their computers using the Wii Remote (Wiimote). I thought it would be a lot of fun to make my own game using the Wiimote as a controller but it wasn't until almost exactly a year after the release of the Wii that I decided it was time to do so. For no particular reason the game I decided to make was this one. The name "Puzzle Game" speaks to my complete lack of any good idea for a title. The best suggestion I have been given is Whitney's House, but I think the simple and descriptive Puzzle Game is more fitting.
Connecting your Wiimote to your computer and writing a program to interact with it is both simple and complicated at the same time. The first thing I wanted to do was determine how I was going to communicate with the Wiimote. Fortunately by the time I got around to trying to do this many very nice people had already gone through the trouble of writing Wiimote libraries for various programming languages. Without much difficulty I was able to find a good library for using a Wiimote with C. The library I used is called WiiUse and can be found at http://www.wiiuse.net Once I had a library I just needed to connect my Wiimote to my computer. Nintendo kindly decided to use bluetooth to communicate between their controllers and the Wii so all you need is a bluetooth capable computer and you are well on your way. My computer does not have built in bluetooth so I went out and purchased a Belkin bluetooth dongle. The built in Windows XP blue tooth stack mysteriously refused to recognize my Wiimote as anything other than a USB keyboard. After fighting with my computer for a while and doing research online I downloaded and installed Blue Soleil. This still did not fix my problem, but eventually I found a solution in the Wiili forums which walked me through the process of altering my bluetooh drivers. This finally solved the problem and I was able to connect and pair my Wiimote using Blue Soleil.
The first mechanic that I wanted to implement in the game was pushing a block off a ledge on one level and having it crash through the floor on a lower level. The blocks will only break through special "cracked" floor tiles and only if they are falling, which is to say that if you push a block onto a cracked tile then it won't break the tile, you have to drop the block from a higher level. I also have always found it to be very annoying in this type of game that when you push a block into a corner it is stuck there and you have to restart the level if the block is in the wrong spot. To avoid this I allow the player to pull the blocks out of corners by holding down the space bar while backing away from the block. Once this was implemented I needed to determine what other objects to include in the game. I already had staircases because I needed a way to go up levels. Next I decided to add floor tiles which you can fall through but blocks can not. I thought this would allow me to hide the path to a lower level under a block but turned out to be something I didn't find much use for in the levels I created and causes logical problems when you put one of these tiles directly above a staircase. After that I created an object that shoots fireballs which fly in a straight line until they hit something. If they hit you then you die and must restart the level. The addition of fireballs presents a threat to the player and allows me to make puzzles where you must push a block in front of the fireball creator to protect yourself or properly time your movements to avoid fireballs. Finally, at basically the same time, I added a "gate" and "bridge" object as well as a "pressure plate" tile and a "switch" object. The pressure plate and the switch can be used to turn the doors, bridges and fireball creators on and off. In the case of the pressure plates you can stand on them or push blocks on top of them to trigger them whereas the switches must be flipped and then stay that way until you flip them again. Switches and pressure plates are essential to any good puzzle game as they allow you to make more interesting puzzles. One object that I considered but ultimately decided against was an "upward air jet" which would push your character upward if you walked over it. I wanted this as a way to get upstairs without using a staircase but when I thought about it I couldn't think of a good way for you to get off the air jet once you walked onto it. I could always take the approach used in Halo where the lift pushes you to the side as it pushes you upward but I don't really like that solution so I scrapped the idea entirely, at least for now.
In my opinion, puzzle games make really good multiplayer games which should rely heavily on teamwork to complete levels and provide a non-violent, family friendly experience. I would love to add multiplayer to this project at some point, but due to time constraints (I was in the middle of applying to grad school when I started this program) multiplayer was not in scope for this project.