Shakki pelissa liikkuminen

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
4500
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

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.

Äänestä
  • 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.

    Äänestä

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();

}
}

Äänestä

Kommentoi aloitusta


Pewu kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu