Displaying the Board
The weekend is over, which means I don’t have much time to develop at night due to work. I tried making a simple grid board using lines, however drawing lines in XNA is much more difficult than in graphic libraries I’ve used before, like OpenGL, AWT, Allegro, and ClanLib. I was able to find some documentation on how to draw lines in XNA, but I was just really looking for something to draw a simple line from one x,y coordinate to another x,y coordinate. To avoid this complication, I went ahead and created a simple 32×32 pixel tile, with dark lines on the left and bottom edges. I repeated this tile for each cell in the grid, which will be used for the game board. I also created a simple transition from the title screen to the game board screen when the “A” button is pressed on the controller.
Additionally, I need to find a way to easily translate my code from an XBox target build to a Windows target build. I would much rather do my simple tests under Windows, and just use the XBox for testing major releases and milestones. Currently, I have two separate projects for building on XBox and on Windows, but it will quickly become a pain to copy source files and resources between the two projects.
The sprite images for the resistors and wires have now been created in Gimp. I will try to convert these to a sprite sheet later for efficiency, but for now I’m just going to leave them a separate images. Each is a 32×32 pixel image, which should fit perfectly into the board cells. The wires are 6 pixels in width, and centered horizontally so that it will align correctly when rotated. I created resistor sprites for 0 through 9, an “I” wire, an “L” wire, and a light (just a circle for now). Currently, I’m going to make it so that the light can be wired from any side, along with the light output from any side.
Finally, I did a little more conceptual level design, which can be seen in the scanned image below. Each level will be composed of multiple stages. Once all stages are complete, the player will move to the next level, which will introduce new pieces or gameplay mechanics.
Since this is intended to be a simple game, I won’t actually use the terms “amp”, “electrical current”, or “volt” in the game, but instead just use an lightning bolt icon to represent the units. For simplicity, voltage, current, and resistance units will all be the same. This may upset electronics purists, but I don’t want players to be constantly calculating Ohm’s Law in their head while playing a puzzle game. If the emitter outputs 5 units and it runs through a 2-resistor, then the output from that resistor will be 3 units. For now, I will call this nonsensical unit “Elex” and add a warning about the game not being completely scientifically accurate.
Level 1 will start out easy using the lowest resistors, 1 through 3, and only I and L wires. Later Level 1 stages will have the Elex increased from the power source, and the maximum values for the lights will be increased. Again, if the player connects the wire to the light with the Elex value higher than this value, then the light will bust and the game is over. If Elex is lower, then the light will be dimmer based on the current Elex value. Having greater luminosity will result in a higher score at the end of the stage. A perfect bonus will be awarded if all lights are running with the maximum luminosity value. Additionally, in later Level 1 stages the player will be required to connect two lights instead of one.
Level 2 will continue to increase the types of resistors used, by including one through nine. Some of the cells may be blocked out to make the player construct more complex paths.
Level 3 will introduce the T wire, which is used for splitting. The player will be required to manage two active wires concurrently. Hopefully, I will be able to display the Elex value next to the wire as it fills. Splitting will cause the unit value to split in half for each path. Block cells may be used to force the player to use the T wire.
Level 4 will add resistors with two color bands, expanding the resistor values all the way up to 100. An “expert” or “hard” mode could hide the display of the resistor value on the sprite, requiring the player to calculate the resistor value in their head based on the colors. Since this is a game just to teach the color values, the third multiplier band and fourth tolerance band will not be used like on actual resistors.
Level 5, if implemented, will include capacitors, but I haven’t thought much about how those will be used in the game. Somehow they will be used to store electrical units.