Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: Hollywood Game Framework

jalski [14.10.2011 23:46:27]

#

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ä... ;-)

Hollywood Invaders

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".

jalski [17.10.2011 07:58:56]

#

Jos jotain kiinnostaa, niin tein pienen demopaketin lähdekoodeineen.

Hollywood demoja

vesikuusi [18.10.2011 13:17:43]

#

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

jalski [29.12.2011 22:09:05]

#

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()

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta