Paluu Haskelliin, osa 2
Edellisessä osassa asensin Haskell-tulkin ja ajoin ensimmäiset koodinpätkät. Tässä osassa aion aloittaa šakkipelin toteutuksen. Aloitan poistamalla Chess.hs-tiedostosta kaiken paitsi ensimmäisen rivin, module Chess where
.
En ole vielä miettinyt, miten rakennan ohjelman. Aloitetaan jostain: määritetään tietotyypit laudalle, laudan ruuduille (jotka voivat olla joko tyhjiä tai varattuja) sekä nappuloille (joilla on väri sekä tyyppi).
data PieceType = Pawn | Bishop | Rook | Knight | Queen | King deriving Show data Piece = Black PieceType | White PieceType deriving Showdata Square = EmptySquare | Piece deriving Show
Tai jotain, toi ei kai tuu toimimaan.
Laudan ei kai tarvitse välttämättä olla edes konkreettinen asia, oma tietorakenteensa. Jos tiedämme kaikkien nappuloiden sijainnit, ja tiedämme muutaman bitin pelin kulusta (onko tornitusta tapahtunut, onko ohestalyönti (en passant) mahdollinen nyt), niin meillä on kaikki tarvittava tieto pelin simulointiin ja laskemiseen; jos lautaa tarvitaan, voidaan se rakentaa tarpeen mukaan ja unohtaa jälkeenpäin. Kun aiomme siirtää nappulaa, esimerkiksi tornia, on meidän toki tarkistettava sen rivin ja sarakkeen ruudut, joihin torni voisi siirtyä, muiden nappuloiden varalta. Jos nappulamme olisivat muistissa laudalla, ja lauta olisi järjestetty juuri oikealla tavalla, voi bittimanipulaatiomagialla tarkistaa ne ≈32 ruutua, joihin nappula voisi ylettyä, mutta jos lautaa ei ole niin ainoa vaihtoehto on tarkistaa kaikkien ≤32 nappulan sijainnit... mutta meillä on tietokone, tämäkään ei ole ongelma. (Usein ajattelen kuin ihminen, joka voi silmillään vilkaista ylös ja alas pitkin sarakkeita, mutta prosessorillahan ei ole silmiä.)