12.2.2013

Kokonaisuushan on jo melkein nähtävissä!

Vauhtia näppeihin

Räpellysinnostus puraisi mehevästi, joten olen askaroinnut vaununkuvatuksen parissa vähän joka päivä. Kun sain rungonpuolikkaat kutakuinkin hyvään kuosiin, jäljelle jäi enää sekä jo toissaviikolla miettimäni kustomoidut hantaakit ja rakkineen kasaanlyönti. Luonnollisestikaan en ikinä malttanut kaivaa jekkulankojani mistään, vaan kahvat loistavat edelleen poissaolollaan. Kyllä minä ne joku päivä saan väänneltyä paikoilleen.


Telahäkkyrät

Kun vaunun runko oli kutakuinkin siinä kunnossa, että työkaluja lukuunottamatta mitään ei enää uupunut, käänsin ahnaat sormeni kohti telakoneistoa. Vetopyörät iskin kasaan ja löin paikoilleen, ajatuksenani oli jättää idler wheel (suomenkielinen termi hakusessa, johtopyöräksi sitä jossain pienoismallit.net-rutinoissa kutsuttiin) irralleen ja kiinnittää se sitten samaan aikaan lakujen kanssa. Näinpä seuraavaksi askareeksi nousikin telapyörien ja niiden kiikuttimien kasaaminen.
Taidan toteuttaa noiden maalaamisen erikseen ja kiinnittää ne sitten myöhemmin (erikseen maalattuun) runkoon. Saan samalla ehkä sotkettua nämä kiikut ja alarungon vähän hienommin kuin jos rupeaisin säistämään vasta sitten, kun koko sekamelska on nipussa ja osaset varjostavat toisiaan ikävästi.

Amme umpeen ja menoksi

Mitäs tässä enää arpomaan, kun kaikki on melkeinpä valmista siinä määrin, jossa on tarkoituskin? Pienen kuivasovittelun jälkeen paiskasin kannen kiinni ja jätin kuivumaan. Kuvat ovat kiireestä johtuen karmeat, pahoittelen mitä syvimmin. Vaiheessa-kuviahan ne ovat, joten pidätän oikeuden rakeisen sotkun jakamiseen, valmiista tekeleestä sitten otan vähän huolellisempaa todistusmateriaalia.

Näin. Joudun toki roiskimaan korjauskerroksen pohjamaalia, mutta se vaihe oli tiedossa jo iäisyys sitten. Taidan kyllä siirtyä seuraavaksi tornin kimppuun ja hoitaa maalailun vasta ihan lopuksi. Takarungosta puuttuvat kaikensorttiset työkalut eli lapiot, moukarit ja rautakanget - ne pääsevät paikoilleen kun runko on britti-imperiumin hengessä vihertävä.


7.2.2013

Taka- ja ylärungon kimpussa

Bisnestä tavalliseen tapaan

Olen pakertanut vaunun parissa kutakuinkin siellä, missä aiemminkin. Rakentelujärjestys on vähän mielivaltainen ja riippuu aikalailla siitä, mitä meinaan milloinkin maalata. Tuoreimmat rakentelutuokiot ovat keskittyneet takarunkoon ja eilisiltana napsin luukkuja paikoilleen kannella. Kuskin ja radistin luukkujen kahvoja en käyttänyt, koska minusta nuo palikat näyttävät ihan liian suurilta kaikkeen muuhun verrattuna. Koetan metsästää jostain pienimmän (halkaisijaltaan siis) metallilankani, jos siitä vaikka saisin kivat hantaakit aikaan. Jos jotain muitakin oleellisia paikkoja on, taidan toteuttaa samanlaiset niihinkin ihan vaan yhtenäisyyden ja askartelun vuoksi. Muuten mennään aikalailla suoraan askista -metodilla, koska muuten tähän menee vielä enemmän aikaa ja haluaisin kovasti saada tänä vuonna edes pari projektia valmiiksi asti ;)


Kohelsinkohan?

Ideana on jättää luukut kiinni, joten sisätilojen kanssa en meinaa ottaa paljoa kierroksia. Jostain syystä tuossa takarungossa oli silti vähän ylimääräistä hämminkiä. Palikat olivat ymmärtääkseni siihenkin asti ihan oikeilla paikoillaan ja olivat sopineet mitä mainioimmin. Vaan kun rupesin puskemaan bensatankkeja paikoilleen (niiden sivulirpakkeista syntyi jonkunlainen hämmentävä puolipohjaton laatikkoviritelmä), palaset eivät sopineet niin millään. Pohjat eivät uponneet pohjaan asti ja reunat tökkivät nekin vastaan, lopputuloksena millitolkulla irvistystä takareunassa. Mengelöin siis ylimääräiset mäkeen sillä idealla, että luukkujen takana ovat mitä ovat - vain ulkomuoto ratkaisee.


Nyt arvon hiljaa mielessäni, onko noiden sisäpintojen maalaaminen alkuunkaan oleellista vai pitäisikö niihin huljauttaa vain pikainen maalipinta. Jos jättäisin ne pohjamaalin ja paljaan muovin värisiksi, jäisivät ne mitä todennäköisimmin kuitenkin kaivelemaan. Niin ja alakautta saattaisi nähdä vähän tuonne sisäpuolelle, joten ei noita ihan alastomiksi voi jättää senkään takia!
Taidankin siis jo tietää oman vastaukseni.

31.1.2013

Pommiräkkejä

Tästähän jäi osia yli...

Viikon saavutukset ovat taas pienet mutta sitäkin valtavammat. Sotkin vähän lattioita, jotteivät ne näyttäisi ihan neitseellisen valkoisilta, mikä ei oikein sovi paskaiseen sotakoneeseen. Kohelsin vähän noiden ammustelineitten kanssa mutta siitä huolimatta päätin, etten lähde tunkemaan kaikkia 32 tuubia ohjeessa tarjottuun tapaan. Syy? Tekele näyttää vähän vähemmän lavastetulta, kun kaikki ei olekaan täynnä tai muuten tiptop-kunnossa.

Kikkakeppostelua

Muistelin jostain lukemistani, että teipinpätkistä saa käteviä syöksyvöitä piloteille. Sovelsin ideaa vähän omaan käyttööni sopivammaksi. Siispä saksin erilleen muutaman pätkän maskausteippiä ja viipaloin ne pituussuunnassa skaalaansopivampaan leveyteen (fiilispohjalta). Huitaisin ne jotenkin noiden putkien yli ja huljuttelin Devlan Mudilla vähän vähemmän räikeiksi. Ne ovat olevinaan kuormansidontaliinoja. Minkäänsorttisia lukkoja tai klipsuttimia en sentään keksinyt askarrella...




Ei se minusta ihan karmealta näyttänyt.

23.1.2013

Takaisin maalien pariin

Törkeysjärjestys

Todellinen maailma on taas vaihteeksi hidastanut erinäköisten projektieni (3+) etenemistä ikävästi. Vaan minkäs teet, harrasteet eivät ole aina prioriteettijonossa ykkösenä. Otin silti itseäni jälleen niskasta kiinni kevyellä otteella ja roiskin valkoista sisämaalipintaa vaunun sisätiloihin. Lisäksi googlettelin vähän, josko sisätiloista olisi vaikka ihan värikuvia tarjolla niin, että saisin jotain ehkä oikeankin näköistä aikaan.


Huolellisen tutkimustyön tulos

Nuo radiolaitteet olisivat olevinaan vihreitä. Katsotaan, saisinko maalattua noita jo tänään illemmalla. Ehtiminen riippuu tapansa mukaan ympäröivästä maailmasta vaatimuksineen.

11.1.2013

Oma koodailuprojekti, osa V

Pikkumuutoksia sinne tänne

Saavutukseni näiden viikkojen aikana ovat aika vähäiset, kiitos vajaan kolmeviikkoisen loman ja kaiken muun pienen. Koetin vähän sörkkiä 'roidien törmäilyä siten, että massaerolla olisi vaikutusta - isompaan törmääminen vaikuttaa siihen isoon kiveen vähemmän kuin pieneen jne. Viilailuahan tuo vaatii, mutta on askel vähän normaalimpaan suuntaan. Nyt megamurkula ei lähde kiitämään tuhatta ja sataa kun pikkumurikka kolahtaa siihen. Ja jos oikein hassusti käy, se halkeaa kahteen suureen murikkaan.

Huvikseni kokeilin väkertää vaaleansinisen gridin taustalle. Ikäänkuin koko roska olisi tuherrettu ruutupaperille. Ehkei se toimi niin hyvin. Katsotaan nyt.
Raapusteluefektin tavoittelua


Sataa sataa ropisee...

Samoin pykäsin kevyen planeettaluokan. Ruudulla se on ympyrä ja taustalla sillä on myös nimi, massa, populaatio sun muuta epäoleellista. Kun kivet kopsahtelevat tonttiin, populaatio vähenee niin kauan kun sitä vielä on. Yllättävän hauskaa tuotakin oli testata :P
Candyland II


Paukkuraudat, kuolemansäteet ja n-vaiheiset raketit ovat tietysti vielä vain ideatasolla. Aloittelin tuossa ennen lomalle lähtöäni risteävien janojen tutkimista mutten päässyt puusta pitkään. Vielä.


Muu touhu

Ensi viikolla saattaisin ehkä ehtiä tuon tankinkin kimppuun, jos kaikki muu kiirus sallii. Sekin on ruvennut vähitellen taas kuumottelemaan, usean viikon tauon jälkeen.

2.1.2013

Oma koodailuprojekti, osa IV

Toiminnallisuutta mukaan

Sain ruudulla näkymään sitä ja tätä, mutta millään ei ollut mitään vaikutusta mihinkään. Tämä ei käynyt laatuun, joten seuraavat GameObjectiin lisättävät luokkamuuttujat olivat mm. hitpoints eli osumapisteet. Tungin minä sinne kaikkea muutakin hienoa, kivaa ja tulevaisuudessa oleellistakin, mutta ei niistä ole hirveästi iloa tässä vaiheessa. Kun kerran ollaan jonkunsorttisen Asteroids-viritelmän kanssa tekemisissä (en meinannut jäädä siihen, vaan lisätä jotain todella sekavaa mutta ainakin omasta mielestäni mielenkiintoista), törmäily on kai aika olennaista. Tätä raapustaessani olen tehnyt pohjaa pidemmälle kuin mistä nyt on kertoa.

Törmäilymietteitä

  • Murkulat voivat törmäillä pelaajan purtiloon ja päinvastoin
  • Murkulat voivat törmäillä toisiinsa
  • Nopeuseroilla pitäisi olla merkitystä törmäystilanteessa
  • Massaeroilla pitäisi olla merkitystä törmäystilanteessa
  • Törmäyskulmakaan ei ole yhdentekevä

Kaksivaiheinen törmäystestaus

Kun kullakin hetkellä listoilla voi olla aika hyvä määrä olioita, ei ole mitään tolkkua käydä kaikkien törmäyksiä läpi supertarkasti, vaan voidaan ensin käydä kaikki läpi ja katsoa edes summittaisesti, josko kolisee ja sitten, tarpeen vaatiessa, tarkemmin. Ykkösvaiheen toteutuksessa käyn kaikki 'roidit ja pelaajan aluksen läpi ja vertaan toisiinsa, josko niiden summittaiset pinta-alat risteävät. Tähän puuhaan pygamen rectangle.colliderect() riittää mukavasti:

def collides_with(self, other):
        collides = False
        if self and other:
            if self.get_rect().colliderect(other.get_rect()):
                collides = self.accurate_collision(other)
        return collides
 
def accurate_collision(self, other):
        return True


Jälkimmäinen metodi on luonnollisesti stubi, jonka toteutus tulee kohdille kun ehtii. Tämänhetkinen vain toteaa, että "näyttää siltä, että törmäävät ja se kelpaa minulle" ja sen jälkeen molemmille törmääville elementeille heitetään 2d6-vauriot, kunnes toinen tai molemmat tuhoutuvat. Koska murkuloita on neljää kokoluokkaa, isommat hajoavat n kappaleeksi pienempiä, jos sille päälle sattuvat.
Kyllästyin aika pian siihen, että alukseni hajosi aika ripeästi testailun tiimellyksessä, joten lisäsin mukaan automaattisen Megatron-huijauksen. Peli sanoo Afterdeath ja kaikki jatkuu pelaajan kannalta kuin mitään ei olisi tapahtunut.

Yhtenä aamuna juttelin tästä projektinkuvatuksesta yhden työkaverini kanssa (oli huomannut jotain mutinoitani g+:ssa). Muiden seassa esiin nousi kommentti antialiasoinnin puutteesta, olinko miettinyt käyttäväni sitä vai aioinko tehdä tarkoituksella sahalaitaista. Vastasin, että meinasin korjata tilanteen nätimmäksi kun saan oleellisemmat pulmat ratkottua. Siinä samalla katseltiin pikaisesti dokumentaatiota ja hops, jos vaihtaa drawpolygon-metodikutsun aalines-kutsuksi ja muistaa lisätä yhden True-parametrin, muuta ei tarvita. Kokeilin kurillani samana iltana ja näyttäähän se nätimmältä näin, vai mitä?
Antialiasoituna

Törmäyksen jälkeen

Koska olisi aika naurettavaa, että avaruuskivet poikkeuksetta jatkaisivat törmäämisensä jälkeen toistensa sisään syöksymistä, mietin, että seuraavaksi pitäisi toteuttaa deflect-metodi, joka laskisi jotenkin molemmille törmäyksen osapuolille uudet nopeusvektorit. Jos saisin aikaan jotain edes etäisesti biljardipöydän toimia jäljittelevän toteutuksen, olisin onnellinen. Kun tuon yhdistää kriittisiin osumiin (pieni ja nopea kivi voisi sopivasti osuessaan halkaista suunnattoman kiven kahtia), lopputulos voisi olla vänkä. Niin ja ne planeetat ja ties mitkä... ei tässä ole vielä mitään tehtynä!

"Sota. Sota ei koskaan muutu."

Kaikille tätä lässytystä jonkun aikaa seuranneelle lienee kai ihan päivänselvää, että kaiken muun omituisen lisäksi Star Wars ja Battletech ovat minulle isoja juttuja. Vallankin jälkimmäisestä olen miettinyt lähteväni rosmoamaan aseistukseen liittyvää kamaa. Pääideana on, että purkkiinsa saisi valikoida jonkun tai jokusen väkivallan välineen riippuen vähän aluksen sloteista. Ohjuksia/raketteja, kuolemansäteitä (pulssittaisina tai ei), automaattikanuunoita ja taivaansinisiä salamoita yskiviä partikkelikanuunoita. Muahaha! Ja jos kerran aseistusta voi muuttaa, miksei moottoriakin voisi vaihtaa?

Kunhan mietin, myöhemminhän se selviää, mitä hemmettiä oikein haluan.

25.12.2012

Oma koodailuprojekti, osa III

Minne nokka näyttää

Nyt kun olin vihdoin saanut sekä kuvioni kierron kuntoon ja sen suunnankin vihdoin selville, perustoimista jäljellä oli liikkuminen. Ensimmäinen yritelmäni oli vallankin jälkikäteen ajateltuna naurettava: jos kulma osoitti johonkin pääilmansuuntaan, kyseinen suunta sai täyden nopeusmuutoksen - jos taas sille välille niin jonkun puolikkaan muutoksen kahteen pääsuuntaan jaettuna. Testatessa se näytti ensin hienolta, mutta hetken päästä huomasin, että "Heeeeei... tämähän nykii kääntyessä ja kaasuttaessa ihan omituisesti". Pienikin poikkeama 3π/2:sta muutti nopeutta aina täysillä johonkin väli-ilmansuuntaan. Hupsis.

Realistisempi nopeusmuutos

Hyvin pienen ruuduntuijottelun jälkeen pääparassani syttyi lamppu: jos vaikka käyttäisin noita hiton trigonometrisia funktioita kertomaan juuri tuon: tunnettu kulma ja nopeus voidaan kääntää kertomaan aiemmin ihmettelemäni Δx ja Δy -arvot... Eli sama temppu, mutta päinvastaiseen suuntaan. Onneksi tuon äkkäämiseen ei mennyt muutamaa minuuttia enempää.

tempspeed = Vector(self.speed.x, self.speed.y)
dy = math.fabs((math.sin(self._angle))*self._acceleration)
dx = math.fabs((math.cos(self._angle))*self._acceleration)

# ...


Toki tuossa pitää vielä tarkastella polygonin suunnan perusteella, ovatko Δx ja Δy positiivisia vai negatiivisia kukin, jotta kiihdytyksen voi asettaa oikein. Pääasia, että se näyttää hyvältä ainakin tällä hetkellä.

Partikkeliefektejä!

Pelkän kuvion "lennättely" tyhjällä ruudulla käy äkkiä tylsäksi. Näpertelin siis Star Control (tai Auts tai  V-Wing tai Wings) -henkisen kaasutteluefektin. Sen tarkemmin moottoripaikkoja miettimättä asetin* ne polygonini alakulmiin. Aina, kun kaasua painetaan, senhetkisiin koordinaatteihin pudotetaan palikat, jotka kuolevat pois muutaman syklin päästä ja elellessään haalistuvat vähitellen. Tekaisin samalla vaivalla testimielessä warppinapin, jota painamalla palikka siirretään keskelle pelialuetta. Aiempaan paikkaan luodaan räjähdyksenomaiseti kahdeksan eri suuntiin lentävää partikkelia. Efekti on hauska, vaikka itse sanonkin. Räjähdyksiin minä tuota meinasin oikeasti käyttää.

*) Teinpä kaukoviisaana sentään sellaisen toteutuksen, että heti halutessani voin nakata ne mihin lystää, niissä lukumäärissä kuin haluan. Noin suunnilleen. Ehkä vältän tyhmyysrefaktorointia tällä tavoin.

Kavereita ruudulle

Mitäpä sitä suurinpiirtein kolmion muotoisella roikaleellaan tekisi 2d-avaruudessa ja varppailisi eestaas, jollei siellä ole seuraa? Tylsistyisi äkkiä, sanon minä. Mahdollisesti typerä ideanikin lienee jo tässä vaiheessa kaikille selvä kuin pläkki. Sekaan heitettäisiin tietenkin asteroideja!
Olin kovin riemastunut, kun sain kahdeksankulmaiset satunnaisepämuodot ruudulle neljässä eri kokoluokassa, pyörimään hiljakseen joko vasta- tai myötäpäivään ja parin iteraation jälkeen myös lentämään omaan suuntaansa. Se oli upeaa.
Pröp pröp pröp
Minä ainakin olin tuosta ylpeä.

18.12.2012

Oma koodailuprojekti, osa II

Taisin viimeksi sanoakin, etten ole koskaan koettanut tehdä mitään kovin graafista, jollei opiskeluaikojen nelikulmioita tai palloja ruudulle oksentelevaa TurboC++ -tekelettä lasketa mukaan (ei, ei sitä lasketa). Ykkösongelmani iski siis silmille jo tässä vaiheessa. Nelikärkisen polygonini piirtäminen keskelle piirtoaluetta oli simppeliä, mutta sen siirtely...

Mutisen tässä omista oivallusaskeleistani kutakuinkin niin kuin niitä muistan ja missä on olevinaan edes jonkunlaista tolkkua. Laatua en takaa, kuten en yleensäkään ;)

Sijainti, kierto, siirto, piirto

Ensimmäinen yritykseni oli siis kovakoodattuja koordinaattipisteitä käyttävä roipe. Kuvittelin, että siitä olisi hyvä lähteä mutta voi voi, miten väärässä olinkaan. Ehkä vika oli omissa ensimmäisissä kiertometodeissani ja toimivilla olisi toiminutkin, mutta ehkä ei. Alkutilanne piirtyi ruudulle kauniisti, mutta yksikin kiertoliike hajoitti koko muodon ihan miten sattuu.

Nollapisteen kautta

Keksin jostain (ja työkaverin kanssa puhuttuani oletukseni osoittautui oikeanlaiseksi), että jospa kaikkien piirrettävien kuvioiden kulmapisteet asetettaisiin aina (0,0):n suhteen. Tällöin polygonin kierto toimisi aina samalla tavalla, kun ei tarvitsisi arpoa sijainnin kanssa pätkääkään. Ensin siis napataan polygonille kulmat aina samaan paikkaan, sitten niiden arvot siirretään kohdalleen, tässä tapauksessa keskelle piirtoaluetta ja piirretään näkyviin. Yksinkertaista ja varmaan lapsellisen alkeellistakin, mutta kukas tuon olisi minulle käynyt kertomassa?

Kaksiulotteisen koordinaatiston kierto

Minun matemattiset opintoni ovat vuosien takana ja olin ehdottomasti niitä rasittavia kakaroita jo peruskoulussa, jotka julistivat, etteivät ikinä tarvitse matematiikkaa, saati sitten trigonometriaa koulun jälkeen. Näin se taas nähtiin, ettei se ihan noin mene :)
Muutaman omituisen ja hölmön "teen itse"-henkisen yrityksen jälkeen törmäsin affiiniin kuvaukseen ja sehän olikin näppärä ja toteutus kutakuinkin suoraan kirjoitettava. Sille nakataan kunkin piirrettävän polygonin jokaisen kulman koordinaatit vuorollaan ja haluttu kiertokulma (luonnollisesti se on kaikille sama), paluuarvona saadaan uudet koordinaatit.

def rotate(self, angle):
        rotated_points = []
        for point in self._points:
            new_point = self.affine_transform(Vector(point.x, point.y), angle)
            rotated_points.append(new_point)       
        return rotated_points


def affine_transform(self, point, angle):
        temp_x = ((point.x * math.cos(angle)) + (point.y * math.sin(angle)))
        temp_y = ((-point.x * math.sin(angle)) + (point.y * math.cos(angle)))
        return Vector(temp_x, temp_y )



Hah! Seuraavat kannot kaskessani olivatkin tuo kulma (kohelsin asteiden ja radiaanien kanssa, omaa pohjatonta tyhmyyttäni siis). Suurin ja melkoista päänvaivaa aiheuttanut ongelma oli siis polygonini liikuttelu piirtopinnalla. Kääntely toimi, mutta kun koetin saada sitä liikkumaan kolmion kärjen suuntaan, se lähti liitämään kiinteästi toiseen yläkulmaan ja sen ohi. Jos yritin kääntää liikkuvaa kolmiota, se liikkui edelleen oikeaa yläkulmaa kohti, mutta kuin syöksykierteessä... gnaah.

Miten lasken, mihin suuntaan polygonini katsoo?

Typeränä virheenä numero 74 olin unohtanut paikalleen kovakoodatut "piirrä tuo keskelle kuvaruutua"-arvot ja toisena jäätyneenä käpynä oli aina sama kulma. Olin jostain saanut aikaan kuvion kiertokulman (eli mihin sen "nokka" osoittaa) laskentaan toteutuksen, joka oli vähän väärä. Laskin nimittäin jotain eri kylkien pituuksien ja niiden välisten kulmien perusteella - muuten kai ihan hienoa toimintaa, muttei se tässä auttanut.

Pienen googlettelun ja kevyen pään pöytään hakkaamisen perusteella ratkaisu olikin helpompi kuin mitä sopisi olettaa. Tai ainakin näin tyhmälle. Kun tiedetään kärkipisteen koordinaatit ja keskipisteen koordinaatit, voidaan niiden x- ja y-suuntaisten välimatkojen (Δx, Δy) perusteella laskea arctanilla koko roskan kulma radiaaneina.

Kai se jotain selventää, vaikka vähän epäilenkin :p


def calculate_angle(self, center, nose):
        dx = center.x - nose.x
        dy = center.y - nose.y       
        radian_angle = math.atan2(dy, dx)
        return radian_angle


Nerokkaan yksinkertaista, sanon minä. Tähän väliin näyttää tosin siltä, että kukaan ei jaksa lukea tästä enää enempää yhdellä istumalla, joten jatkan taas seuraavalla rundilla.

11.12.2012

Koodailuprojektin taustaa

Taustaa

Kaipa "kaikki" missään määrin ohjelmointia edes kokeilleet ovat miettineet, että oman pelin tekeminen olisi hienoa. Joskus aikanaan räpelsin jotain sekavia tekstiviritelmiä senaikaisen 486:n mukana tulleella QuickBasicilla, muttei niistä syntynyt ikinä mitään sen mainittavampaa. Suurin kanto kaskessani on tuossa vaiheessa ollut se, etten vaan osannut mitään mutten myöskään keksinyt etsiä mitään Basic-ohjekirjaa hyödyllisempää lähdettä, josta opetella.
Jostain kummallisesta syystä, varmaankin laiskuudestani, johtuen en myöskään ruvennut kikkailemaan pelien tekemistä myöskään sen jälkeen, kun olin opiskellut ohjelmointia ja jopa oppinutkin jotain. Ajoittain mielessä kävi kyllä, että pitäisi tehdä jotain. Jos ei muuta niin ihan vaan huvin vuoksi.

Python - Pygame

Työkaveri vinkkasi joskus Ruby-pohjaisesta Shoooes-palikasta, jota meinasin kokeillakin, mutten taas vaihteeksi saanut mitään oleellista aikaan. Sitten sekin jäi monen muun "hei kokeillaas tätä"-tyyppisen testin kanssa nurkkaan pölyttymään. Törmäsin joskus vuosi, puolitoista sitten rss-feedeissäni Pygame-kirjastoon Pythonille. Perinteitä kunnioittaen testailin jotain pientä oman aikani kunnes sekin vain jäi hyvien (lue: toteuttamiskelpoisten) ideoiden puutteen takia.

for idea in ideas:

Kun tyystin oman idiksen toteuttaminen ei ole se helpoin, mitäs sitten? Jäljitellään muita eli kiivetään niiden jättiläisten hartioille huitomaan. Työkaverini oli ruvennut sörkkimään jotain Roguelikeä kasaan joten se siitä tähän väliin (vaikken ollutkaan miettinyt mitään perusfantasiateemaa). Lapsuudessani pelasin kovasti epätoivoisen vaikeaa Xenon II: Megablastia ja myöhemmin loistavaa Tyriania.
Xenon II: Megablast

Siinä mielessä klassishenkisen shoot'em upin pysty- tai sivuskrollaavana kiinnosti kovasti sekin. Noissa ensimmäinen esiinnoussut kysymysmerkki oli tasojen kanssa tuunaaminen, joten jätin idikset edelleen korvan taakse kaiken muun saastan sekaan.

Tyrian
Hiekkalaatikkoilu sekä tietyntyyppinen avoimuus, valinnanvapaus ja yleinen satunnaisuus (= kaikki ei aina tapahdu samalla tavalla ja samassa järjestyksessä) on aina kutkuttanut. Totaalinen vaihtoehdottomuus ja eritoten (tiukat) aikarajat kiehuttavat kerrasta toiseen. Ei sillä, että tuosta olisi helpointa lähteä liikkeelle, mutta jostain on aloitettava.

Kiepsis

Rupesinpa sitten lähestymään asiaa toisesta päästä eli aiemmasta top-downista bottom-upiin, vaikken ehkä ihan tietoisesti vaan ennemminkin puolivahingossa. Näppäilin siis ihan uteliaisuuttani ympäriinsä ja katselin, mitä kaikkea tuolla Pygamella voi tehdä ja miten se tehdään. Parilla hassulla koordinaattipisteellä ja kevyellä päänrapsuttelulla pygame.draw.Polygon(...) toi kiehtovia tuloksia piirtopinnalle. "Hei, tuotahan voisi vaikka liikutella noiden näppäineventtien perusteella! Mites sen tekiskään..."

Mitä juoninkaan? Siitä kerron teille ensi viikolla.
Olen ilkeä tiiseri, tiedän. Hähä.

4.12.2012

Henk. koht. vaurioita

Tyhmästä päästä kärsii koko ruumis.

Mitä niillä nivelillä...


Särjin siis lautasen käsiini ja päädyin tikattavaksi. Tietysti pahimmat vauriot otin oikeaan peukalooni, joten rakenteluprojekti on kuivatelakalla hetken tai toisenkin. Kas kun tikkien poiston jälkeen alkaa olemaan vuosiloma kiireineen kohdalla, joten rakenteluaika on muutenkin kortilla tuohon aikaan. Saapa nähdä, miten tässä käy.