Koodasin simppelin laivanupotus-tyyppisen pelin! Samalla jäin luokalle: tämä oli ensimmäinen jakso, jonka jouduin käymään kahdesti.
Minun ensimmäisessä yhden pelaajan pelissäni etsitään yhtä randomisti 5×5-ruudukkoon piilotettua 1×1-kokoista laivaa! Laiva sijoittuu joka pelikekerralla satunnaisesti eri kohtaan. Käytössä on neljä arvausta. Peliä pelataan tuossa ruudussa, johon koodini printtailee asioita.
Pelin tekeminen oli vaikeaa, mutta selviydyin
Harjoitus oli kurssin tähän mennessä ainakin henkisesti pisin ja aika vaikea. Kävin sen kaksi kertaa kaikkien netin ohjeiden kanssa ja nyt luulen, että tajusin oikeasti mitä tein. Koodasin pelin! Mieletöntä.

Ensimmäiseen vastoinkäymiseen törmäsin tosin heti aluksi. Painelin hämmentyneenä mitä sattuu ja käänsin vahingossa näyttöni ylösalaisin (ks. kuva). Opin poikaystävältä, joka äänen perusteella tarkistamaan tilanteen, että näytön kuvaa voi käännellä pikakomennolla Ctrl + Alt + [joku nuolinäppäin]. Testatkaa vaikka!
Sittemmin hankaluudet muuttuivat koodinsisäisiksi. Tässä harjoituksessa piti muistaa suurin piirtein kaikki aiemmin opittu samalla, kun opeteltiin uusia komentoja. Oli vaikeaa pitää mielessä kaikki tarvittava, enkä ymmärtänyt vihjeitäkään, vaikka kun sitten lunttasin miten homma toimii, ne olivat tosi selkeitä.
Apua sain muun muassa tästä erinomaisesta videosta. Sen tehneellä Clever Programmerilla on Youtube-kanavallaan näköjään hyvä tutoriaali, jossa hän selittää Codeacademyn Python-kurssin läpi tosi selkeästi ja n00bia rohkaisevasti, ja lisäksi kaikkia muita aiheeseen liittyviä videoita. Materiaali on minusta tosi hyvää, siinä tehdään harjoituksia ja selitetään, mistä funktiot hakee elementtinsä ja mihin milläkin komennolla viitataan. Lisäsin maininnan myös Python-tutoriaalilistaani.
Koodaamassani pelissä ei ollut siis juurikaan omaa luovuuttani, vaan se oli kurssitehtävä, jonka ratkaisussa auttoivat ihmiset ympäri nettiä. Mutta kirjoitin koodin kokonaan itse kirjain kirjaimelta ja ymmärrän nyt, mitä siinä tapahtuu! Se on tosi paljon se! Lisäilin kokonaan itse vain hyvin pieniä ominaisuuksia, joita ei ohjeistettu: game over -tilanteessa näytetään oikea vastaus, ja tietenkin suomenkieliset komennot käyttäjälle.
Pelistä tuli lopulta tosi hieno!
Se toimii näin:
Näiden ominaisuuksien lisäksi pelissä on vielä ominaisuus, että jos yrittää samoja koordinaatteja uudelleen, saa virheilmoituksen: ”Tuon kohdan kuule jo arvasit. Sinne meni vuoro.”
Omien pelaajalle näkyvien tekstien keksiminen on vähän rajallista, koska en tiedä, millä lisäpaketilla string-pätkiin (tekstit) saisi lisättyä ääkköset! Niin että jos joskus epähuomiossa sinne meni vaikka ä, niin virheilmoitusta pukkasi, eikä peli toiminut. Selvitän tämän myöhemmin, mutta jos joku tietää heti, saa vinkata!
Syötettävät arvot ovat vähän käyttäjäepäystävällisesti 0–4 eikä 1–5. Ensin en tajunnut sitä ja yritin muuttaa tilanteen vasta lopuksi (debuggaus-vaiheessa, opin!), ja silloin se oli jo määritetty nollasta neljään jonnekin mistä en enää nopsaan keksinyt että minne. Tuli virheilmoitus, enkä jaksanut käyttää tähän aikaa enempää.
Peliähän ei muuten mitä luultavimmin pääse läpi, koska annoin pelaajalle vain neljä yritystä ja laivalla on 25 mahdollista paikkaa. Laivahan menee joka kerta eri paikkaan satunnaisesti, enkä edes minä tiedä, että minne. Mutta onneksi voin näyttää myös miten voitetaan, kun osuu laivaan, kun pikkuisen juksaan ja laitan sen laivan paikan näkyviin jo ennen ensimmäistä kierrosta:
Oon tästä niin vaan tosi ylpeä.
Kokeilepa lisätä yksi pikku kirjain niihin stringeihin (tai siis niiden ulkopuolelle). Eli sen sijaan että kirjoittaisit
print ”Taessae ei ole skandeja”
niin kirjoitatkin
print u”Tässä on skandeja”
(Nimim. virheilmoitusta näkemättä oletan vaan, että siellä on antiikkinen merkistökoodaus; toi u käskee Pythonia käyttämään Unicodea tässä yksittäisessä tilanteessa. Sen käyttäminen kaikkialla muualla on sit oma juttunsa, joka ei liene relevanttia Codecademyn selainympäristössä. Tai ehkä oliskin.)
Jes, kyllä vaan, analyysi meni oikein: kyseessä taitaa tosiaan olla antiikkinen merkistö… Tämä vinkki siis toimi, kiitos!