/************************************************************************\
* ----------------------------- *
* Introduction to Programming *
* ----------------------------- *
* Name: Thomas Zaki *
* Last Modified: 05/12/08 *
* Title: QuoridorG.java *
* Description: Main Game Class *
* *
\************************************************************************/
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class QuoridorG
{
public static void main (String [] beans)
{
JFrame frame = new JFrame();
frame.setTitle("Quoridor : By Thomas Zaki");
//frame.setSize(700, 500);
frame.setSize(693, 498);
frame.setFocusable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
Scanner in = new Scanner(System.in);
//used to store selection from Scanner
String choice = new String();
//Booleans to test whether game is over,
// if a piece was moved,
// or if a wall was placed
boolean isGameOver = false;
boolean moved = false;
boolean placed = false;
//Create Players for the game and add the first two
// to the array list because they are always used
int numPlayers = 2;
final ArrayList<Player> players = new ArrayList<Player>();
Player p1 = new Player(4, 8, Player.UP, "Player 1", "1", 1, 10, Color.RED);
players.add(p1);
//note that there is a slight difference in the definition of
// the winning line for DOWN and RIGHT (indicated by _G).
// This is caused by the graphical representation.
Player p2 = new Player(4, 0, Player.DOWN_G, "Player 2", "2", 2, 10, Color.BLUE);
players.add(p2);
Player p3 = new Player(0, 4, Player.RIGHT_G, "Player 3", "3", 3, 5, Color.GREEN);
Player p4 = new Player(8, 4, Player.LEFT, "Player 4", "4", 4, 5, Color.YELLOW);
//Create an object that stores the current player
// taking a turn to simplify the code for each turn
Player currentPlayer = p1;
Player winner = new Player();
int player = 1;
JOptionPane.showMessageDialog(null, "Welcome to Quoridor!", null, 1);
numPlayers = Integer.parseInt(JOptionPane.showInputDialog(
null, "Enter number of players [2 or 4]", "New Game Setup", 1));
//edit players and some player stats if there are 4 players
if(numPlayers == 4)
{
p1.setNumWalls(5);
p2.setNumWalls(5);
players.add(p3);
players.add(p4);
}
//Get player names
for(int i = 0; i < players.size(); i++)
{
players.get(i).setName(JOptionPane.showInputDialog(
null, "Enter Player " + (i + 1) + "'s Name", "New Game Setup", 1));
}
final BoardComponent board = new BoardComponent(players);
final SidePanel side = new SidePanel(board, players);
board.add(side);
frame.add(board, BorderLayout.CENTER);
frame.add(side, BorderLayout.EAST);
class MoveListener implements KeyListener
{
public void keyPressed(KeyEvent e)
{
boolean moved = false;
if(e.getKeyCode() == KeyEvent.VK_UP)
moved = players.get(side.getPlayer() - 1).movePiece("UP", board);
if(e.getKeyCode() == KeyEvent.VK_DOWN)
moved = players.get(side.getPlayer() - 1).movePiece("DOWN", board);
if(e.getKeyCode() == KeyEvent.VK_LEFT)
moved = players.get(side.getPlayer() - 1).movePiece("LEFT", board);
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
moved = players.get(side.getPlayer() - 1).movePiece("RIGHT", board);
//System.out.println(moved);
if(moved)
{
if(players.get(side.getPlayer() - 1).checkWin())
{
board.repaint();
JOptionPane.showMessageDialog(
null, "Congratulations, " + players.get(side.getPlayer() - 1).getName() +
", YOU WIN!", null, 1);
System.exit(-1);
}
side.incPlayer();
if (side.getPlayer() > players.size())
side.setPlayer(1);
}
board.repaint();
side.refresh();
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
KeyListener move = new MoveListener();
frame.addKeyListener(move);
frame.setVisible(true);
}//end main
}//end Quoridor class