» »

4 v vrsto [java pomoč]

4 v vrsto [java pomoč]

Serial ::

Zdravo.
Lotil sem se pisat IGRO "4 v vrsto" v javi in že takoj na "začetku" naletel na težavo.
Imam problem pri temu, da če igralec klikne v stolpec, da pobarva zadnji gumb (polje) v stolpcu v modro.
In potem če klikne spet v isti stolpec pobarva naslednji gumb oziroma polje. Za zdej je moj programček še v fazi kjer hočem filat polja samo z eno barvo, v tem primeru modro.

No ker se že par dni zajebavam da bi zadevo napisal na najbolj eleganten način in mi ni uspelo sem jo začel danes pisat na tak način, da bi zadeva morala delat pa še vedno ni nič. Sprašujem se če sem že v celem začetku izbral napačno pot.
Imam pač gridlayout z kordinatami.

To je za zdej ključen del kode ki me zajebava:
		for (int y = 0; y < length; y++) {
			for (int x = 0; x < width; x++) {

				grid[x][y].addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent e) {					
						
						int seznam[] = new int[6];
						int y = 1;

						if (   ((e.getSource() == grid[0][y])  )
								|| ((e.getSource() == grid[1][y]))
								|| ((e.getSource() == grid[2][y]))
								|| ((e.getSource() == grid[3][y]))
								|| ((e.getSource() == grid[4][y]))
								|| ((e.getSource() == grid[5][y]))) {

	
							for (int x = 5; x > -1; x--) {
								System.out.println("Stevilo je :" + x);
								seznam[x] = x;
							}

							for (int i = 0; i < seznam.length; i++) {
										System.out.println("Element seznama :" + seznam[i]);
									}

									Arrays.sort(seznam);  
									System.out.println("Minimum = " + seznam[0]);  
									System.out.println("Maximum = " + seznam[seznam.length-1]); 
									
									int n = seznam[seznam.length-1];
								

									if (grid[n][y].getBackground().equals(Color.gray)){
										grid[n][y].setBackground(Color.blue);
										
									}
						
									// Od tle naprej bi hotel preverjat, če je n-- sivo ko kliknem gor ga obarvaj modro
									// probal sem s while if zankami vendar mi ni uspelo nič konkretnega
									// ali mi je pobarvalo cel stolpec naenkrat ali pa je zadeva "počla"
							
						}
						
						else {System.out.print("Napaka?!");}

					}
				});
			}
		}


Če greste brat kodo opazite da trenutno sem pisal zadevo samo za primer če je uporabnik kliknil na drugi stolpec leve proti desni.
  • spremenil: Serial ()

keworkian ::

wow ej majkemi, razsvetljem sem, nikoli se nisem vidu
for (int y = 0; y < length; y++) {
    for (int x = 0; x < width; x++) {
 
        grid[x][y].addActionListener(new ActionListener() {
             
            public void actionPerformed(ActionEvent e) { itd... 


hvala.

Serial ::

Sklepam da je to sarkazem :)
Kaj je tle tako napačnega?

keworkian ::

Ej, ne vem, prvič vidim, da se to lahko tako dela. Če se lahko, sem dolgo časa živel v zmoti.

Serial ::

Hja bu..meni dela?
kako bi lahko drugače to naredil?

PS: ma kdo mogoče kakšno rešitev za moj prvotni problem?

Spura ::

Kaj vse čaraš. Cisto nerazumljivo mešaš stolpce in vrstice. x teče od 0 do width a hkrati kao y označuje stolpec. Kaj počne tisti Arrays.sort je čisto nerazumljivo.
for (int y = 0; y < length; y++) {
    for (int x = 0; x < width; x++) {
        // recimo da x kaze na stolpec
        final int xcoord = x;
        final int ycoord = y;
        grid[x][y].addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {   
               for (int i = grid[xcoord].length - 1;i >= 0;i++) {
                   if (grid[xcoord][i].getBackground().equals(Color.gray)) {
                      grid[xcoord][i].setBackground(Color.blue);
                   }
               }
           }
       }
    }
}


Neki takega. Sicer pa je ze tko narobe, da imas informacijo, kje so zetoni shranjeno edino kot barvo na gumbu. Moras imeti model zadaj.

PaX_MaN ::

keworkian je izjavil:

Ej, ne vem, prvič vidim, da se to lahko tako dela. Če se lahko, sem dolgo časa živel v zmoti.

Pač ma tabelo JButtonov or sth.
Ke problem?

Serial ::

Hmm Spura hvala za odgovor sam načeloma je to kar si mi ti poslal delalo nekako isto kot sm že jst prej probal in ni lih to kar sem iskal oziroma ni pravilno..
Sem pa prišel do rešitve katera je sledeča :
boolean here = false;

						for(int x=0 ; x<grid.length && !here ; x++){
						  for(int y=grid[x].length-1 ; y>=0 ; y--){
						    if(grid[x][y] == e.getSource() && !here){
						       here = true;
						       y=grid[x].length-1;
						    }
						    if(here){
						        if(grid[x][y].getBackground().equals(Color.GRAY)) {
						           grid[x][y].setBackground(Color.BLUE);
						           break;
						        }  
						    }
						  }
						}

Spura ::

aja break sm pozabu
Zakaj imas nek e.getSource. Saj vsak gumb dobi svojo implementacijo ActionListenerja, ki lahko dostopa do xcoord in ycoord, ki oznacujejo njegovo pozicijo.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

java, Swing in vmesnik ActionListener

Oddelek: Programiranje
5624 (561) marjan_h
»

[java] Osnovna vprašanja

Oddelek: Programiranje
372484 (1491) killa bee
»

java pomoč, verjetno event handler

Oddelek: Programiranje
12988 (821) Chandler258
»

Puzzle 15 koda

Oddelek: Programiranje
51196 (1069) Serial
»

[NALOGA][Java] Težave pri pisanju slikarja

Oddelek: Programiranje
202145 (1787) l0g1t3ch

Več podobnih tem