(linkedin) (delicious)

    Kahvikuppi-SuDoKu (lataa ja pelaa!)

    Vaikka sudokulukujen pohtiminen tuntuukin monen mielestä varmasti ajan haaskaukselta, niin itselleni siitä muodostui hyvänmakuinen aivopähkinä purtavaksi. Purtavaa oli siis tarjolla tällä kertaa perus sudokupeli ohjelmointiprojektin merkeissä, jonka varmasti hyvin usea aloitteleva ohjelmoija on joskus toteuttanut. Tavoitteena oli luoda peliin omalla logiikalla toimiva sudoku-moottori, joka luo uusia pelejä napin painalluksesta. Projekti toteutettiin VB.NET-kielellä Visual Studio -kehitysympäristössä, joten toivomuksena oli luonnollisesti myös, että jotain uutta tietoa jäisi taas .NET:n tiimoilta omaan takaraivoon.


    Perusnäkymä

    Pelin pääikkuna. Sudokuluvut lisätään ruudukkoon itsetehdyn .NET:n User Control -komponentin avulla. Peli mittaa lisäksi sudoku-ongelman ratkaisemiseen kulunutta aikaa. Pelaajalla on yksi mahdollisuus tarkastaa syöttämiensä sudokulukujen oikeellisuus.


    Onnistunut suoritus

    Mikäli sudoku-ongelman ratkaisemiseen kulunut aika on kyllin hyvä, niin se palkitaan pääsyllä Top5-listaan.


    Top5-tulokset

    Pelin Top5-lista parhaat tulokset. Tulokset voidaan myös palauttaa, jos mieli niin tekee. Tulokset tallennetaan käyttöjärjestelmässä pelin kansiorakenteeseen olioiden sarjallistamis-tekniikan (serialization) avulla.


    Mitä meni vikaan?

    Jos GameOver alkaa sapettamaan ja pelaaja haluaa kaivaa syitä pelin epäonnistumiseen, niin sen voi tehdä vertaamalla omaa ja oikeaa vastausta.

    Tälläistä siis tällä kertaa! Itse pelin ohjelmointiprosessista voisin kuitenkin kertoa muutaman sanan. Nimittäin ylivoimaisesti suurimmaksi ongelmaksi projektin työstämisessä muodostui odotetusti pelimoottorin logiikan ohjelmointi, mihin kuuluu sudokulukujen (itse pelin ratkaisuluvut) ja pelaajalle näytettävien vihjelukujen generoinnit. Kaikki sudokulukuja tarkemmin tutkineet tietävät siis esimerkiksi, että sudokun vaikeusastetta ei voida määritellä pelkästään pelaajalle näytettävien vihjelukujen määrän pohjalta, vaan enemmänkin niiden sijoittelun perusteella. Tämänkin vuoksi pelimoottorille piti siis kehitellä pienimuotoinen tekoäly, jonka avulla lukujen generoinnit suoritetaan.

    Sudokujen ratkaisulukujen generointi toteutettiin perinteisien olio-ohjelmoinnin menetelmien avulla. Jokaisesta numeroruudukon 9×9 alueesta muodostettiin siis omat luokat, joissa käsitellään vain kullekkin alueelle kuuluvia numeroita. Tämän avulla eteentulevat ongelmat voitiin pilkkoa pienempiin kokonaisuuksiin, jolloin niiden hallitseminen on helpompaa. Ruudukon jakaminen ei kuitenkaan vielä riittänyt ratkaisemaan lukujen käsittelyyn liittyviä erilaisia tilanteita, joten projektiin luotiin erillinen “staattinen” moduli, joka oli suoraan käytettävissä kaikissa luokissa. Tähän moduuliin ohjelmoitiin siis kaikille luokille yhteisiä metodeja ja ominaisuuksia, joiden avulla lukuja voidaan käsitellä halutulla tavalla.

    Pelaajalle näytettävien vihjelukujen generointi pyrittiin toteuttamaan taas siten, että pelattavat sudokut olisivat melko helppoja. Tämä toteutettiin siten, että vihjelukuja paljastetaan melko paljon käyttäjälle ja kullekkin 9×9 numeroalueelle määrätään satunnaisesti oma määrä näytettäviä vihjelukuja. Kun alustava vihjelukujen generointi on suoritettu, pelimoottori pyrkii siirtelemään lukuja hieman erilleen toisistaan, mikäli ne ovat liian lähekkäin. Siirtelyn logiikka perustuu siihen, että moottori pyrkii välttämään tilanteita, joissa vihjelukuja on vierekkäin kolme kappaletta joko vaaka- tai pystysuunnassa. Se kuitenkin voi sallia joissain peleissä kolmen vierekkäisen vihjeluku-ryhmän esiintymisen maksimissaan 3 kertaa. Olen huomannut, että tämä ei toimi aina ja sen vuoksi kolmen ryhmiä voi olla joissain peleissä enemmänkin.

    Mitä uutta sitten opin projektia työstäessäni? Jos keskittymiskyvyn ja itsehillinnän harjaantumista ei lasketa, niin .NET:n piirtonimiavaruudet (System.Drawing ja System.Drawing.Drawing2D) tulivat joissain määrin tutummiksi. Lisäksi tutustuin ensimmäistä kertaa omien käyttöliittymäkomponenttien luontiin, josta voidaan todeta, että: “seKIN on tehty mukavan helpoksi”.

    Tässäpä oli pienimuotoinen esittely projektista. Jos mielesi tekee nyt pelata peli tai pari uutta “Kahvikuppi-SuDoKua”, niin saamasi pitää. Voit ladata pelin alla olevasta linkistä. Latauspaketti sisältää ainoastaan pelin käynnistämiseen vaadittavan exe-tiedoston. Peli luo Top5-tuloksia varten automaattisesti yhden tiedoston samaan kansioon, missä itse exe sijaitsee. Peliä on testattu Windows XP -ja Vista -käyttöjärjestelmissä, joten toiminta esimerkiksi Windows 7:ssa on epävarmaa.

    Sudoku_Released1.1.exe

    aihe: Projektit

    “Kahvikuppi-SuDoKu (lataa ja pelaa!)” (1 kommentti)
    1. Tosi hauska. Lisää tällaisia! :ylös:

      14.05.2010 08:32 - Konsta

    Kommentoi

    • (hymiot)Näytä Hymiöt
    •  

     
    | Takaisin ylös |
    Blogimoottori: WordPress
    Ulkoasu, Sisältö: © Timo Kallio, 2009-2012 - Savonia-ammattikorkeakoulu