Lode - kontrola vsech lodi – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lode - kontrola vsech lodi – Java – Fórum – Programujte.comLode - kontrola vsech lodi – Java – Fórum – Programujte.com

 

Vavat90
Newbie
15. 5. 2011   #1
-
0
-

Delam hru lode v GUI a potreboval bych poradit jak napsat kontrolu lodi ze jsou spravne postaveny na pole.
ZAtim mam to ze mam pole a na ktere policko klikne mys tak se mi v poli ulozi 1. Ale nenapada me zpusob jak pak to pole zkontrolovat. Lode, ktere pouzivam, tak zatim berte ze to muze byt kosticka az 4 kosticky vedle sebe. Lode se nesmi dotykat hranama ani rohama.

Nahlásit jako SPAM
IP: 84.42.211.–
JoDiK
~ Anonymní uživatel
987 příspěvků
15. 5. 2011   #2
-
0
-

To Vavat9 :
Tak nehledej způsob jak to zkontrolovat v poli pomocí programových konstrukcí, ale hledej nejdřív postup jak a co vůbec kontrolovat například, když si to namaluješ na čtverečkovaný papír - a až ty postupy budeš mít vymyšlený v tvém jazyce kterému rozumíš, pak to teprve převáděj do Javy.

Nahlásit jako SPAM
IP: 88.100.43.–
Vavat90
Newbie
15. 5. 2011   #3
-
0
-

To JoDiK :
nvm jestli umis v jave, ale mam dotaz. Da se catchnout arrayoutofbounds exception? asi ne co?

Nahlásit jako SPAM
IP: 84.42.211.–
sputnikone+1
Věrný člen
15. 5. 2011   #4
-
0
-

To Vavat9 : Každá výjimka se dá zachytit...

Nahlásit jako SPAM
IP: 94.113.134.–
JoDiK
~ Anonymní uživatel
987 příspěvků
15. 5. 2011   #5
-
0
-

To Vavat9 :
Neumím v Javě ale google říká, že (pokud ses spletl a mělo to být ArrayIndexOutOfBoundsException) tak to jde:
http://www.java2s.com/Code/Java/JSP/CatchinganArrayIndexOutOfBoundsExceptionException.htm

A jestli tu kontrolu chceš řešit nějakými výjimkami, tak to na to jdeš asi špatně...

Nahlásit jako SPAM
IP: 88.100.43.–
Vavat90
Newbie
15. 5. 2011   #6
-
0
-

To JoDiK : Ne me jde o to ze ja nakreslim lod a kdyz to bude jedna kosticka tak automaticky doplnim kolem dokola nuly a kdyz to hodi mimo pole tak at mi to nespadne

Nahlásit jako SPAM
IP: 84.42.211.–
Vavat90
Newbie
15. 5. 2011   #7
-
0
-

To Vavat9 : Hmm tak to nefunguje :/

Nahlásit jako SPAM
IP: 84.42.211.–
JoDiK
~ Anonymní uživatel
987 příspěvků
15. 5. 2011   #8
-
0
-

To Vavat9 :
Nejdřív si opravdu promysli a napiš nebo nakresli na papír jak si představuješ, že ten tvůj program bude fungovat, co všechno se v něm a jak bude provádět a pak teprve začni programovat.
"ja nakreslim lod a kdyz to bude jedna kosticka tak automaticky doplnim kolem dokola nuly"
Nebudou tam ty nuly všude náhodou už předem?

Nahlásit jako SPAM
IP: 88.100.43.–
Vavat90
Newbie
15. 5. 2011   #9
-
0
-

To JoDiK :
Ja si prave nejprve to pole vyplnil -1. To co si napsal tak takhle to chci taky udelat, jenze jde o to ze kdyz tu kosticku das do rohu nebo priplacnes na stranu tak se muze stat ze davas ty nuly nekam kde neni pole a hodi se vyjimka.

Nahlásit jako SPAM
IP: 84.42.211.–
JoDiK
~ Anonymní uživatel
987 příspěvků
15. 5. 2011   #10
-
0
-

To Vavat9 :
Když ten program píšeš ty, tak si snad sám určuješ kam co zapisuješ... Takže se nic takovýho jako "tak se muze stat ze davas ty nuly nekam kde neni pole" stát nemůže.

Nahlásit jako SPAM
IP: 88.100.43.–
Vavat90
Newbie
15. 5. 2011   #11
-
0
-

To Vavat9 :
Uz jsem na to prisel. Rozsirim pole o dva radky a dva sloupecky. Pak nemusim resit kraje.

Nahlásit jako SPAM
IP: 84.42.211.–
Vavat90
Newbie
15. 5. 2011   #12
-
0
-

To Vavat9 :
TAk jeste potrebuji radu. Mam napsany kod na kontrolu lode, ktera je pouze jedna kosticka, ale kdyz jsou to dve a vice tak mi to nejak nefunguje. Postnu tu muj MouseListener:

public void mousePressed(MouseEvent e) {
x = ((e.getX() - 40) / 30) * 30 + 40;
y = ((e.getY() - 45) / 30) * 30 + 40;
int px = (x-40)/30 +1; // zduvodu ptze vkladam do pole[12][12] a ja pouzivam jen pole od[1][1] do [10][10]
int py = (y-40)/30 +1;

if(subm < 2){ // jednokostkova lod
if(py==11 || px == 11){}
if(rect[px][py] == 1 || rect[px][py] == 0){
}else{

for (int i = -1; i < 2; i++) {
rect[px+i][py-1] = 0;
rect[px+i][py+1] = 0;
}
rect[px-1][py] = 0;
rect[px+1][py] = 0;
rect[px][py] = 1;
subm++;
count++;
repaint();
}
}

else if(destr < 6){ // Lod slozena ze 2 kostek

if(px == 11|| py == 11){}
if(rect[px][py] == 1 || rect[px][py] == 0){
}else{
if(rec==0){
coordpress[0][0]= px; // tady si do pole ukladam koordinaty kde muze byt dalsi ctverecek
coordpress[0][1]= py-1;
coordpress[1][0]= px;
coordpress[1][1]=py+1;
coordpress[2][0]=px-1;
coordpress[2][1]=py;
coordpress[3][0]=px+1;
coordpress[3][1]=py;
rect[px-1][py-1] = 0; // plnim ctverecky, ktere obsazene nesmi byt
rect[px+1][py-1] = 0;
rect[px-1][py+1]=0;
rect[px+1][py+1]=0;
rect[px][py] = 1;
rec++;
}
System.out.println(px+" "+py+" "+rec+" "+press);
destr++;
press++;
count++;
if(press > 1 && inCoord(coordpress, px, py)){
rect[px][py]=1;
fillZero(rect, px, py);
repaint();
press=0;
rec=0;
}else{
press--;
destr--;
count--;
}
}
}

System.out.println(x + " " + y + " " + count);


}

Nahlásit jako SPAM
IP: 84.42.211.–
liborb
~ Redaktor
+18
Guru
16. 5. 2011   #13
-
0
-

Pravidlo na umisťování lodí, aby se nedotýkaly, se dá smrsknout do jednoduchého pravidla, a to takového, že kterákoliv kostička lodě nesmí mít ve svém sousedství (tj. těch 8 kostiček okolo) kostičku z jiné lodě. Kostičky rozlišuješ nenulovou hodnotou v hracím poli. Kostičky z různých lodí můžeš rozlišovat různými nenulovými hodnotami (pro 10 lodí použiješ např. hodnoty 1 až 10), takže poznáš, ze které lodě, která kostička je.

Nahlásit jako SPAM
IP: 78.80.52.–
Vavat90
Newbie
16. 5. 2011   #14
-
0
-

A co kdyz mam treba lode, ktera je slozena ze 2 kosticek, ve hre tri a oznacim je v poli 2? Jak zaridis, aby se nedotkli?

Nahlásit jako SPAM
IP: 147.32.92.–
nervak0
Věrný člen
16. 5. 2011   #15
-
0
-

"kterákoliv kostička lodě nesmí mít"

Nahlásit jako SPAM
IP: 213.211.51.–
Vavat90
Newbie
16. 5. 2011   #16
-
0
-

To nervak : NO dobre ale kdyz ma tri lode ktere jsou dvojkostickove, tak to jako mam zancit kazdou tu lod znacit jinym cislem?

Nahlásit jako SPAM
IP: 147.32.92.–
nervak0
Věrný člen
16. 5. 2011   #17
-
0
-

To klidně můžeš a možná to později i oceníš, ale ptal ses na to, jak zařídit, aby se lodě nedotkly. Na to já jsem zopakoval to, co už napsal Libor - když se nedotkne žádná její kostička, tak se nedotkne ani celá loď.

Nahlásit jako SPAM
IP: 213.211.51.–
Vavat90
Newbie
16. 5. 2011   #18
-
0
-

To nervak :
Omlouvam se. Spatne jsem to formuloval. Me slo prave o to, ze kdyz mas 3x dvojkostickovy lode, tak kdybych vsechny tri lode znacil 2 do pole, tak to pak tezko ochranis pred narazem jine dvojkostickove lode.

Nahlásit jako SPAM
IP: 147.32.92.–
nervak0
Věrný člen
16. 5. 2011   #19
-
0
-

Nechápu :) Buď tam něco je a je jedno co, nebo není a můžeš ji tam dát.

Nahlásit jako SPAM
IP: 213.211.51.–
Vavat90
Newbie
16. 5. 2011   #20
-
0
-

To co navrhl liborb je: priklad mam vlozit jednu lod ktera je jeden ctverecek. V poli se na to misto ulozi 1. Ted mam polozit dve lode kazda o rozmerech 2 kosticky. Tak ulozim do pole cislo 2 tam kde jsem polozil jednu lod. Jenze ta druha je uplne stejna a taky bych mel do pole ukladat cislo 2.

doufam ze jsem to vysvetlil spravne :)

Nahlásit jako SPAM
IP: 147.32.92.–
nervak0
Věrný člen
16. 5. 2011   #21
-
0
-

To si nemyslím, ani na tom nezáleží. Buď tam už něco je, nebo není a hotovo.

Nahlásit jako SPAM
IP: 213.211.51.–
liborb
~ Redaktor
+18
Guru
17. 5. 2011   #22
-
0
-

To Vavat9 : No ... moje myšlenka byla taková, že každá loď bude mít svoje "unikátní" číslo. Takže když budeš mít 3 lodě o velikost 2, tak jedna bude mít číslo 1, druhá číslo 2 a třetí číslo 3.

Nahlásit jako SPAM
IP: 78.80.52.–
Vavat90
Newbie
17. 5. 2011   #23
-
0
-

To liborb : No ja si to myslel, ze to myslis takhle :) Ted uz jen vymyslet, jak zaridit, aby uzivatel kreslil ty lode spravne a budu happy :D

Nahlásit jako SPAM
IP: 147.32.223.–
liborb
~ Redaktor
+18
Guru
18. 5. 2011   #24
-
0
-

Nejlepší by bylo přetahovat lodě do hrací plochy celé. Pokud to necháš na uživateli, tak se možná i trochu zapotíš :). Jednoduché to je, pokud by ti nezáleželo na tvaru. Pak je tam podobné pravidlo - první kostička "kamkoliv" a každá další musí mít v sousedství (4 kostičky) nějakou z této lodě.

Nahlásit jako SPAM
IP: 78.80.52.–
Vavat90
Newbie
18. 5. 2011   #25
-
0
-

To liborb :
Mohl bys mi ukazat nebo poslat link kde se neco podobneho dela? Ja tohle nikdy nedelal. Myslim to pretahovani.

Nahlásit jako SPAM
IP: 84.42.211.–
Vavat90
Newbie
19. 5. 2011   #26
-
0
-

Dobry uz jsem na to prisel :) Diky vsem za pomoc :)

Nahlásit jako SPAM
IP: 84.42.211.–
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, 18 hostů

Podobná vlákna

Naprogramování lodí v Pythonu — založil programovací nešika

Hra lodě — založil marpit

Hra lode — založil lodar

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ý