Tervehdys,
Oli hiukan tylsää sunnuntaina ja mietin osaisinkohan kirjoitella "Tetriksen". Eipähän tuo nyt niin vaikeaa sitten ollutkaan ja parissa tunnissa syntyi ensimmäinen testiversio.
ladattavissa täältä
Tuohon pitäisi vielä lisätä äänet ja parantaa ulkonäköä. Pelattavuutta ja vaikeusasteen kehittymisen tasapainoa pitäisi myös hiukan hakea kohdalleen.
Parannusehdotuksia otetaan vastaan...
Hyvää: Peruslogiikka tuntuu toimivan. Peli toimii myös Linuxissa Winellä ajettuna.
Huonoa: Ei tunnista häviötä. Käyttää aika paljon prosessoriaikaa siihen nähden, että suurin osa ajasta pitäisi mennä nukkuessa.
Muuta: Aika nopea ja leveä.
jalski kirjoitti:
Mietin osaisinkohan kirjoitella "Tetriksen".
Olisin aika huolestunut, jos et osaisi, kun itse sentään tein sellaisen ensimmäisenä C++-pelinäni. :) Tosin ei se tuon viimeistellympi ollut.
Metabolix kirjoitti:
Huonoa: Ei tunnista häviötä. Käyttää aika paljon prosessoriaikaa siihen nähden, että suurin osa ajasta pitäisi mennä nukkuessa.
Muuta: Aika nopea ja leveä.
Ei tunnista häviötä? Pitäisi kyllä tunnistaa, itselläni toimii ainakin Windowsilla ok.
Peli arpoo aina seuraavan palikan lähtö x-koordinaatin ja rotaation. Palikka lähtee miinuspuolen y-koordinaatilta liikkeelle. Häviö tapahtuu omassa versiossani, jos uusi palikka lähtiessään ei pysty putoamaan yhtään ruutua. Ei siis riitä, että pino on noussut jossain kohtaa ylös asti, jos uudella palikalla on kuitenkin vielä reitti alaspäin auki.
Eikös tuo toiminut noin, kun kokeilit?
Prosessoriaikaa käyttää varmaan sen takia, kun peli ei oikeastaan hirveämmin nuku. Oma tilapohjainen Hollywood pelipohjani ajaa pelilooppia (piirto ja päivitys) 60 kertaa sekunnissa kokoajan, toki vähempikin riittäisi. En vain nähnyt tarpeelliseksi pudottaa päivitysnopeutta.
Hollywood tukee muuten nykyään myös Linuxia, joten sille saa haluttaessa suoraan tehtyä toimivan binäärin.
Olen muuten itsekin sitä mieltä, että pelialue on vielä liian leveä ja pelinopeuden sekä asteittaisen vaikeutumisen balanssi kaipaa hiukan virittämistä,
jalski kirjoitti:
Häviö tapahtuu omassa versiossani, jos uusi palikka lähtiessään ei pysty putoamaan yhtään ruutua. Ei siis riitä, että pino on noussut jossain kohtaa ylös asti, jos uudella palikalla on kuitenkin vielä reitti alaspäin auki.
Ok, en sitten huomannut tällaista poikkeavaa toimintatapaa. Nyt kun testasin, näytti, että ruudun ulkopuolelle jäi kuitenkin kaksi palikkaa, tai ehkä sivupalkkiin vain ilmestyi uusi vielä häviön jälkeenkin.
jalski kirjoitti:
Oma tilapohjainen Hollywood pelipohjani ajaa pelilooppia (piirto ja päivitys) 60 kertaa sekunnissa kokoajan, toki vähempikin riittäisi.
Paras optimointi olisi jättää piirto tekemättä, jos tila ei ole muuttunut.
jalski kirjoitti:
Hollywood tukee muuten nykyään myös Linuxia, joten sille saa haluttaessa suoraan tehtyä toimivan binäärin.
Hollywood näyttäisi kuitenkin olevan maksullinen, ja itse ohjelmaa ei ole saatavilla Linuxille, eli käännös täytyy kuitenkin tehdä Windows- tai AmigaOS-versiolla. Muutenkin kaikissa Linuxeissa toimivan ohjelman tuottaminen tuntuu olevan monelle ylivoimainen tehtävä, joten en löisi vetoa Hollywoodinkaan puolesta.
Metabolix kirjoitti:
Ok, en sitten huomannut tällaista poikkeavaa toimintatapaa. Nyt kun testasin, näytti, että ruudun ulkopuolelle jäi kuitenkin kaksi palikkaa, tai ehkä sivupalkkiin vain ilmestyi uusi vielä häviön jälkeenkin.
jalski kirjoitti:
Hollywood tukee muuten nykyään myös Linuxia, joten sille saa haluttaessa suoraan tehtyä toimivan binäärin.
Hollywood näyttäisi kuitenkin olevan maksullinen, ja itse ohjelmaa ei ole saatavilla Linuxille, eli käännös täytyy kuitenkin tehdä Windows- tai AmigaOS-versiolla. Muutenkin kaikissa Linuxeissa toimivan ohjelman tuottaminen tuntuu olevan monelle ylivoimainen tehtävä, joten en löisi vetoa Hollywoodinkaan puolesta.
Tuossa voi käydä niin, että joku palikka voi jossain rotaatiossa liikkua ruudun tai pari, ennen sen tuloa pelialueelle. Valitsin tuon miinusmerkkisen y-koordinaatin nopeasti laiskuuttani siten, että kaikki palikat eri rotaatioissaan jäävät varmasti aina lähtötilanteessa näkymän ulkopuolelle. Korjaan tuon ja laitan palikoille ja niiden eri rotaatioille omat aloitus y-koordinaatit taulukkoon siten, että ovat varmasti aina yhden ruudun päässä pelialueen näkyvästä osasta.
Kokeilepas piruuttasi tuota Hollywoodin tekemää Linux binääriä: Hollywood Blocks for Linux x86 ja kerro miten kävi. Itselläni ei toimivaa Linux asennusta tällä hetkellä ole. OS/2 ja AmigaOS 4.1 täyttävät aika hyvin omat tarpeet.
jalski kirjoitti:
Kokeilepas piruuttasi tuota Hollywoodin tekemää Linux binääriä
No näyttäähän se toimivan. Alla riippuvuudet:
$ ldd blocks linux-gate.so.1 => (0xf7737000) libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf76f8000) libX11.so.6 => /usr/lib32/libX11.so.6 (0xf75dc000) librt.so.1 => /usr/lib32/librt.so.1 (0xf75d3000) libm.so.6 => /usr/lib32/libm.so.6 (0xf75a9000) libc.so.6 => /usr/lib32/libc.so.6 (0xf7440000) libdl.so.2 => /usr/lib32/libdl.so.2 (0xf743b000) /lib/ld-linux.so.2 (0xf7738000) libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf7423000) libXau.so.6 => /usr/lib32/libXau.so.6 (0xf7420000) libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 (0xf741b000)
Ei siis paljon vaadi, mutta kai silti on mahdollista, että parin vuoden päästä jokin noista versionumeroista kasvaa yhdellä ja alkaa tulla valitusta puuttuvasta kirjastosta.
Voisi olla varmaan ihan hyvä, mutta ohjelma ei mahdu 10" ruudulleni.
Ubuntulla tuo lähti heti käyntiin, nähtävästi kaikki Metabolixin listaamat vaatimukset löytyivät.
Ärsyttäviä ne taustan väriset palikat...
Päivitin omia apukirjastojani ja samalla peliä...
Hollywood Blocks v. 0.2 for Windows
Lähdekoodi, omat kirjastoni ja keskeneräinen dokumentointi löytyypi täältä
Kirjaston primitiivi-moduuli on mallinnettu Infernon Draw-moduulin mukaan ja alla lähes suoraan testinä Infernolta portattu scrolleri demo esimerkiksi:
@DISPLAY {Title = "Hollywood Scroller", Width = 800, Height = 50} @INCLUDE "hgf/game.hws" Const #DOTW = 3 Const #DOTH = 3 Const #XGAP = 2 Const #YGAP = 2 game:init() CreateBrush(1, 800, 50) img = image:new(1) fg = #WHITE bg = #GREEN message$ = "*** Hollywood 4.8 ***" textw = TextWidth(message$) texth = TextHeight(message$) textr = rect:new( { Min = { x = 0, y = 0 }, Max = { x = textw, y = texth } } ) CreateBrush(2, textr:dx(), textr:dy() ) textimg = image:new(2) textimg:drawText(point:new(), message$) textbytes = textimg:readpixels(textimg.r) textimg = Nil tickerheight = Int((texth * #DOTH) + ((texth - 1) * #YGAP)) tickery = Int(img.r.min.y + (img.r:dy() - tickerheight) / 2) nscrdots = Int((img.r:dx() - #DOTW) / (#DOTW + #XGAP)) tickerw = nscrdots + textw scrollr = rect:new( { Min = { x = img.r.min.x, y = tickery }, Max = { x = img.r.max.x - (#DOTW + #XGAP), y = tickery + texth * (#DOTH + #YGAP) } } ) dotx = Int(nscrdots * (#DOTW + #XGAP)) SetFillStyle(#FILLCOLOR) For Local textx = 0 To tickerw - 1 Step 1 img:drawImg(scrollr, img, { x = #DOTW + #XGAP, y = tickery } ) For Local y = 0 To texth - 1 Step 1 doty = Int(tickery + y * (#DOTH + #YGAP)) drawr = rect:new( { Min = { x = dotx, y = doty }, Max = { x = dotx + #DOTW, y = doty + #DOTH } } ) img:drawRect(drawr, bg) Next Next game.buffer:drawImg(img.r, img, point:new() ) VWait() Flip() Repeat For Local textx = 0 To tickerw - 1 Step 1 img:drawImg(scrollr, img, { x = #DOTW + #XGAP, y = tickery } ) For Local y = 0 To texth - 1 Step 1 fill = bg If textx < textw If textbytes[Int(textx + (y * textw))] <> #BLACK Then fill = fg EndIf doty = Int(tickery + y * (#DOTH + #YGAP)) drawr = rect:new( { Min = { x = dotx, y = doty }, Max = { x = dotx + #DOTW, y = doty + #DOTH } } ) img:drawRect(drawr, fill) Next game.buffer:drawImg(img.r, img, point:new() ) VWait() Flip() Next Forever
Aihe on jo aika vanha, joten et voi enää vastata siihen.