//Anca Suciu,grupa 332CB //Proiect AA - NIM import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.image.*; class Obiect{ private Image moneda; private static int width,height; Obiect(Image im){ moneda=im; } static void setSize(int w,int h){ width=w; height=h; } static int getW(){ return width; } static int getH(){ return height; } void deseneazaObiect(Graphics g,int x,int y,ImageObserver ob){ g.drawImage(moneda,x,y,ob); } } class Gramada{ private Obiect[] vect; private int nr; Gramada(int n,Image img){ nr=n; vect=new Obiect[n]; for(int i=0;i matricea are nrg linii si 5 coloane nrlin=gram.length; nrcol=nrBiti; a=new int[nrlin][nrcol]; for(int i=0;ifolosesc o copie ptr ca altfel as modifica matricea //curenta public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mousePressed(MouseEvent e){ int x,y,j; int gramada,moneda; //gramada=gramada curenta, moneda=moneda curenta din gramaada int nrObGramada; if(demo){ nrclick++; repaint(); } else if(yourTurn){ hint=false; x = e.getX(); y = e.getY(); if( x > pozInitX && y > pozInitY ){ gramada = ( y - pozInitY ) / DIST_GRAM; //aflu din ce gramada vrea sa ia if( gramada <= 4 && y < pozInitY + Obiect.getH() + gramada * DIST_GRAM ){//sunt intr-una din gramezile valide moneda = ( x - pozInitX ) / width; nrObGramada=gram[gramada].getNrObiecte(); if( moneda < nrObGramada){ moneda = ( x - pozInitX ) / width; if( moneda < nrObGramada){ mat.setLinie(gramada,moneda); gram[gramada].setNrObiecte(moneda); yourTurn=false; repaint(); } } } } } } public void init() { setBackground(Color.white); setLayout(new BorderLayout()); addMouseListener(this); pozInitX=50; //fixez pozitia initiala(cat spatiu am inainte de prima coloana de monede) pozInitY=50; w=650; h=440; img=getImage(getDocumentBase(),"moneda.jpg"); do{ width=img.getWidth(this); //preiau dimensiunile pozei }while(width==-1); do{ height=img.getHeight(this); }while(height==-1); Obiect.setSize(width,height); for(int i=0;i1){ obRamase=(int)(1+(gram[gramada].getNrObiecte()-1)*Math.random()); //alege aleator un cate obiecte sa ramana in acea gramada if(obRamase==gram[gramada].getNrObiecte()) //daca alege intamplator chiar numarul de obiecte din //gramada nu s-ar vedea nici o modificare si am ales //sa scad nr de obiecte din gramada cu 1 obRamase--; } else //daca a ales o gramada care are un singur element il va lua chiar pe asta,lasand gramada vida obRamase=0; gram[gramada].setNrObiecte(obRamase); //setez numarul de obiecte ramase din gramada curenta mat.setLinie(gramada,obRamase); //trebuie sa modific si reprezentarea binara in matrice } } } void hint(){ //calculeaza moneda pe care tb sa apese jucatorul pentru o mutare castigatoare... //daca aceasta mutare nu exista jucatorul va fi atentionat ca nu mai are nici o sansa de castig int col,lin; int unit[]=new int[NR_BITI]; //unit[i] = nr de unitati de pe coloana i int colBune[]=new int[NR_BITI]; //coloanele bune sunt cele care au numar impar de unitati //sunt bune ptr ca le pot transforma intr-un avantaj pentru mine int nrColBune=0; //numarul de coloane bune,initial este 0 int nrOb; copie=new MatriceBinara(mat); //salvez matricea curenta..daca as fi lucrat direct cu matricea principala //ar fi trebuit sa o modific..astfel voi face modificarile asupra copiei for(int i=0;i0){ //daca am cel putin o coloana buna col=colBune[0]; //conform algoritmului aleg prima coloana care indeplineste conditia for(int i=0;i