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.
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.
aihe: Projektit
-
Tosi hauska. Lisää tällaisia! :ylös:




