Tietokoneshakin ohjelmointi JavaScript-kielellä
Kuusela, Jarkko (2017)
Kuusela, Jarkko
Haaga-Helia ammattikorkeakoulu
2017
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2017120519931
https://urn.fi/URN:NBN:fi:amk-2017120519931
Tiivistelmä
Shakki on suosittu kaksin pelattava strateginen lautapeli. Tietokoneshakin ohjelmointia on syytä tutkia, sillä täydellistä tietokoneshakkia ei ole vielä onnistuttu toteuttamaan liian suuren tietomäärän vuoksi. Nykypäivänä on vielä tarve tutkia, kuinka kehitetään algoritmeja ja tekniikoita paremmiksi. Tavoitteena on ohjelmoida mahdollisimman älykäs ja tehokas tietokoneshakkiohjelma, joka pystyy laskemaan mahdollisimman pitkälle saavuttaen parhaan mahdollisen lopputuloksen.
Tavoitteena projektissa oli tutkia, miten JavaScript-kielellä voidaan toteuttaa shakkipeli selainympäristöön. Peliin oli tavoitteena kehittää selkeä ja yksinkertainen käyttöliittymä. Tekoälyn oli kyettävä säännönmukaisiin siirtoihin järkevin perustein kohtuullisessa ajassa. Ohjelman vaatimuksiin kuului sääntöjen määrittely, laudan esitys, arviointifunktio ja pelipuun käsittely.
Tavoitteena ei ollut tehdä huippuluokan tekoälyä shakkipeliin projektissa. Käyttöliittymän ei tarvinnut olla yhtä monipuolinen kuin laadukkaammissa shakkiohjelmistoissa. Tavoitteena ei ollut kehittää varsinaista verkkopeliä. JavaScript-kirjastoja ei käytetty. Tietokantaominaisuudet rajattiin pois.
Teoriaosassa esiteltiin pelin säännöt, jossa käytiin läpi shakkilauta, nappulat, shakki, linnoitus, shakki ja matti, tasapelisäännöt ja nappuloiden arvot. Käytiin läpi, kuinka shakkilauta kannattaa esittää tietokoneohjelmassa ja käsiteltiin siirtojen tuottamista. Pohdittiin, kuinka arviointifunktio kannattaa toteuttaa. Pelipuuhun liittyvät minmax-algoritmi ja alpha-beta-karsinta on käsitelty. Lisäksi kuvattiin lyhyesti, mikä on JavaScript.
Ohjelmointi aloitettiin kesällä 2015. Projekti käynnistettiin virallisesti syksyllä 2015. Varsinainen raportointi aloitettiin syksyllä 2017.
Projektin aikana toteutettiin tietokoneshakkiohjelma, joka toimii valtaselaimilla JavaScript-kielellä. Tietokoneshakkiohjelmaan kuului pelikoodi, joka vastasi käyttöliittymän, pelisääntöjen ja tekoälyn yhdistämisestä. Sääntökoodi vastasi sääntöjen oikeudenmukaisuudesta. Tekoälykoodi laski siirtoja käyttäen minmax-algoritmia ja arviointifunktiota. Käyttöliittymästä tuli selkeä. Sillä pystyi pelaamaan säännönmukaisia siirtoja. Tekoälystä ei tullut huipputasoista, mutta harjoitusvastustajaksi aloitteleville pelaajille se kelpaisi.
Tavoitteena projektissa oli tutkia, miten JavaScript-kielellä voidaan toteuttaa shakkipeli selainympäristöön. Peliin oli tavoitteena kehittää selkeä ja yksinkertainen käyttöliittymä. Tekoälyn oli kyettävä säännönmukaisiin siirtoihin järkevin perustein kohtuullisessa ajassa. Ohjelman vaatimuksiin kuului sääntöjen määrittely, laudan esitys, arviointifunktio ja pelipuun käsittely.
Tavoitteena ei ollut tehdä huippuluokan tekoälyä shakkipeliin projektissa. Käyttöliittymän ei tarvinnut olla yhtä monipuolinen kuin laadukkaammissa shakkiohjelmistoissa. Tavoitteena ei ollut kehittää varsinaista verkkopeliä. JavaScript-kirjastoja ei käytetty. Tietokantaominaisuudet rajattiin pois.
Teoriaosassa esiteltiin pelin säännöt, jossa käytiin läpi shakkilauta, nappulat, shakki, linnoitus, shakki ja matti, tasapelisäännöt ja nappuloiden arvot. Käytiin läpi, kuinka shakkilauta kannattaa esittää tietokoneohjelmassa ja käsiteltiin siirtojen tuottamista. Pohdittiin, kuinka arviointifunktio kannattaa toteuttaa. Pelipuuhun liittyvät minmax-algoritmi ja alpha-beta-karsinta on käsitelty. Lisäksi kuvattiin lyhyesti, mikä on JavaScript.
Ohjelmointi aloitettiin kesällä 2015. Projekti käynnistettiin virallisesti syksyllä 2015. Varsinainen raportointi aloitettiin syksyllä 2017.
Projektin aikana toteutettiin tietokoneshakkiohjelma, joka toimii valtaselaimilla JavaScript-kielellä. Tietokoneshakkiohjelmaan kuului pelikoodi, joka vastasi käyttöliittymän, pelisääntöjen ja tekoälyn yhdistämisestä. Sääntökoodi vastasi sääntöjen oikeudenmukaisuudesta. Tekoälykoodi laski siirtoja käyttäen minmax-algoritmia ja arviointifunktiota. Käyttöliittymästä tuli selkeä. Sillä pystyi pelaamaan säännönmukaisia siirtoja. Tekoälystä ei tullut huipputasoista, mutta harjoitusvastustajaksi aloitteleville pelaajille se kelpaisi.