Mastermind Game Java Swing, MouseListener -
i working on mastermind game java object oriented programming , have working except 1 part of code
if(ug[0].geticon() == compguess[0].geticon() && ug[1].geticon() == compguess[1].geticon() && ug[2].geticon() == compguess[2].geticon() && ug[3].geticon() == compguess[3].geticon()) { joptionpane.showmessagedialog(f1, "you have guessed them coorect!", "mastermind: test mind", joptionpane.information_message); submit.setenabled(false); compguess[0].setenabled(false); compguess[1].setenabled(false); compguess[2].setenabled(false); compguess[3].setenabled(false); compguess[0].setvisible(true); compguess[1].setvisible(true); compguess[2].setvisible(true); compguess[3].setvisible(true); ug[0].setenabled(false); ug[1].setenabled(false); ug[2].setenabled(false); ug[3].setenabled(false); system.exit(0); }
i adding full code because above code ^^ show's problem is, can't figure out why it's not working way supposed unless through original full code. yes, may take minute or 2 read through, problem @ hand. can comment out audio part , change icon's. when run, computer guess not display until have guessed correct that's problem. if have guessed correctly, game not until have guessed 10 times. can't figure out why happening. can please help?
import java.awt.*; import java.io.*; import javax.swing.*; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.sound.sampled.audioinputstream; import javax.sound.sampled.audiosystem; import javax.sound.sampled.*; public class mastermind extends jframe { public static int found = 0; public static int guesses = 0; public final jtextfield guess = new jtextfield(20); public static jformattedtextfield ng = new jformattedtextfield(); public mastermind() { final jframe f1 = new jframe("mastermind: can win?"); f1.setdefaultcloseoperation(jframe.exit_on_close); //runs song/midi upon start of game int replys = joptionpane.showconfirmdialog(f1, "welcome mastermind! \n t game test brain." + "\n\n\nwould play?", "mastermind: test brain!", joptionpane.yes_no_option); if(replys == joptionpane.yes_option) { try { //audioformat audioformat; //audioinputstream audioinputstream; //sourcedataline sourcedataline; file soundfile = new file("swfinal.mid"); audioinputstream ai = audiosystem.getaudioinputstream(soundfile); clip clip = audiosystem.getclip(); clip.open(ai); clip.start(); } catch (exception f) {} } else { system.exit(0); } //makes panel display computer's guess final jpanel gamepanel = new jpanel(new gridlayout(1,4,5,5)); f1.add(gamepanel); gamepanel.setborder(borderfactory.creatematteborder(5,5,5,5, color.green)); gamepanel.setbackground(color.black); //the rules on how play joptionpane.showmessagedialog(f1, "welcome mastermind! \n game test brain.", "mastermind: test brain!", joptionpane.information_message); joptionpane.showmessagedialog(f1, "you have guess color behind circle white cirlce" + "\n display on right side of f1 you." + "\n guesses display on left side of f1 you." + "\n have 10 attempts @ getting correct" + "after 10 attmepts done \nand did not guess correctly, game end." + "\n\n\n now, luck on mastermind. may have fun time!", "mastermind rules", j optionpane.error_message); //makes panel display heading final jpanel gs = new jpanel(); f1.add(gs); gs.setborder(borderfactory.creatematteborder(5,5,5,5, color.green)); gs.setbackground(color.black); //makes panel control final jpanel p2 = new jpanel(); f1.add(p2); p2.setborder(borderfactory.creatematteborder(5,5,5,5, color.green)); p2.setbackground(color.black); final jlabel line = new jlabel(""); p2.add(line); line.setforeground(color.green); //creates submit button final jbutton submit = new jbutton("submit"); p2.add(submit); //adds text field display number of guesses final jformattedtextfield tf1 = new jformattedtextfield(); p2.add(tf1); tf1.setcolumns(2); tf1.seteditable(false); tf1.setforeground(color.red); tf1.setvalue(new integer(guesses)); jlabel here = new jlabel("take guess: "); p2.add(here); here.setforeground(color.green); final jlabel master = new jlabel("mastermind: test mind!"); master.setforeground(color.green); font newf = new font("sansserif", font.bold + font.italic, 32); master.setfont(newf); gs.add(master); //add , initializes computers guess buttons //and guesses final string[] colored = new string[4]; colored[0] = "circle-red.png"; colored[1] = "circle-blue.png"; colored[2] = "circle-green.png"; colored[3] = "circle-yellow.png"; final jbutton[] compguess = new jbutton[4]; compguess[0] = new jbutton(); compguess[1] = new jbutton(); compguess[2] = new jbutton(); compguess[3] = new jbutton(); gamepanel.add(compguess[0]); gamepanel.add(compguess[1]); gamepanel.add(compguess[2]); gamepanel.add(compguess[3]); compguess[0].setvisible(false); compguess[1].setvisible(false); compguess[2].setvisible(false); compguess[3].setvisible(false); final string[] colored2 = new string[4]; final int[] checkfilled = new int[4]; for(int fill = 0; fill < 4; fill++) { checkfilled[fill] = 0; } int counter = 0; { int random = (int)(math.random()*4); if(checkfilled[random] == 0) { colored2[counter] = colored[random]; checkfilled[random] = 1; counter++; } } while(counter < 4); final imageicon cell1 = new imageicon(colored2[0]); final imageicon cell2 = new imageicon(colored2[1]); final imageicon cell3 = new imageicon(colored2[2]); final imageicon cell4 = new imageicon(colored2[3]); compguess[0].seticon(cell1); compguess[1].seticon(cell2); compguess[2].seticon(cell3); compguess[3].seticon(cell4); //adding label tell user guessing @ jlabel user = new jlabel("your guess: "); user.setforeground(color.green); p2.add(user); //adding guessing buttons final jbutton[] ug = new jbutton[4]; ug[0] = new jbutton(); ug[1] = new jbutton(); ug[2] = new jbutton(); ug[3] = new jbutton(); p2.add(ug[0]); p2.add(ug[1]); p2.add(ug[2]); p2.add(ug[3]); //this mouse event handler make change colors //to corresponding color want click of //the mouse on button ug[0].addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { if(e.getclickcount() == 1) { ug[0].seticon(new imageicon("circle-red.png")); } else if(e.getclickcount() == 2) { ug[0].seticon(new imageicon("circle-blue.png")); } else if(e.getclickcount() == 3) { ug[0].seticon(new imageicon("circle-green.png")); } else if(e.getclickcount() == 4) { ug[0].seticon(new imageicon("circle-yellow.png")); } } @override public void mousepressed(mouseevent e) { } @override public void mousereleased(mouseevent e) { } @override public void mouseentered(mouseevent e) {} @override public void mouseexited(mouseevent e) {} }); ug[1].addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { if(e.getclickcount() == 1) { ug[1].seticon(new imageicon("circle-red.png")); } else if(e.getclickcount() == 2) { ug[1].seticon(new imageicon("circle-blue.png")); } else if(e.getclickcount() == 3) { ug[1].seticon(new imageicon("circle-green.png")); } else if(e.getclickcount() == 4) { ug[1].seticon(new imageicon("circle-yellow.png")); } } @override public void mousepressed(mouseevent e) { } @override public void mousereleased(mouseevent e) { } @override public void mouseentered(mouseevent e) {} @override public void mouseexited(mouseevent e) {} }); ug[2].addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { if(e.getclickcount() == 1) { ug[2].seticon(new imageicon("circle-red.png")); } else if(e.getclickcount() == 2) { ug[2].seticon(new imageicon("circle-blue.png")); } else if(e.getclickcount() == 3) { ug[2].seticon(new imageicon("circle-green.png")); } else if(e.getclickcount() == 4) { ug[2].seticon(new imageicon("circle-yellow.png")); } } @override public void mousepressed(mouseevent e) { } @override public void mousereleased(mouseevent e) { } @override public void mouseentered(mouseevent e) {} @override public void mouseexited(mouseevent e) {} }); ug[3].addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { if(e.getclickcount() == 1) { ug[3].seticon(new imageicon("circle-red.png")); } else if(e.getclickcount() == 2) { ug[3].seticon(new imageicon("circle-blue.png")); } else if(e.getclickcount() == 3) { ug[3].seticon(new imageicon("circle-green.png")); } else if(e.getclickcount() == 4) { ug[3].seticon(new imageicon("circle-yellow.png")); } } @override public void mousepressed(mouseevent e) { } @override public void mousereleased(mouseevent e) { } @override public void mouseentered(mouseevent e) {} @override public void mouseexited(mouseevent e) {} }); submit.addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { if(e.getsource() == submit) { int s = 0; system.out.println(ug[0].geticon()); system.out.println(ug[1].geticon()); system.out.println(ug[2].geticon()); system.out.println(ug[3].geticon()); system.out.println(compguess[0].geticon()); system.out.println(compguess[1].geticon()); system.out.println(compguess[2].geticon()); system.out.println(compguess[3].geticon()); if(ug[0].geticon() == compguess[0].geticon() && ug[1].geticon() == compguess[1].geticon() && ug[2].geticon() == compguess[2].geticon() && ug[3].geticon() == compguess[3].geticon()) { joptionpane.showmessagedialog(f1, "you have guessed them coorect!", "mastermind: test mind", joptionpane.information_message); submit.setenabled(false); compguess[0].setenabled(false); compguess[1].setenabled(false); compguess[2].setenabled(false); compguess[3].setenabled(false); ug[0].setenabled(false); ug[1].setenabled(false); ug[2].setenabled(false); ug[3].setenabled(false); } else { joptionpane.showmessagedialog(f1, "please try again!", "mastermind: test mind", joptionpane.information_message); } guesses++; tf1.setvalue(new integer(guesses)); if(guesses == 10) { joptionpane.showmessagedialog(f1, "thank playing! \n\n\n have wonderful day.", "mastermind: test mind", joptionpane.information_message); system.exit(0); } int x = 0; int y = 0; if(ug[0].geticon() == compguess[0].geticon()) { x = x + 1; } if(ug[1].geticon() == compguess[1].geticon()) { x = x + 1; } if(ug[2].geticon() == compguess[2].geticon()) { x = x + 1; } if(ug[3].geticon() == compguess[2].geticon()) { x = x + 1; } if(ug[0].geticon() != compguess[0].geticon()) { y = y + 1; } if(ug[1].geticon() != compguess[1].geticon()) { y = y + 1; } if(ug[2].geticon() != compguess[2].geticon()) { y = y + 1; } if(ug[3].geticon()!= compguess[2].geticon()) { y = y + 1; } joptionpane.showmessagedialog(f1, "you have " + x + " colors correct , in right position."+ "\nyou have " + y + " colors correct in wrong position.", "mastermind: test mind", joptionpane.information_message); } } @override public void mousepressed(mouseevent e) {} @override public void mousereleased(mouseevent e) {} @override public void mouseentered(mouseevent e) {} @override public void mouseexited(mouseevent e) {} }); //set component of game on f1 //and sets size of fame , makes // visible user f1.add(gs, borderlayout.north); f1.add(gamepanel, borderlayout.center); f1.add(p2, borderlayout.south); f1.setsize(650, 350); f1.setvisible(true); f1.setresizable(false); f1.setlocationrelativeto(null); } public static void main(string[] args) { mastermind mastermind = new mastermind(); } }
thanks in advance jay!
the problem describe caused comparing distinct references.
the compguess
array initialized (distributed accross sorce code, it's that):
// colored2[0] contains filename final imageicon cell1 = new imageicon(colored2[0]); compguess[0] = new jbutton(); compguess[0].seticon(cell1);
i.e. create jbutton
, assign newly created imageicon
button.
on other hand ug
have code
ug[0] = new jbutton(); ug[0].seticon(new imageicon("circle-red.png")); // inside mouse listener
which means again create button , assign instance of imageicon
one.
so when compare
ug[0].geticon() == compguess[0].geticon()
you compare icon instances of course never match since created independently , distinct objects.
to fix issue may create each distinct icon once , share/reuse components. i'd prefer different way , separate representation (icons) underlying data model , have both stored suitable (view-independent) data type (e.g. enum diskcolor { red, blue, green, yellow };
) can compare transform view representation.
Comments
Post a Comment