Hey guys trying to make this OO but no luck..can anyone help?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class Main implements ActionListener {
public static void main(String[] args)
{
new Main();// Calling the class construtor.
}//end main
//Setting up ALL the variables
JFrame window = new JFrame("Angels and Demons");
//menubar
JMenuBar mnuMain = new JMenuBar();
JMenuItem mnuNewGame = new JMenuItem("New Game"),
mnuInstruction = new JMenuItem("Instructions"),
mnuExit = new JMenuItem("Exit"),
mnuAbout = new JMenuItem("About");
//Buttons
JButton btn1v1 = new JButton("Player vs Player"),
btn1vCPU = new JButton("Player vs CPU"),
btnBack = new JButton("<--back");
JButton btnEmpty[] = new JButton[17];
//Panel
JPanel pnlNewGame = new JPanel(),
pnlNorth = new JPanel(),
pnlSouth = new JPanel(),
pnlTop = new JPanel(),
pnlBottom = new JPanel(),
pnlPlayingField = new JPanel();
JLabel lblTitle = new JLabel("Angels and Demons");
JTextArea txtMessage = new JTextArea();
final int winCombo[][] = new int[][] {
{1, 2, 3, 4}, {5 ,6 ,7, 8}, {9, 10, 11, 12},
{13, 14, 15, 16}, {1, 5, 9, 13}, {2, 6, 10, 14},
{3, 7, 11, 15}, {4, 8, 12, 16}, {1, 6, 11, 16}, {4, 7, 10, 13}
/*Horizontal Wins*/ /*Vertical Wins*/ /*Diagonal Wins*/
};
final int X = 450, Y = 300, color = 200;
boolean inGame = false;
boolean win = false;
boolean btnEmptyClicked = false;
String message;
int turn = 1;
int wonNumber1 = 1, wonNumber2 = 1, wonNumber3 = 1, wonNumber4 = 1;
//--------------------------------CONSTRUCTOR---------------------------------------------------------
public Main()
{ //Setting game properties and layout and sytle...
//Setting window properties:
window.setSize(X, Y);
window.setLocation(450, 260);
window.setResizable(false);
window.setLayout(new BorderLayout());
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Setting Panel layouts and properties
pnlNewGame.setLayout(new GridLayout(2, 1, 2, 10));
pnlNorth.setLayout(new FlowLayout(FlowLayout.CENTER));
pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER));
pnlNorth.setBackground(new Color(color-20, color-20, color-20));
pnlSouth.setBackground(new Color(color, color, color));
pnlTop.setBackground(new Color(color, color, color));
pnlBottom.setBackground(new Color(color, color, color));
pnlTop.setLayout(new FlowLayout(FlowLayout.CENTER));
pnlBottom.setLayout(new FlowLayout(FlowLayout.CENTER));
pnlNewGame.setBackground(Color.blue);
//Adding menu items to menu bar
mnuMain.add(mnuNewGame);
mnuMain.add(mnuInstruction);
mnuMain.add(mnuAbout);
mnuMain.add(mnuExit);//---->Menu Bar Complete
//Adding buttons to NewGame panel
pnlNewGame.add(btn1v1);
pnlNewGame.add(btn1vCPU);
//Adding Action Listener to all the Buttons and Menu Items
mnuNewGame.addActionListener(this);
mnuExit.addActionListener(this);
mnuInstruction.addActionListener(this);
mnuAbout.addActionListener(this);
btn1v1.addActionListener(this);
btn1vCPU.addActionListener(this);
btnBack.addActionListener(this);
//Setting up the playing field
pnlPlayingField.setLayout(new GridLayout(4, 4)); //4x4 grid
pnlPlayingField.setBackground(Color.white);
for(int i=1; i<=16; i++)
{
btnEmpty[i] = new JButton();
btnEmpty[i].setBackground(new Color(220, 220, 220));
btnEmpty[i].addActionListener(this);
pnlPlayingField.add(btnEmpty[i]);
}
//Adding everything needed to pnlNorth and pnlSouth
pnlNorth.add(mnuMain);
pnlSouth.add(lblTitle);
//Adding to window and Showing window
window.add(pnlNorth, BorderLayout.NORTH);
window.add(pnlSouth, BorderLayout.CENTER);
window.setVisible(true);
}
//----------------------------------END CONSTRUCTOR------------------------------------------------------
//-------------------START OF ACTION PERFORMED CLASS-------------------------//
public void actionPerformed(ActionEvent click)
{
Object source = click.getSource();
for(int i=1; i<=16; i++)
{
if(source == btnEmpty[i] && turn < 17)
{
btnEmptyClicked = true;
//this means that angel will go first (player1) then demon (player2)
if(!(turn % 2 == 0))
btnEmpty[i].setText("Angel");
else
btnEmpty[i].setText("Demon");
btnEmpty[i].setEnabled(false);
pnlPlayingField.requestFocus();
turn++;
}//end IF
}//end loop
if(btnEmptyClicked)
{
checkWin();
btnEmptyClicked = false;
}//emd IF
if(source == mnuNewGame)
{
clearPanelSouth();
pnlSouth.setLayout(new GridLayout(2, 1, 2, 5));
pnlTop.add(pnlNewGame);
pnlBottom.add(btnBack);
pnlSouth.add(pnlTop);
pnlSouth.add(pnlBottom);
}
else if(source == btn1v1)
{
if(inGame)
{
int option = JOptionPane.showConfirmDialog(null, "If you start a new game," +
"your current game will be lost..." + "\n" +
"Are you sure you want to continue?",
"Quit Game?" ,JOptionPane.YES_NO_OPTION);
if(option == JOptionPane.YES_OPTION)
{
inGame = false;
}//END INNER INNER IF
}//END INNER IF
if(!inGame)
{
btnEmpty[wonNumber1].setBackground(new Color(220, 220, 220));
btnEmpty[wonNumber2].setBackground(new Color(220, 220, 220));
btnEmpty[wonNumber3].setBackground(new Color(220, 220, 220));
btnEmpty[wonNumber4].setBackground(new Color(220, 220, 220));
turn = 1;
for(int i=1; i<17; i++)
{
btnEmpty[i].setText("");
btnEmpty[i].setEnabled(true);
}//end loop
win = false;
showGame();
}
}
//If the user clicks on the button to play against the computer
else if(source == btn1vCPU)
{
//HAVENT TACKELD THIS YET
}
else if(source == mnuExit)
{
int option = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?",
"Exit Game" ,JOptionPane.YES_NO_OPTION);
if(option == JOptionPane.YES_OPTION)
System.exit(0);
}
else if(source == mnuInstruction || source == mnuAbout)
{
clearPanelSouth();
String message = "";
txtMessage.setBackground(new Color(color, color, color));
if(source == mnuInstruction)
{
message = "Instructions:\n\n" +
"Your goal is to be the first player to get 4 pieces in a\n" +
". (horizontally or vertically)\n" +
"\n";
}
else {
message = "About:\n\n" +
;
}//END NESTED IF
txtMessage.setEditable(false);
txtMessage.setText(message);
pnlSouth.setLayout(new GridLayout(2, 1, 2, 5));
pnlTop.add(txtMessage);
pnlBottom.add(btnBack);
pnlSouth.add(pnlTop);
pnlSouth.add(pnlBottom);
}
else if(source == btnBack)
{
if(inGame)
showGame();
else {
clearPanelSouth();
pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER));
pnlNorth.setVisible(true);
pnlSouth.add(lblTitle);
}//end nested IF
}
pnlSouth.setVisible(false);
pnlSouth.setVisible(true);
}//--------------------------END OF ACTION PERFORMED CLASS-------------------------//
/*
----------------------------------
Start of all the other methods. |
----------------------------------
*/
public void showGame()
{ // Shows the Playing Field
// *IMPORTANT*- Does not start out brand new (meaning just shows what it had before)
clearPanelSouth();
inGame = true;
pnlSouth.setLayout(new BorderLayout());
pnlSouth.add(pnlPlayingField, BorderLayout.CENTER);
pnlPlayingField.requestFocus();
}
public void checkWin() { // checks if there are 4 symbols in a row vertically, diagonally, or horizontally.
// then shows a message and disables buttons.
for(int i=0; i<8; i++) {
if
(
!btnEmpty[winCombo[i][0]].getText().equals("") &&
btnEmpty[winCombo[i][0]].getText().equals(btnEmpty[winCombo[i][1]].getText()) &&
btnEmpty[winCombo[i][1]].getText().equals(btnEmpty[winCombo[i][2]].getText()) &&
btnEmpty[winCombo[i][2]].getText().equals(btnEmpty[winCombo[i][3]].getText())
)
/*
The way this checks the if someone won is:
First: it checks if the btnEmpty[x] is not equal to an empty string- x being the array number
inside the multi-dementional array winCombo[checks inside each of the 7 sets][the first number]
Secong: it checks if btnEmpty[x] is equal to btnEmpty[y]- x being winCombo[each set][the first number]
y being winCombo[each set the same as x][the second number] (So basically checks if the first and
second number in each set is equal to each other)
Third: it checks if btnEmtpy[y] is eual to btnEmpty[z]- y being the same y as last time and z being
winCombo[each set as y][the third number]
Conclusion: So basically it checks if it is equal to the btnEmpty is equal to each set of numbers
*/
{
win = true;
wonNumber1 = winCombo[i][0];
wonNumber2 = winCombo[i][1];
wonNumber3 = winCombo[i][2];
wonNumber4 = winCombo[i][3];
btnEmpty[wonNumber1].setBackground(Color.green);
btnEmpty[wonNumber2].setBackground(Color.green);
btnEmpty[wonNumber3].setBackground(Color.green);
btnEmpty[wonNumber4].setBackground(Color.green);
break;
}
}
if(win || (!win && turn>16))
{
if(win)
{
if(turn % 2 == 0)
message = "Angel has won!";
else
message = "Demon has won!";
win = false;
}
else if(!win && turn>16)
{
message = "Both players have tied!\nBetter luck next time.\n\nClick on 'New Game' to start again";
}//end inner IF
JOptionPane.showMessageDialog(null, message);
for(int i=1; i<=16; i++)
{
btnEmpty[i].setEnabled(false);
}
}//end outer if
}
public void clearPanelSouth() { //Removes all the possible panels
//that pnlSouth, pnlTop, pnlBottom
//could have.
pnlSouth.remove(lblTitle);
pnlSouth.remove(pnlTop);
pnlSouth.remove(pnlBottom);
pnlSouth.remove(pnlPlayingField);
pnlTop.remove(pnlNewGame);
pnlTop.remove(txtMessage);
pnlBottom.remove(btnBack);
}
}//end class