Hra ,,Patnáctka" s využitím Swing a JFrame – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hra ,,Patnáctka" s využitím Swing a JFrame – Java – Fórum – Programujte.comHra ,,Patnáctka" s využitím Swing a JFrame – Java – Fórum – Programujte.com

 

JungleBe0
Duch
10. 12. 2015   #1
-
0
-

Dobrý den, tvořím jednoduchou  hru ,,Patnáctka" (kdo neznáte, prosím vygooglete si to :)  )

Už ji mám téměř celou hotovu ale mám problém s posouváním kamenů.  Když chci ,,prázdné místo"

posouvat dolů, či vpravo funguje. Posuv zpět nahoru a vlevo bohužel ne. A to jsem kod pro posouvání psal jen jednou a pak zkopíroval a řádně upravil pro každý směr.

Mám založenený list s čísly jdoucími po sobě( od 1 do 15, 16. je prázdný znak) a dvourozměrné pole 4x4 JButtonů, kterým náhodně přiřadím hodnoty z listu čísel. 

public void actionPerformed(ActionEvent e) {
	   
	   String cislo = e.getActionCommand();
	   
  if(cislo != ""){
		
	for(int y = 0; y < tlacitka.length; y++){
			   
	   for(int x = 0; x < tlacitka[y].length; x++){
		    if( tlacitka[y][x].getText().equals(cislo))
		              {
				
			 
			 
			 if(x-1 >= 0) // posun prázdna vpravo
		if(tlacitka[y][x-1].getText().equals("")){ tlacitka[y][x-1].setText(tlacitka[y][x].getText()); tlacitka[y][x].setText("");}
		
			 if(y-1 >= 0) // posun prázdna dolu
		if(tlacitka[y-1][x].getText().equals("")){ tlacitka[y-1][x].setText(tlacitka[y][x].getText()); tlacitka[y][x].setText("");}
			 		 
			  
			 if(x+1 < tlacitka.length) // posun prázdna vlevo
        if(tlacitka[y][x+1].getText().equals("")){ tlacitka[y][x+1].setText(tlacitka[y][x].getText()); tlacitka[y][x].setText("");
        tlacitka[0][0].setText("IF proveden");}
						 
			 if(y+1 < tlacitka.length)  // posun prázdna nahoru
	   if(tlacitka[y+1][x].getText().equals("")){ tlacitka[y+1][x].setText(tlacitka[y][x].getText()); tlacitka[y][x].setText("");}
                     }
			
	                                               }

		                                       }                                     
	
	             }   
        }

Předcházející kód obsahuje podmínku, jestli nemá právě nakliklé tlačítko znak "", tak se začnou projíždět všechny JButtony v poli, a když se nějaký prvek (číslo) shoduje s číslem právě kliknutého tlačítka

se zjišťuje jestli s tímto tlačítkem sousedí tlačítko s prázdným znakem ("") pro případný posuv. Jestli ano,

znak ze stisklého tlačítka se přesune tam, kde bylo prázdné a do znaku stisklého tlačítka se vloží prázdný znak ("").   

Posun prázdna vlevo a nahoru mi ale nefunguje a nemohu přijít na to proč. Pro kontrolu jsem ještě vložil do IFu pro posun vlevo kontrolu, že po provedení tohoto IFu se do textu tlačítka na pozici [0,0] zapíše text IF proveden, jako důkaz že pogram skutečně do tohoto IFu ,,vlezl". Když chci ,,prázdno" posunout vlevo, tak se skutečně na tačítko  [0,0] text, "IF proveden" napíše, příkaz pro prohození čísla stisklého tlačítka a prázdného znaku ale zůstane ignorován.

Já se ptám proč. Děkuji

Nahlásit jako SPAM
IP: 86.49.118.–
Kit+15
Guru
10. 12. 2015   #2
-
0
-

#1 JungleBe
Místo některých "if" má být "else if". Místo jednoho se ti totiž provádí dva přesuny - jeden tam a hned druhý zpět. Vypadá to pak, že se nic nepohlo.

Možná by ti pomohlo, kdyby sis ten kód naformátoval tak, aby ses v něm vyznal. Zapomínáš psát složené závorky u podmínek.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JungleBe0
Duch
10. 12. 2015   #3
-
0
-

#2 Kit

Dekuji za odpověď :)
O těch ELSE IF vím, že by tam, jako v korektním kódu měly být.

Před tím jsem je tam měl ale také a stejně to nefungovalo správně. Proto jsem je pro jistotu odstranil.

U těch podmínek, které hlídají, aby byly tlačítka, na které se může program zeptat, v rozsahu pole, se nemusí (ale měly by) psát, jelikož se následující IF bere jako jeden příkaz.  Chtěl jsem to napsat co nejvíce úsporně pro pozdější čtení.

Jinak, děkuji za typ. Za každý IF jsem dal break a pomohlo to. U posledního směru, nahoru, se to ale pořád posune ,,tam a zpět" a příkaz break je ignorován.  Posun vlevo už funguje korektně.   

Nahlásit jako SPAM
IP: 86.49.118.–
Kit+15
Guru
10. 12. 2015   #4
-
0
-

#3 JungleBe
Copak mohu tušit, na co jsi v tom procedurálním zmatku zapomněl, když jsi neposlal opravený zdroják? Proč to neděláš objektově? Mohl bys to mít i s animací.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
miHan0
Návštěvník
11. 12. 2015   #5
-
0
-

#1 JungleBe
Jen k tomu "náhodnému" přiřazení čísel na tlačítka. Na toto opatrně, některé z takto zamíchaných her by nemusely mít řešení (vygoogli si to). Buď rozdej hru do výchozího stavu a pak ji zamíchej (tak jako vy to udělal hráč) a nebo můžeš rozložení určit matematicky ...

Nahlásit jako SPAM
IP: 88.146.182.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

Podobná vlákna

Hra v c — založil bohetik

Hra — založil mephi

Hra v C — založil Marek066

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý