[ LightBow @ 01.02.2005. 06:51 ] @
Pravim igricu Nim u javi. Poredjaju se stapici u tri reda, 3, 5, i sedam komada. Dva igraca naizmenicno uzimaju stapice, ali dozvoljeno je uzimanje samo iz istog reda. Pobednik je onaj koji primora protivnika da uzme poslednji stapic.
E ja pravim tako da kad komp igra, prvo se pokaze koje je stapice odabrao (oboje se u crveno), pa ih tek onda oduzme. Napisao sam metodu za slucaj kada je ostao samo jedan red stapica na stolu. Kod za "odabiranje" stapica lepo radi, ali kada u istu metodu u nastavku dodam kod za "oduzimanje" istih, ne radi ni oduzimanje, a ni "odabiranje", tj. odabrani stapici se ni ne oboje.
Evo bitnog koda, pa ako neko ima vremena da pogleda.
Ovo je metoda kojom komp igra kad vidi da je ostao samo 1 red stapica. Naravno, nece propustiti priliku da pobedi tako sto ce ostaviti samo jedan stapic na stolu.
...
...
Code:

if(rowsLeft==1) {
             if(r1!=0) { playOneRowLeft(row1,r1);}
             if(r2!=0) { playOneRowLeft(row2,r2);} //Odavde zovem metod, row1,2 i 3 su 
             if(r3!=0) { playOneRowLeft(row3,r3);} //matrice stapica 
         }  // r1, r2 i r3 cuvaju broj stapica po redovima, ovo je sve OK

         else playRandom();
     }

void playOneRowLeft(Stick[] row,int r) { 
         int take=0;                
        for(int i=0; i<r-1;i++) {
            for(int j=0; j<70000000;j++) {}
            row[i].selected = true;
            repaint();    //ovo radi savrseno, ali kad dopisem kod za "oduzimanje" ne
        }
        for(int j=0; j<1400000;j++) {} 
        for(int i=0; i<r; i++) {
            if (row[i].selected==true) {
                         take=take+1;
                         row[i].selected=false;
                     }
                 }
                 r=r-take;
                 repaint();
             }

 Evo koda za paint:

public void paint(Graphics g) {
        
        for (int i = 0; i<r1; i++) {
            if (row1[i].selected == true) {
                g.setColor(Color.red);
                g.fillRect(300+60*i,299, stickWidth,stickHeight);
                g.setColor(Color.black);
            }
            else
            g.drawRect(300+60*i,299, stickWidth,stickHeight );
        }
        for (int i = 0; i<r2; i++) {
            if (row2[i].selected == true) {
                g.setColor(Color.red);
                g.fillRect(240+60*i,166, stickWidth,stickHeight);
                g.setColor(Color.black);
            }
            else
            g.drawRect(240+60*i,166, stickWidth,stickHeight );
        }
        for (int i = 0; i<r3; i++) {
            if (row3[i].selected == true) {
                g.setColor(Color.red);
                g.fillRect(180+60*i,33, stickWidth,stickHeight);
                g.setColor(Color.black);
            }
            else
            g.drawRect(180+60*i,33, stickWidth,stickHeight );
          }
          g.drawString("r1= "+r1+"  r2= "+r2+"  r3= "+r3,10,10);
     }

Dakle sve je ok, koordinate i ostalo, uvek su selected stapici samo iz reda koji je u pitanju. Ali kad dopisem onu gornju metodu, posle ostavljanja jednog jedinog reda komp kao da prestane da igra. Tri sata sam gledao, proveravao, ali jednostavno ne vidim gde je greska.
Eto, ako neko provali, bas me interesuje
Pozdrav