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

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -