Maastogeneraattori
Author: Sly_Jack0
Added: 9. huhtikuuta 2011 kello 23.04
Edited: 15. huhtikuuta 2011 kello 22.19
Category: Algoritmi
Description
Funktio sivultapäin kuvatun vuoriston generoimiseen. Sopii hyvin esimerkiksi tykkipeleihin. Mukana pieni esimerkki.
generateContour() generoi kartan korkeudet contour-taulukkoon. createForeground() tekee kuvan kartasta, jonka voi sitten piirtää.
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | SCREEN 1024,768
'Taulukko, joka sisältää maaston korkeuden ruudun alalaidasta kohdassa x
Dim contour(ScreenWidth())
'Kuva johon maasto piirretään
Global gMap
generateContour() 'Luodaan maaston muodot
createForeground() 'Piirretään maasto kuvaan
//PÄÄSILMUKKA...
Repeat
DrawImage gMap,0,0
DrawScreen
Forever
//...
//////////////////
//** FUNKTIOT **//
//////////////////
//Luo maaston muodon ja tallentaa sen countour-taulukkoon
Function generateContour()
Dim rand1 As Float, rand2 As Float, rand3 As Float, rand4 As Float
Dim offset As Float, peakheight As Float, flatness As Float, height As Float
rand1 = Rnd(1) + 1
rand2 = Rnd(1) + 2
rand3 = Rnd(1) + 3
offset = ScreenHeight() / 2
peakheight = ScreenHeight() / 4
flatness = ScreenWidth() / 8
For x = 0 To ScreenWidth()
height = peakheight / rand1 * Sin((Float(x) / flatness * rand1 + rand1) * (180 / PI))
height = height + peakheight / rand2 * Sin((Float(x) / flatness * rand2 + rand2) * (180 / PI))
height = height + peakheight / rand3 * Sin((Float(x) / flatness * rand3 + rand3) * (180 / PI))
height = height + offset
contour(x) = Int(height)
Next x
EndFunction
//Piirtää maaston muodot maastokuvaan
Function createForeground()
gMap = MakeImage(ScreenWidth(),ScreenHeight())
DrawToImage gMap
For x = 0 To ScreenWidth()
Line x,contour(x),x,ScreenHeight()
Next x
DrawToScreen
EndFunction
|
Comments
Leave a comment
You must be logged in to comment.
#23 Sent by: skorpioni_cb, 4. tammikuuta 2012 kello 11.04
Hyi, tässä käytetään globaalia muuttujaa,olisit saanut sen gMap muuttujan toisella tavalla, palauttamalla sen return-komennolla ja saamalla sen parametrina,
muuten hieno :D