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.
Fórum › Java
Lode - kontrola vsech lodi
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.
To Vavat9 : Každá výjimka se dá zachytit...
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ě...
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?
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.
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);
}
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.
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 :)
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ě.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Lode - vkladani lodi do hraciho pole — založil Vavat9
Naprogramování lodí v Pythonu — založil programovací nešika
Scématický obrázek kosmické lodi — založil Lolo24
Moderátoři diskuze