Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Limbo: Shakki

Sivun loppuun

jalski [07.06.2010 17:50:50]

#

Kukaan täällä tehnyt shakkipeliä ja piirtänyt shakkinappuloiden grafiikkoja valmiiksi?

Olen aloittamassa shakkipeli projektia Infernolle Limbolla ja ajattelin, että voisin piirtelyn sijaan keskittyä itse ohjelmaan. Pelistä tulee aluksi pelkästään kahden pelaajan verkkopeli, mutta tarkoituksena olisi kyllä lisätä tekoäly mukaan myöhemmin.

Jaska [07.06.2010 20:15:19]

#

Netistä varmasti löytyy. Ota kuvaruutukaappaus ja tallenna kuvat.

tsuriga [07.06.2010 20:54:31]

#

Kuulostaa melkein siltä viimeiseltä oljenkorrelta: Kuvakaapatut kuvat voivat olla laadullisesti heikompia (ellei kuvaa käsitellä sekä lähettäjän että käyttäjän päässä häviöttömästi, häviöllinen -> häviötön taasen johtaa tarpeettoman isoon tiedostokokoon) ja niiden käyttöoikeuksia voi olla vaikea selvittää. Voisin kuvitella, että jos kuvat on tarkoitettu vapaaseen käyttöön, pelistä löytyy myös lähdekoodiversio, josta kuvat saa suoraan, tai peli linkittää kuvien lähteeseen.

jalski [07.06.2010 22:05:55]

#

Kahden pelaajan verkkopelitoteutus vaikuttaisi melko yksinkertaiselta toteuttaa?


Nopeasti mietittynä jakaisin ongelman kutakuinkin allaolevan kaltaisiin proseduureihin:

- movelist:

Pistää listaan tietyn position kaikki mahdolliset siirrot, käyttäen apuna kutakin erilaista pelinappulaa varten tehtyä proseduuria.


- queen:

Kuningattaren siirtomahdollisuudet listaan.
Mahdollisuus yksinkertaistaa. Kuningatar on yhdistelmä tornia ja piispaa


- king:

Kuninkaan siirtomahdollisuudet listaan.


- pawn:

Sotilaan siirtomahdollisuudet listaan.


- bishop:

Piispan siirtomahdollisuudet listaan.


- rook:

Tornin siirtomahdollisuudet listaan.


- knight:

Hevosen siirtomahdollisuudet listaan.


- incheck:

Onko shakki?
Jokaisen pelilaudalla olevan vastustajan pelinappulan siirtomahdollisuudet selvitetään movelist:in avulla ja selvitetään johtaako joku siirroista shakkiin.


- move:

Siirtää pelinappulaa.

Elikkä toiminta olisi lyhykäisyydessään sellainen, että kun pelivuorossa oleva pelaaja painaa pelilaudalla olevaa omaa pelinappulaa niin annetaan movelist proseduurille parametriksi pelinappulan positio pelilaudalla ja kutsutaan sitä. Movelist:in avulla saadun kyseisen pelinappulan siirtomahdollisuuslistan siirrot käydään vielä läpi incheck -funktion avulla ja poistetaan listalta kaikki ei sallitut siirrot, mitkä johtaisivat oman kuninkaan shakkiin. Nyt voidaan ruudulla sallitut siirrot pelilaudalla korostaa erivärillä ja hyväksyä kohteeksi joku näistä.

Jaska [08.06.2010 00:11:21]

#

Varmaankin ihan toimiva vaihtoehto. Lisäksi itse siirroista kannattaa pitää kirjaa, koska se vaikuttaa siihen, voiko linnottautua tai sopia tasapeli.

Grez [08.06.2010 20:19:23]

#

jalski kirjoitti:

Kukaan täällä tehnyt shakkipeliä ja piirtänyt shakkinappuloiden grafiikkoja valmiiksi?

Tuolta löytyy kaikkien nappuloiden symbolit minkä vaan kokoisina ja GFDL, BSD ja GPL-lisenssillä.

jlaire [09.06.2010 07:05:36]

#

Jaska kirjoitti:

Lisäksi itse siirroista kannattaa pitää kirjaa, koska se vaikuttaa siihen, voiko linnottautua tai sopia tasapeli.

Pelaajat voivat sopia tasapelin ihan milloin vain, mutta tehdyt siirrot vaikuttavat siihen voiko tasapeliä vaatia (lähinnä saman aseman toisto kolmeen kertaan ja 50 siirron sääntö).

jalski [09.06.2010 10:09:09]

#

Kiitoksia nappuloiden grafiikka linkistä.

Löysin netistä vanhan dokumentin 50-luvulta, mitä käytän oman toteutukseni pohjana.

Tallennan pelilaudan 2-ulotteiseen taulukkoon. Pelilaudan esitys alkutilanteessa tulee olemaan:

 4,  2,  3,  5,  6,  3,  2,  4
 1,  1,  1,  1,  1,  1,  1,  1
 0,  0,  0,  0,  0,  0,  0,  0
 0,  0,  0,  0,  0,  0,  0,  0
 0,  0,  0,  0,  0,  0,  0,  0
 0,  0,  0,  0,  0,  0,  0,  0
-1, -1, -1, -1, -1, -1, -1, -1
-4, -2, -3, -5, -6, -3, -2, -4

Lambda muuttuja tallentaa tiedon kumman pelaajan vuoro on ja se voi saada arvon 1 tai -1.

Lambdan avulla voi myös yksinkertaisesti päätellä onko pelinappula pelilaudalla oma vai vastustajan. Tämä onnistuu yksinkertaisesti kertomalla peliruudun sisältö lambdalla. Tuloksen ollessa positivinen on kyseessä oma nappula, jos tulos on negatiivinen on kyseessä vastustajan nappula.

Lisäksi tarvitaan pari muuttujaa tallentamaan tiedot linnoittautumisoikeuksista.

jalski [10.06.2010 11:42:35]

#

Kahden pelaajan shakkipeli alkaa jo hahmottua mukavasti. Sain eilen parin tunnin koneella istumisen aikana toteutettua pelilaudan esityksen, useimmat piirtorutiinit, verkkopelin rungon ja käyttöliittymän alustavan toteutuksen.

Jos aika antaa myöten, niin illalla saan varmaankin lisättyä mukaan valitun pelinappulan siirtomahdollisuuksien korostamisen pelilaudalla eri värillä. Tämän jälkeen pelinappuloiden toiminta logiikan tarkastaminen käynee mukavasti muuttamalla käsipelillä pelilaudan tallentavan 2-ulotteisen taulukon arvoja ja klikkailemalla pelinappuloita ruudulla.

jalski [10.06.2010 18:56:35]

#

jalski kirjoitti:

Jos aika antaa myöten, niin illalla saan varmaankin lisättyä mukaan valitun pelinappulan siirtomahdollisuuksien korostamisen pelilaudalla eri värillä. Tämän jälkeen pelinappuloiden toiminta logiikan tarkastaminen käynee mukavasti muuttamalla käsipelillä pelilaudan tallentavan 2-ulotteisen taulukon arvoja ja klikkailemalla pelinappuloita ruudulla.

Hyvinhän tuo menetelmä tuntuu toimivan...


Eiköhän peli valmistu tulevan viikonlopun aikana. Laitan pelin lähdekoodit datatiedostoineen ladattaviksi, kunhan saan valmiiksi.

jalski [12.06.2010 01:08:48]

#

Mitä mieltä olette?

Onko valitun oman pelinappulan siirtomahdollisuuksien näyttäminen ruudulla hyvä asia vai helpottaako se liikaa pelaamista? Olisiko parempi vain näyttää pelkkä valittu pelinappula?

Tämän hetkisessä toteutuksessa valitun pelinappulan ruutu korostetaan paksulla värikehyksellä ja sallitut siirtovaihtoehdot ohuella värikehyksellä. Lisäksi toteutin vähän aikaa näkyvän nuolen näyttämään mistä mihin siirto tapahtui.

Triton [12.06.2010 16:45:06]

#

Mielestäni tuo helpottaa pelaamista liikaa, sillä yksi shakin ideoista on siinä, että osaat nähdä, mitä siirtoja voit tehdä...

Macro [12.06.2010 17:09:46]

#

Triton kirjoitti:

Mielestäni tuo helpottaa pelaamista liikaa, sillä yksi shakin ideoista on siinä, että osaat nähdä, mitä siirtoja voit tehdä...

Voihan peliin tehdä kaksi eri asetusta, toisessa näytetään mahdolliset siirrot ja toisessa ei.

Grez [12.06.2010 17:22:39]

#

Täytyy olla kyllä todella huono pelaaja, että kohdalla olevan vuoron siirtomahdollisuuksien näyttäminen oikeasti helpottaa pelaamista. Siis, helpottaa ehkä siinä mielessä että pelaaminen voi olla marginaalisesti nopeampaa, mutta ei siinä mielessä että voisi pärjätä paremmin (ellei tosiaan ole todella amatööri)

jlaire [12.06.2010 17:25:34]

#

Shakkia vähänkin harrastaneille on harvinaisen itsestäänselvää, miten eri nappulat liikkuvat. Toisaalta jos käyttäjä vasta opettelee pelin sääntöjä, mahdollisten siirtojen näyttäminen voisi olla ihan hyödyllinen ominaisuus.

Jos tavoitteena on pelkästään tehdä esimerkki siitä, miten lempikielelläsi ohjelmoidaan, ei valinnalla ole juurikaan merkitystä. Mutta jos ohjelma on tarkoitettu oikeaan käyttöön (FICS-klientti?), Macron ehdotus on varmaan paras.

Macro [12.06.2010 22:29:32]

#

Shakki ei sinänsä ole vaikea peli, siinä vain joutuu ajattelemaan vähän pidemmälle. Itse kun pelasin ensimmäisen pelini, niin vähän siinä tietenkin oli alkukankeutta. Kuitenkin eri nappuloiden siirtomahdollisuudet oppii helposti. Pelilaudalla nappuloiden siirtely on tylsää, mutta hiirellä se on miellyttävä peli.

jalski [13.06.2010 23:06:35]

#

Päädyin siihen, että valitun oman pelinappulan siirtomahdollisuuksien esittäminen pelilaudalla saa jäädä peliin.

Peli on nyt melkein valmis. Oikeastaan ainoa isompi puuttuva asia on sotilaan korotuksen toteuttaminen sen päästessä pelilaudan toiseen päähän (valinta dialogi tai jotain. Tällä hetkellä korottaa aina kuningattareksi). Toteutettuna pitäisi olla kaikki mahdolliset shakkisiirrot, mukaan lukien: en passant ja linnoittautuminen.

Grez [13.06.2010 23:46:40]

#

On sille suomenkielinenkin nimitys: ohestalyönti

jalski [15.06.2010 20:27:47]

#

Tätä keskeneräistä testi versiota voitte kokeilla. Koodi ei ole mitenkään nättiä, kommentteja melkein nolla ja sotilaan päästessä toiseen päähän korottaa aina kuningattareksi.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta