Forum » Programiranje » 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:
Če greste brat kodo opazite da trenutno sem pisal zadevo samo za primer če je uporabnik kliknil na drugi stolpec leve proti desni.
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
hvala.
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.
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?
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.
Neki takega. Sicer pa je ze tko narobe, da imas informacijo, kje so zetoni shranjeno edino kot barvo na gumbu. Moras imeti model zadaj.
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 ::
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 :
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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | java, Swing in vmesnik ActionListenerOddelek: Programiranje | 679 (616) | marjan_h |
» | [java] Osnovna vprašanjaOddelek: Programiranje | 2621 (1628) | killa bee |
» | java pomoč, verjetno event handlerOddelek: Programiranje | 1053 (886) | Chandler258 |
» | Puzzle 15 kodaOddelek: Programiranje | 1257 (1130) | Serial |
» | [NALOGA][Java] Težave pri pisanju slikarjaOddelek: Programiranje | 2289 (1931) | l0g1t3ch |