Teen pienta shakki-pelia simuloivaa ohjelmaa. Lauta on 8x8 taulukko, jossa nappu-oliot, ovat jokainen nappula toteuttaa liiku rajapinnan eli jokainen nappula sisaltaa oman liiku-metodin.
Nyt on ongelmana se miten saan liiku metodit toteutettua. esimerkiksi miten tarkistan onko lahtoruudun ja kohderuudun valissa, jokin nappula joka estaa siirtamisen, olisiko jonkinlaiset for-silmukat hyva ratkaisu liikkeiden toetukseen?
ja toinen peini kysymys milla metodilla, voin poistaa kamaa vektorista? Lisaaminenhan menee tyyliin vector.add
Nyt on ongelmana se miten saan liiku metodit toteutettua. esimerkiksi miten tarkistan onko lahtoruudun ja kohderuudun valissa, jokin nappula joka estaa siirtamisen, olisiko jonkinlaiset for-silmukat hyva ratkaisu liikkeiden toetukseen?
ja toinen peini kysymys milla metodilla, voin poistaa kamaa vektorista? Lisaaminenhan menee tyyliin vector.add
Vastaukset 4
Vanhimmat
Kaman poisto vektorista ihan vaan metodilla vector.remove
public Object remove(int index)
Tuokin löytyi nopeasti seuraavasta paikasta :)
http://java.sun.com/j2se/1.4.2/docs/api/
Itsekin koodailin nettishakin aikoinaan :)
Liikkumisen saat varmasti kyhättyä ominkin voimin, mutta on pari juttua, mitä kannattaa funtsia jo alkuvaiheessa:
1. Pelin tila (tilallinen sääntömoottori)
Eli jos peli on vaikka shakkaus- tai ohestalyöntitilanteessa, niin silloin pätevät erikoissäännöt. Myös paljastusshakit pitää tarkastaa.
2. Erikoissiirrot
Esim. tornitus. Ovatko väliruudut uhattuina, tornit tai kuningas liikkunut yms.
3. Erikoistilanteet
Toistuva tilanne, tasapeli, upseeriksi korotus tai vaikkapa 50 shakkausta peräkkäin.
Tännehän pitäis järjestää shakin koodanneiden oma keskustelupalsta.. :P Mulla oli pelissä vielä itse kehitetty "tekoäly" joten sitä pystyi pelaamaan yksinkin.
Mun mielestä ihan tavallisen sotilaan siirron oikeellisuuden tarkistus oli kaikkein hankalin tehdä, siinä kun tulee eri mahdollisuuksia enemmän kuin paljon.
tee jokaisesta ruudusta oma olio, jolla on muuttujia vaikka tilan ja värin suhteen jne.
sitten 8*8 taulukko täyteen niitä ruutuolioita. Liikkuessa sitten vaan kysyy jokaiselta liikeradalla olevalta ruudulta, että oletko vapaa ruutu yms. tarkituksia.
Sitten voi olla vaikka Siirto-luokka, jossa on muuttujina vaikka alkukoordinaatti, loppukoordinaatti, siirron tekevä nappula (saako hypätä yli hevosella jne.) ja kaikki siirtoon liittyvät ruudut.
Ruutu [][] lauta = new Ruutu[8][8];
Siirto siirto = new Siirto(1,2,3,4,"valkoinen","Lähetti");
Sitten vois olla metodi Siirto.tarkistaSiirto(lauta);
Se menis pelilaudan kaikki ruudut läpi, jotka kuuluvat tuohon siirtoon.
while(Koordinaatti koord = siirto.seuraavaLiikku())
{
if(lauta[koord.getX()][koord.getY()].varattu())
{
throw new LaitonSiirtoException();
}
}