|
|
@ -0,0 +1,134 @@ |
|
|
|
package TicTacToe; |
|
|
|
|
|
|
|
import java.awt.Color; |
|
|
|
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 Scoreboard scoreboard; |
|
|
|
|
|
|
|
public TicTacToeGame() { |
|
|
|
this.setSize(width, height); |
|
|
|
setBackground(Color.black); |
|
|
|
setLayout(null); |
|
|
|
initField(); |
|
|
|
initScoreboard(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void initScoreboard() { |
|
|
|
scoreboard = new Scoreboard(maxPlayers); |
|
|
|
scoreboard.setBounds(150, 100, 300, 50); |
|
|
|
add(scoreboard); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void paintComponent(Graphics g) { |
|
|
|
super.paintComponent(g); |
|
|
|
Graphics2D g2 = (Graphics2D) g; |
|
|
|
g2.setColor(Color.white); |
|
|
|
|
|
|
|
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!"); |
|
|
|
scoreboard.addPoint(playerID); |
|
|
|
resetGame(); |
|
|
|
} else { |
|
|
|
turns++; |
|
|
|
if(turns >= playFieldSize) { |
|
|
|
JOptionPane.showMessageDialog(getParent(),"Draw!"); |
|
|
|
scoreboard.addPoint(0); |
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |