Table of Contents
Joust
A game I learned about from Berkeley's Professor Dan Garcia's GamesCrafters Site Two knights on a chess board that move like chess, but as they leave a square, it is “burned” (uninhabitable for either player). Players alternate moving their knight trying to avoid being the loser who is left with no place to go. This is a real game that has strategy
Download and run joust_sfhs_2020.jar to see a working version of the game (On macs you have to go to Security and press “Open anyway” since it is not from an Apple identified developer).
This lab is set up so you can discover how to program conditional statements(if..then) and iterations (loops). The starter code has graphics and fancy things like handling input from the mouse. Your job will be to finish writing some vital boolean methods that will make the code work. Here is a zip file Joust.zip containing the starter source code for four classes.
Under the hood
- The
Joust
class is a control class that handles the user's activity. If the user is hovering over a valid move, then that particularSquare
is told it is highlighted. If the user clicks on a valid move, then the currentKnight
burns the current square, and is moved to the new location. If it is not a game winning move, the current player switches to the other knight. If it is a victory for some one, a reset button is shown to start a new game. Square
objects start out either black or white (like a chess board) and become red when they are “burned” It draws itself, so it needs to know if it is highlighted. Write theisBurned
method by checking what the color is. If you like, you can change the actual Colors used for black, white and burned squares.- Each player is a
Knight
(the player's piece) which needs to keep track of its location, what color it is. If you want to have other pieces, you can see how the knight icon is a unicode character. You can modify that if you wish with a different one https://www.chessvariants.com/d.font/unicode.html - The game's
Board
has a collection ofSquare
objects and twoKnight
objects (one for each player. It also keeps track of whose turn it is, what are legal moves, and whether the game is over (and who the winner is). Here you have to write two methods, both involving the possible moves. - Hints
- You'll need to use the
isBurned
method from theSquare
class. - You also need to look at certain squares. The knight can either move one over and two across, or two over and one across.
- You might get
indexOutOfBounds
runtime errors if you forget to see if you are looking for a square that is off the board. Thank goodness Java uses 'short circut' conditional statements. Good thing, since it would cause a runtime error. Once the first part of the && is false, that is enough to know the whole expression is false.
Now What?
Once you have it going, you can customize it:
- Change the colors or the appearance of the Knights
- Make the “Misere” version (where the one who can't move is the winner)
- Change the size of the board to 5 by 5 board or a rectangular board
- Make a new project with some of these classes to write a Knight's tour puzzle or a 8 Queens puzzle, or for any size board.