i have code entirely working , ran couple of small problems. one, want user receive popup when try select button marked x or o, telling them move invalid , pick another. secondly, i'm trying add quit button bottom of game, makes quit button part of game grid? solution simple , i'm not seeing it, i've tried couple different times , can't seem out of grid. help.
import java.awt.*; import java.awt.event.*; import java.util.random; import javax.swing.*; class tictactoeframe extends jframe implements actionlistener { private int[][] winningmoves = new int[][]{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {1, 4, 7}, {2, 5, 8}, {3, 6, 9}, {1, 5, 9}, {3, 5, 7} }; private jframe frame = new jframe("tic tac toe"); private jbutton buttons[] = new jbutton[10]; private jbutton quitbutton = new jbutton("quit"); private int movecount = 0; private string letter = ""; private boolean win = false; actionlistener quitlistener = new quitlistener(); public tictactoeframe() { jpanel bottom = new jpanel(); bottom.setborder(borderfactory.createlineborder(color.black)); frame.setpreferredsize(new dimension(400, 400)); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlayout(new gridlayout(3, 3)); frame.pack(); frame.setlocationrelativeto(null); quitbutton.addactionlistener(quitlistener); bottom.add(quitbutton, borderlayout.south); (int = 1; <= 9; i++) { buttons[i] = new jbutton(); frame.add(buttons[i]); buttons[i].addactionlistener(this); } frame.setvisible(true); } public void actionperformed(actionevent a) { (int = 1; <= 9; i++) { if (a.getsource() == buttons[i]) { buttons[i].settext("x"); buttons[i].setenabled(false); } } movecount++; computer(); } public void computer() { movecount++; if (buttons[1].gettext().equals("o") && buttons[2].gettext().equals("o") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[4].gettext().equals("o") && buttons[5].gettext().equals("o") && buttons[6].gettext().equals("")) { buttons[6].settext("o"); buttons[6].setenabled(false); } else if (buttons[7].gettext().equals("o") && buttons[8].gettext().equals("o") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[2].gettext().equals("o") && buttons[3].gettext().equals("o") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[5].gettext().equals("o") && buttons[6].gettext().equals("o") && buttons[4].gettext().equals("")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[8].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[1].gettext().equals("o") && buttons[3].gettext().equals("o") && buttons[2].gettext().equals("")) { buttons[2].settext("o"); buttons[2].setenabled(false); } else if (buttons[4].gettext().equals("o") && buttons[6].gettext().equals("o") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[7].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[8].gettext().equals("")) { buttons[8].settext("o"); buttons[8].setenabled(false); } else if (buttons[1].gettext().equals("o") && buttons[4].gettext().equals("o") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[2].gettext().equals("o") && buttons[5].gettext().equals("o") && buttons[8].gettext().equals("")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[3].gettext().equals("o") && buttons[6].gettext().equals("o") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[4].gettext().equals("o") && buttons[7].gettext().equals("o") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[5].gettext().equals("o") && buttons[8].gettext().equals("o") && buttons[2].gettext().equals("")) { buttons[2].settext("o"); buttons[2].setenabled(false); } else if (buttons[6].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[1].gettext().equals("o") && buttons[7].gettext().equals("o") && buttons[4].gettext().equals("")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[2].gettext().equals("o") && buttons[8].gettext().equals("o") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[3].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[6].gettext().equals("")) { buttons[6].settext("o"); buttons[6].setenabled(false); } else if (buttons[1].gettext().equals("o") && buttons[5].gettext().equals("o") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[5].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[1].gettext().equals("o") && buttons[9].gettext().equals("o") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[3].gettext().equals("o") && buttons[5].gettext().equals("o") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[7].gettext().equals("o") && buttons[5].gettext().equals("o") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[7].gettext().equals("o") && buttons[3].gettext().equals("o") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[2].gettext().equals("x") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[4].gettext().equals("x") && buttons[5].gettext().equals("x") && buttons[6].gettext().equals("")) { buttons[6].settext("o"); buttons[6].setenabled(false); } else if (buttons[7].gettext().equals("x") && buttons[8].gettext().equals("x") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[2].gettext().equals("x") && buttons[3].gettext().equals("x") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[5].gettext().equals("x") && buttons[6].gettext().equals("x") && buttons[4].gettext().equals("")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[8].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[3].gettext().equals("x") && buttons[2].gettext().equals("")) { buttons[2].settext("o"); buttons[2].setenabled(false); } else if (buttons[4].gettext().equals("x") && buttons[6].gettext().equals("x") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[7].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[8].gettext().equals("")) { buttons[8].settext("o"); buttons[8].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[4].gettext().equals("x") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[2].gettext().equals("x") && buttons[5].gettext().equals("x") && buttons[8].gettext().equals("")) { buttons[8].settext("o"); buttons[8].setenabled(false); } else if (buttons[3].gettext().equals("x") && buttons[6].gettext().equals("x") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[4].gettext().equals("x") && buttons[7].gettext().equals("x") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[5].gettext().equals("x") && buttons[8].gettext().equals("x") && buttons[2].gettext().equals("")) { buttons[2].settext("o"); buttons[2].setenabled(false); } else if (buttons[6].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[7].gettext().equals("x") && buttons[4].gettext().equals("")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[2].gettext().equals("x") && buttons[8].gettext().equals("x") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[3].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[6].gettext().equals("")) { buttons[6].settext("o"); buttons[6].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[5].gettext().equals("x") && buttons[9].gettext().equals("")) { buttons[9].settext("o"); buttons[9].setenabled(false); } else if (buttons[5].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[9].gettext().equals("x") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[3].gettext().equals("x") && buttons[5].gettext().equals("x") && buttons[7].gettext().equals("")) { buttons[7].settext("o"); buttons[7].setenabled(false); } else if (buttons[7].gettext().equals("x") && buttons[5].gettext().equals("x") && buttons[3].gettext().equals("")) { buttons[3].settext("o"); buttons[3].setenabled(false); } else if (buttons[7].gettext().equals("x") && buttons[3].gettext().equals("x") && buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[1].gettext().equals("x") && buttons[5].gettext().equals("o") && buttons[9].gettext().equals("x")) { buttons[6].settext("o"); buttons[6].setenabled(false); } else if (buttons[3].gettext().equals("x") && buttons[5].gettext().equals("o") && buttons[7].gettext().equals("x")) { buttons[4].settext("o"); buttons[4].setenabled(false); } else if (buttons[5].gettext().equals("")) { buttons[5].settext("o"); buttons[5].setenabled(false); } else if (buttons[1].gettext().equals("")) { buttons[1].settext("o"); buttons[1].setenabled(false); } else { if (movecount >= 9) { checkwinner(); } else { random(); } } checkwinner(); } public void random() { random x = new random(); int y = 1 + x.nextint(9); if (buttons[y].gettext().equals("o") || buttons[y].gettext().equals("x")) { random(); } else { buttons[y].settext("o"); buttons[y].setenabled(false); } } class quitlistener implements actionlistener { public void actionperformed(actionevent evt) { system.exit(0); } } public void checkwinner() { (int = 0; <= 7; i++) { if (buttons[winningmoves[i][0]].gettext().equals(buttons[winningmoves[i][1]].gettext()) && buttons[winningmoves[i][1]].gettext().equals(buttons[winningmoves[i][2]].gettext()) && !buttons[winningmoves[i][0]].gettext().equals("")) { win = true; } } if (movecount % 2 == 0) { letter = "o"; } else { letter = "x"; } if (win == true) { int select = joptionpane.showconfirmdialog(null, letter + " wins! play again?"); if(select == joptionpane.yes_option) { (int = 1; <= 9; i++) { buttons[i].settext(""); buttons[i].setenabled(true); movecount = 0; win = false; } } else { if(select == joptionpane.no_option) { system.exit(0); } } } else if (movecount >= 9 && win == false) { int select = joptionpane.showconfirmdialog(null, "it's tie! play again?"); if(select == joptionpane.yes_option) { (int = 1; <= 9; i++) { buttons[i].settext(""); buttons[i].setenabled(true); movecount = 0; win = false; } } else { if(select == joptionpane.no_option) { system.exit(0); } } } } }
runner:
import javax.swing.jframe; public class tictactoerunner { public static void main(string[] args) { jframe frame = new tictactoeframe(); frame.setvisible(true); } }
- in jbutton's actionlistener, can button has been pressed via actionevent's
getsource()
method. callgettext()
on jbutton , if holds offending text, show error joptionpane. or usebuttons[i]
variable within loop, since points offending jbutton. - if go route, be sure exit button has own separate actionlistener. otherwise may run trouble. inner anonymous class work here.
- you've set layout of entire gui, jframe, gridlayout, , boxes grid whether or not. don't this. leave jframe's contentpane use default borderlayout, create new jpanel tic tac toe grid, give gridlayout, add jframe borderlayout.center, , add bottom jpanel jframe borderlayout.page_end.
side recommendations unrelated questions:
- get rid of redundancy. unnecessarily complex code hard debug code.
- separate program logic (the logic underlying tic-tac-toe game) gui code. make easier debug , enhance game.
- in future, strive ask single specific question yours appears multi-parter.
Comments
Post a Comment