- added dynamic scaling for GameBoard and ButtonRow
- added handling for button press in ButtonRow
This commit is contained in:
parent
27f4b72fe2
commit
abd2cf6e86
1 changed files with 58 additions and 20 deletions
|
@ -19,12 +19,12 @@
|
||||||
package de.itsblue.ConnectFour;
|
package de.itsblue.ConnectFour;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import de.itsblue.ConnectFour.GameBoard;
|
|
||||||
import de.itsblue.ConnectFour.Plate.PlateType;
|
import de.itsblue.ConnectFour.Plate.PlateType;
|
||||||
|
|
||||||
public class ConnectFour extends JFrame {
|
public class ConnectFour extends JFrame implements ActionListener {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -34,64 +34,102 @@ public class ConnectFour extends JFrame {
|
||||||
|
|
||||||
private ButtonRow buttonRow;
|
private ButtonRow buttonRow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
ConnectFour() {
|
ConnectFour() {
|
||||||
// Constructor
|
|
||||||
|
|
||||||
// initialize window
|
// initialize window
|
||||||
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
|
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
this.setTitle("Connect 4");
|
this.setTitle("Connect 4");
|
||||||
|
|
||||||
this.setPreferredSize(new Dimension(600, 600));
|
this.setPreferredSize(new Dimension(600, 600));
|
||||||
|
|
||||||
|
// initialize layout
|
||||||
this.getContentPane().setLayout(new GridBagLayout());
|
this.getContentPane().setLayout(new GridBagLayout());
|
||||||
GridBagConstraints c = new GridBagConstraints();
|
GridBagConstraints c = new GridBagConstraints();
|
||||||
|
|
||||||
// Board initilisieren
|
// initialize GameBoard
|
||||||
this.buttonRow = new ButtonRow(7);
|
|
||||||
this.gameBoard = new GameBoard();
|
this.gameBoard = new GameBoard();
|
||||||
|
|
||||||
|
// initialize ButtonRow
|
||||||
|
this.buttonRow = new ButtonRow(this.gameBoard.getColumns());
|
||||||
|
buttonRow.addActionListenerToButtons(this);
|
||||||
|
|
||||||
|
// add components to window
|
||||||
c.gridy = 0;
|
c.gridy = 0;
|
||||||
add(buttonRow, c);
|
add(buttonRow, c);
|
||||||
|
|
||||||
c.gridy = 1;
|
c.gridy = 1;
|
||||||
this.add(gameBoard, c);
|
this.add(gameBoard, c);
|
||||||
|
|
||||||
// plate in das Board einfügen
|
|
||||||
gameBoard.insertPlate(new Plate(PlateType.O), 1);
|
|
||||||
|
|
||||||
// ein paar mehr plates einfügen
|
|
||||||
for (int i = 0; i < 7; i++) {
|
|
||||||
String res = gameBoard.insertPlate(new Plate(PlateType.X), i);
|
|
||||||
// wen das Rückgabewert weder "ok" noch "err" ist, hat jemand gewonnen
|
|
||||||
if (res != "ok" && res != "err")
|
|
||||||
System.out.println(PlateType.valueOf(res));
|
|
||||||
}
|
|
||||||
|
|
||||||
// board kann mit board.clearBoard(); geleert werden.
|
|
||||||
|
|
||||||
// finish up
|
// finish up
|
||||||
this.pack();
|
this.pack();
|
||||||
this.setVisible(true);
|
this.setVisible(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to handle the next plate insertion
|
||||||
|
*
|
||||||
|
* @param column The column to insert the plate into
|
||||||
|
*/
|
||||||
|
private void insertNextPlate(int column) {
|
||||||
|
// TODO: change player everytime
|
||||||
|
String res = this.gameBoard.insertPlate(new Plate(PlateType.X), column);
|
||||||
|
|
||||||
|
if (res == "err") {
|
||||||
|
// beep in case of error
|
||||||
|
Toolkit.getDefaultToolkit().beep();
|
||||||
|
} else if (res != "ok" && res != "err") {
|
||||||
|
PlateType winnerType = PlateType.valueOf(res);
|
||||||
|
System.out.println("A player won: " + winnerType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to check if the window is in landscape or portrait mode
|
||||||
|
*
|
||||||
|
* @return <code>true</code> if window is in landscape mode, <code>false</code>
|
||||||
|
* if it is not
|
||||||
|
*/
|
||||||
public boolean landscape() {
|
public boolean landscape() {
|
||||||
return this.getSize().height < this.getSize().width;
|
return this.getSize().height < this.getSize().width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override validate in order to resacle the components when the window is
|
||||||
|
* rescaled
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void validate() {
|
public void validate() {
|
||||||
|
// determine optimal size for board
|
||||||
Dimension boardSize = new Dimension();
|
Dimension boardSize = new Dimension();
|
||||||
boardSize.width = this.landscape() ? this.getSize().height / 2 : this.getSize().width / 2;
|
boardSize.width = this.landscape() ? this.getSize().height / 2 : this.getSize().width / 2;
|
||||||
boardSize.height = this.landscape() ? this.getSize().width : this.getSize().height;
|
boardSize.height = this.landscape() ? this.getSize().width : this.getSize().height;
|
||||||
|
|
||||||
|
// set board size
|
||||||
this.gameBoard.setPreferredSize(boardSize);
|
this.gameBoard.setPreferredSize(boardSize);
|
||||||
|
// set button row size
|
||||||
this.buttonRow.setPreferredSize(
|
this.buttonRow.setPreferredSize(
|
||||||
new Dimension(this.gameBoard.getPreferredSize().width, this.gameBoard.getPreferredSize().height / 7));
|
new Dimension(this.gameBoard.getPreferredSize().width, this.gameBoard.getPreferredSize().height / 7));
|
||||||
|
|
||||||
|
// call super
|
||||||
super.validate();
|
super.validate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Catch the actions from the button row
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (e.getSource() instanceof PlateInsertButton) {
|
||||||
|
// if the action source was a PlateInsertButton
|
||||||
|
// -> trigger a plate insertion
|
||||||
|
PlateInsertButton source = (PlateInsertButton) e.getSource();
|
||||||
|
this.insertNextPlate(source.getIndex());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(final String[] args) {
|
public static void main(final String[] args) {
|
||||||
System.out.println(new ConnectFour());
|
System.out.println(new ConnectFour());
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue