Tervehdys,
Olen välillä iltojeni iloksi kirjoitellut Hollywoodille kirjastoa, jonka avulla täysin aloittelevakin ohjelmoija pystyy kirjoittelemaan pelin parissa tunnissa.
Kirjasto koostuu:
- game moduuli: hoitaa pakollisen kuran, kuten tehtävien ajoituksen sekä pelitilojen ja tapahtumien hallinnan.
- primitives moduuli: "apurakennuspalikoita" sisältävä kirjasto, Infernolta mallinnettu.
- debug moduuli: sisältää testausta helpottavia työkaluja.
- color moduuli: sisältää tällä hetkellä pelkästään HSB-värimallin tuen helpottamaan oldskool tyylisten demojen kirjoittelua.
Tein kokeeksi yksinkertaisen pelin ja olisi kiva tietää, miten tuo toimii muiden koneella. Peli on ruma kuin mikä, mutta ainakin siinä saa ampua alienejä... ;-)
Paketissa on mukana Windows ja Linux binäärit.
m -tai M-kirjainta painamalla saa pelin "main" tilan "update" tapahtumassa aktivoitua tai disabloitua pelikirjaston "pelitila monitorin".
Jos jotain kiinnostaa, niin tein pienen demopaketin lähdekoodeineen.
Toimii oikein mainiosti ja nopeasti :) Ubuntu 10.04 käytössä siis. En keksi huonoa palautetta. Mutta eihän mulla kokemusta graafisesta peliohjelmoinnista olekaan :D
Olen PL/I:in ja Component Pascalin kanssa touhuamisen lisäksi pikkuhiljaa jatkanut tätäkin pikku projektia... Saan kirjaston avulla jo kohtuullisen nopeasti aikaiseksi toimivia pikkujuttuja.
Esimerkiksi tälläinen simppeli analoginen kello luonnistuu näin näppärästi:
; ; Simple Analog Clock in Hollywood ; @APPICON { Ic16x16 = "icons/my16x16icon.png", Ic24x24 = "icons/my24x24icon.png", Ic32x32 = "icons/my32x32icon.png", Ic48x48 = "icons/my48x48icon.png", Ic128x128 = "icons/my128x128icon.png", Ic256x256 = "icons/my256x256icon.png", Ic512x512 = "icons/my512x512icon.png"} @DISPLAY {Width = 200, Height = 200, Borderless = True, Title = "Hollywood Clock"} ; Include game framework @INCLUDE "hgf/game.hws" Const #SMALL_DOT_SIZE = 1 Const #LARGE_DOT_SIZE = 4 ; Game setup Function game.load() EscapeQuit(True) game:setUpdateRate(1) time = GetTime(True) EndFunction ; Game state "main" draw function Function game.draw() Cls(#WHITE) drawClock() EndFunction ; game state "main" update function Function game.update(dt) time = GetTime(True) EndFunction ; Draw the analog clock Function drawClock() ; Get seconds, minutes and hours. Local hours = MidStr(time, 0, 2) Local minutes = MidStr(time, 3, 2) Local seconds = MidStr(time, 6, 2) ; Get the angles of the clock hands. Local angsec = 90 - seconds * 6 Local angmin = 90 - minutes * 6 Local anghour = 90 - (hours * 5 + minutes / 10) * 6 Local cp = point:new( { x = game.buffer.r:dx()/2, y = game.buffer.r:dy()/2 } ) ; Center point Local cr = cp.x - 8 ; Clock radius Local shr = cp.x - 16 ; Clock's second hand radius Local mhr = cp.x - 20 ; Clock's minute hand radius Local hhr = cp.x - 32 ; Clock's hour hand radius SetFillStyle(#FILLNONE) game.buffer:drawRect(game.buffer.r, #BLACK) ; Draw outline of the window rectangle SetFillStyle(#FILLCOLOR) ; Draw minute and second dots. For Local i = 0 To 59 game.buffer:drawCircle(cp:subxy(#SMALL_DOT_SIZE):circlept(cr, i * (360 / 60) ), #SMALL_DOT_SIZE, #BLACK) Next ; Draw hour dots. For Local i = 0 To 11 game.buffer:drawCircle(cp:subxy(#LARGE_DOT_SIZE):circlept(cr, i * (360 / 12) ), #LARGE_DOT_SIZE, #BLACK) Next ; Draw clock's second, minute and hour hands. game.buffer:drawLine(cp, cp:circlept(shr, angsec), #BLACK, { Thickness = 2 } ) game.buffer:drawLine(cp, cp:circlept(mhr, angmin), #BLACK, { Thickness = 6 } ) game.buffer:drawLine(cp, cp:circlept(hhr, anghour), #BLACK, { Thickness = 8 } ) EndFunction ; Here we go! game:go()
Aihe on jo aika vanha, joten et voi enää vastata siihen.