You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.1 KiB
118 lines
3.1 KiB
package TicTacToe;
|
|
|
|
import java.awt.Graphics;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.geom.Line2D;
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
|
|
|
|
public class TicTacToeGame extends JPanel {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
private static final int width = 600, height = 600;
|
|
private static final int maxPlayers = 3;
|
|
private static final int playFieldSize = 9;
|
|
|
|
public cell[] field;
|
|
public int playerID = 1;
|
|
public int turns = 0;
|
|
|
|
public TicTacToeGame() {
|
|
this.setSize(width, height);
|
|
setLayout(null);
|
|
initField();
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
JFrame f = new JFrame();
|
|
TicTacToeGame ttt = new TicTacToeGame();
|
|
|
|
f.add(ttt);
|
|
f.setSize(width,height);
|
|
f.setLayout(null);
|
|
f.setVisible(true);
|
|
}
|
|
|
|
public void initField() {
|
|
field = new cell[playFieldSize];
|
|
|
|
for(int i = 0; i < field.length; i++) {
|
|
field[i] = new cell(this);
|
|
add(field[i]);
|
|
}
|
|
|
|
for(int i = 0; i < field.length; i++) {
|
|
if(i < 3) {
|
|
field[i].setBounds(150 + i*100, 150 , 100, 100);
|
|
} else if (i < 6) {
|
|
field[i].setBounds(150 + i%3*100, 250 , 100, 100);
|
|
} else {
|
|
field[i].setBounds(150 + i%3*100, 350 , 100, 100);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void paintComponent(Graphics g) {
|
|
super.paintComponent(g);
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
|
|
Line2D lin = new Line2D.Float(250, 150, 250, 450);
|
|
Line2D lin2 = new Line2D.Float(350, 150, 350, 450);
|
|
Line2D lin3 = new Line2D.Float(150, 250, 450, 250);
|
|
Line2D lin4 = new Line2D.Float(150, 350, 450, 350);
|
|
|
|
g2.draw(lin);
|
|
g2.draw(lin2);
|
|
g2.draw(lin3);
|
|
g2.draw(lin4);
|
|
}
|
|
|
|
public void endTurn() {
|
|
if(checkPlayfield() != 0) {
|
|
JOptionPane.showMessageDialog(getParent(),"Player: " + playerID + " Wins!");
|
|
resetGame();
|
|
}
|
|
|
|
turns++;
|
|
if(turns >= playFieldSize) {
|
|
JOptionPane.showMessageDialog(getParent(),"Draw!");
|
|
resetGame();
|
|
}
|
|
|
|
playerID++;
|
|
if(playerID >= maxPlayers) {
|
|
playerID = 1;
|
|
}
|
|
}
|
|
|
|
public int checkPlayfield() {
|
|
if ((field[0].playerID == playerID && field[1].playerID == playerID && field[2].playerID == playerID)
|
|
|| (field[0].playerID == playerID && field[3].playerID == playerID && field[6].playerID == playerID)
|
|
|| (field[8].playerID == playerID && field[5].playerID == playerID && field[2].playerID == playerID)
|
|
|| (field[8].playerID == playerID && field[7].playerID == playerID && field[6].playerID == playerID)
|
|
|| (field[0].playerID == playerID && field[4].playerID == playerID && field[8].playerID == playerID)
|
|
|| (field[0].playerID == playerID && field[4].playerID == playerID && field[8].playerID == playerID)
|
|
|| (field[2].playerID == playerID && field[4].playerID == playerID && field[6].playerID == playerID)
|
|
|| (field[3].playerID == playerID && field[4].playerID == playerID && field[5].playerID == playerID)
|
|
|| (field[1].playerID == playerID && field[4].playerID == playerID && field[7].playerID == playerID)) {
|
|
|
|
return playerID;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public void resetGame() {
|
|
for (cell c : field) {
|
|
c.reset();
|
|
}
|
|
playerID = 1;
|
|
turns = 0;
|
|
}
|
|
|
|
|
|
}
|