Ideoita ohjelmointiharjoituksiksi

14 12 2008

Aloittelevan koodarin on usein vaikeaa keksiä mitä koodaisi. Minulta on usein kysytty ideoita, mitä voisi ohjelmoida. Kokosin tähän kirjoitukseen eri tasoisia moneen ohjelmointiympäristöön soveltuvia ideoita. En paljasta aivan kaikkea harjoitusten toteutuksesta, vaan annan vain vinkkejä ohjelmien algoritmeista.  Tavalliset ohjelmointiharjoitukset eivät mene hukkaan, koska koodausrutiinin hankkiminen on tärkeää.

Helppoja perusharjoituksia

Tästä vaikkapa pakollisen ohjelmointikurssin harjoitustyöksi, jos et ole sen kummemmin kiinnostunut koodaamisesta:

Painoindeksin laskeminen

Painoindeksin laskemiseksi kysytään käyttäjältä paino ja pituus, jonka jälkeen painoindeksi kerrotaan käyttäjälle.  Ohjelmaa voi kehittää vaikkapa kysymään käyttäjän nimen ja ilmoittamaan mihin painoluokkaan käyttäjä kuuluu tyyliin “Lauri, painoindeksisi on 26,7, olet lievästi ylipainoinen. Sinun tulisi laihduttaa 4,3 kg päästäksesi normaalipainoon“. Konsoliohjelma toimii while- tai do-while -silmukassa, lopuksi kysytään yritetäänkö uudestaan.

Laskin

Silmukassa toimiva nelilaskin kysyy käyttäjältä kaksi lukua ja niille tehtävän operaation. Tästä voi kehittää vaikka pelin, jossa laskettavat luvut arvotaan ja käyttäjältä kysytään vastaus laskutoimitukseen.

Pientä kivaa

Tässä pientä kivaa vaikkapa nettisivuille. Nämäkin voivat onnistua aivan aloittelijaltakin.

Intiaanimigeneraattori

Intiaaninimigeneraattorin tekemiseksi joudut keksimään joukon intiaaninimiä, jotka tallennat ohjelmakoodissa taulukkoon tai laitat tekstitiedostoon. Generaattorin saat toimimaan siten, että kysyt käyttäjän nimen ja lasket sen merkeistä luvun esimerkiksi laskemalla merkkien ascii arvot yhteen.  Saadusta luvusta otetaan jakojäännös keksittyjen nimien lukumäärällä. Jakojäännöstä käytetään nimitaulukon indeksinä. Toteutin tallaisen kerran php:llä, löydät sen täältä.

Puppulausegeneraattori

Puppulausegeneraattorin saat ohjelmoitua laittamalla virkkeiden pätkiä esimerkiksi kolmeen taulukkoon. Yhteen taulukkoon tulee virkkeen alkuosaksi sopivia, toiseen keskelle ja kolmanteen loppuosaksi sopivia pätkiä.  Arpomalla taulukoista satunnaisen virkkeen alun, keskiosan ja lopun saat hassunkurisia lauseita.

Pieniä pelejä

Pienten pelien ohjelmointi on mukavaa. Näiden tekemiseksi on parasta perehtyä jonkilaisen grafiikan tuottamiseen, vaikka toki nämä merkkipohjaisinakin voi toteuttaa. Itse opettelin ohjelmoimaan tällaisia pelejä tehden. Pieniä pelejä ohjelmoidessa voi harjoitella dynaamista muistinhallintaa, säikeistystä, olio-ohjelmointia, tiedostonkäsittelyä esimerkiksi tuloslistan tallennuksessa ja erilaisia aikalaskureita. Kunnollisen tykkipelin pelaaminen kaksinpelinä verkon yli on varmasti mukavaa.

Hirsipuu

Hirsipuun toteutukseen tarvit luonnollisesti arvattavia sanoja. Pelin runkona on silmukka, joka loppuu kun sana on arvattu tai vääriä arvauksia on liikaa. Hirsipuun ja siinä roikkuvan ukkelin piirtäminen kannattaa tehdä erilliseen funktioon, jolle välitetään väärien arvausten määrä.  Näitä tietoja on hyvä pitää tallessa pelin edetessä:

  • Väärien arvausten lukumäärä – tarvitaan pelin loppumisen tunnistamiseksi ja hirsipuun piirtämiseen.
  • Väärin arvatut kirjaimet – ei kahta virhepistettä samasta kirjaimesta
  • Pelitilanteen voi tallentaa merkkijonoon, jossa kaikki arvot alustetaan esimerksi _-merkillä ja korvataan pelin edetessä arvatulla kirjaimella. Kun _-merkkejä ei enää ole, sana on arvattu.

Matopeli

Matopelin mato on helpoin tehdä osista. Jokaisen osan koordinaatit ovat tallessa taulukossa. Mato etenee siten, että etuosalle luodaan uusi koordinaatti ja viimeinen osa madosta tuhotaan.  Omenan koordinaatit ovat myös tallessa. Uuden koordinaation kohdalle tehdään törmäystarkistus, eli tarkistetaan, että koordinaattien kohdalla ei ole seinä, eikä madon häntä.  Omenan sattuessa kohdalle mato jatkaa kulkuaan siten, että viimeistä osaa ei hetkeen tuhota, eli madon häntä jää paikoilleen.

Matopelin, jossa mato kääntyy 90 asteen käännösten sijaan loivasti, tekemiseksi sinun täytyy palautella mieleen hieman trigonometriaa.  Mato tehdään samoin taulukkoon kuten edellinenkin, mutta törmäystarkistuksissa joudutaan käyttämään pythagoraan lausetta etäisyyslaskentaan. Madon suunnan x- ja y-komponentit muuttuvat siten, että niiden nopeus pysyy vakiona suunnasta huolimatta.

Matopelejä olen tehnyt moneen eri ympäristöön alkaen TexasInstrumentsin graafisesta laskimesta. Kerran tekaisin koulukaverin kanssa JavaApplettiin hieman perinteisestä matopelistä poikkeavan toteutuksen. Löydät sen täältä.

Tykkipeli

Tykkipelissä kaksi tykkiä ampuvat toisia. Väliin on hyvä tehdä esteeksi maastoa, ettei suorasuuntaus onnistu.  Ammuntaa säädetään lähtökulman- ja nopeuden avulla. Tuuli otetaan myös huomioon. Tykkipelin tekemiseksi joudut palauttelemaan hieman mieliin fysiikan lakeja. Sen verran annan vinkkiä, että putoamiskiihtyvyys on vakio ja tuulikomponentti vaikuttaa ammuksen x-suuntaiseen nopeuteen.





Netin parhaat palat: Ilmaisohjelmat.fi

13 10 2008

Yksi Internetin parhaista saiteista on mielestäni ilmaisohjelmat.fi. Sinne on koottu kattava valikoima internetistä löytyvistä parhaista ilmaisista tietokoneohjelmista. En ole kertaakaan joutunut pettymään valittuani ohjelmaa eri käyttötarkoituksiin sivuston avulla. Sivustolle ei hyväksytä mitä tahansa ja kriteerit tuntuvat olevan kohdallaan.

Sivustolla esiteltävien ohjelmien vähimmäisvaatimukset ovat:

  • Ohjelmat toimivat Windows-käyttöjärjestelmässä (monet ohjelmat toimivat myös muilla käyttöjärjestelmillä)
  • Ohjelmien yksityinen käyttö (kotikäyttö) on täysin ilmaista
  • Ohjelmat eivät sisällä salaa asentuvia mainos- tai vakoiluohjelmia


Lisäksi ohjelmien valintaan on vaikuttanut erityisesti:

  • Suomenkielisyys
  • Avoimen lähdekoodin lisenssi, jolloin ohjelmien käyttö on ilmaista kaikille, kaikkiin käyttötarkoituksiin
  • Muu joustava freeware-lisenssi. Jokaisesta ohjelmakategoriasta löytyy vähintään yksi ohjelma, joka on ilmainen myös yrityksille ja julkiselle sektorille.

Nykyään käytänkin palvelua googlen kautta. Viimeksi tarvitsin varmuuskopiointiohjelmaa töihin ja laitoin googleen sanat ilmaisohjelmat varmuuskopiointi. Olen ollut todella tyytyväinen Cobian Backupiin. Muutenkin sivuston kuvaukset ohjelmista osuvat yksiin omien kokemusteni kanssa. Esimerkiksi Paint.NET, Notepad++ ja FileZilla, joihin olen ollut todella tyytyväinen, löytyvät sivustolta.





Single File PHP Gallery

1 07 2008

Olen jo monta vuotta sitten tehnyt php:lla kuva-gallerian, joka hakee automaattisesti kuvat annetusta hakemistosta. Suurin ongelma on ollut, että minulla ei ole ollut käytössä php:n grafiikkakirjastoa ja nyt kun minulla olisi sellainen, en ole kerinnyt perehtymään sen käyttöön. Grafiikkakirjastossa on se etu, että kuvista voi generoida pienet esikatselukuvat ns. thumbnailit ja se nopeuttaa gallerian käyttöä etenkin hitailla yhteyksillä. Tavoitteena olisi saada tehtyä kuvagalleria, jonka saa käyttöön laittamalla yhden tiedoston kotisivulle ja siihen määritellä, mistä kuvat haetaan.

Omasta projektistani on esimerkki täällä. Sen ulkoasun ei ole tarkoituskaan olla hieno, vaan sen hiominen alkaa sitten joskus kun saan sen teknisesti toteutettua. Aikaisemmin olen käyttänyt kuvagalleriaa upotettuna jollekin toiselle sivulle.

Valmiina löytämissäni toteutuksissa on ollut aina jokin asia mikä ei miellytä. Löysin netistä Single File PHP Gallery -nimisen yhden tiedoston kuvagallerian. Se on paras tähän mennessä löytämistäni. Sen huonoja puolia on kuvatekstien puuttuminen ja JavaScripitin käyttö. Galleriaa voi käyttää myös ilman JavaScriptiä, mutta käyttö on vähän kömpelöä.

Jos minulla olisi käytössäni tietokanta, käyttäisin Coppermineä.





Inssityö

27 06 2008

Teen insinöörityötä aiheesta “Tapahtumahistorian tallennus ja käsittely kiinteistöautomaatiolaitteessa”. Ohjelmoin siis softaa joka hoitaa lokitiedostojen kirjoittamisen ja lukemisen kiinteistöautomaatiolaitteessa. Varsinaista työtä teen töissä Oumanilla ja kirjallinen osuus pitäisi saada aikaiseksi vapaa-ajalla.
Projekti on alkanut jo maaliskuun puolella ja on toki hyvällä mallilla. Mutta sen verran monta yllätystä on tullut matkan varrella eteen, etten osaa kunnollista arviota työn valmistumisesta kertoa. Tässä vaiheessa on tavoitteena saada paperit syyskuussa. Se on kova tavoite, mutta ilman tavoitetta en valmistuisi pitkään aikaan.

Laitan sitten valmiin version kaikkien nähtäväksi. Tässä vaiheessa ei parane tämän enempää kertoa, ettei tule paljastaneeksi jotain jota ei saisi kertoa.





Lääketietopeli

27 06 2008

OppiTroppiSyksystä 2007 kevääseen 2008 projektina oli Mediplorer Oy:n tilaama lääketietopeli. Peli jaetaan kaikille lääketieteen opiskelijoille ja sen tarkoitus on opettaa opiskelijoille lääkehoidollisia yksityiskohtia. Sain projektin kun toinen Mediplorerin perustajista kyseli kerran koulun kahvilassa, että osaanko minä koodata tietopelin. Vastasin, että riippuu tietenkin mitä peliltä vaaditaan. Siinä vaiheessa en vielä tiennyt mihin vastaus johtaa, mutta asiaan palattiin muutaman kuukauden kuluttua.

Kolmen lapsen isänä aika meinasi olla melko vähissä, mutta niin vain projekti saatiin kasaan. Tein peliin teknisen toteutuksen, Pääkeskus ja erityisesti Jaakko Tikkanen vastasi grafiikasta.

Opin projektissa ainakin C# ohjelmointia. Pelistä tehtiin .NET 2.0 frameworkin päällä toimiva, mutta muuten täysin itsenäinen sovellus, jota voi pelata millä tahansa Windows koneella ilman asentamista.

Projekti oli ensimmäinen, minkä toteutin yksin ulkopuoliselle.

http://www.mediplorer.fi/oppitroppi.html