Code: Select all
harjoitus:
ClearObjects
ClearText
ClearKeys
While luku<100
AddText "Ladattu... "+luku+"%"
luku = Min( luku+Rand(1,30), 100) // lisätään lukuun randomisti ja rajoitetaan se 100:aan
DrawScreen
Wait Rand(500,1500)
Wend
// näytetään vielä lopuksi 100%
AddText "Ladattu... "+luku+"%"
DrawScreen
Wait 500
SCREEN 800,600
SetWindow "Earth at danger1 harjoitus",0,"Oletko aivan varma?"
FrameLimit 40
//tehdään tyypit
Type BULLETS
Field obj
Field dmg
Field speed
Field hp
End Type
Type vihut
Field obj
Field id
Field hp
Field dmg
Field score
EndType
Type animaatio
Field obj
Field lifetime
EndType
//pelin maasto
grass=MakeObjectFloor()
lawn=LoadImage("metsä.png")
PaintObject grass,lawn
PositionObject grass,0,0, -2
//ladataan kaikki pelin objectit
pati = LoadObject("luoti.png")
hiiri = LoadObject ("tähtäin.png")
pelaaja = LoadObject ("pistooli.bmp",72)
miekkaase = LoadObject ("miekka.png",72)
miekkaukko = LoadObject ("miekkamies.bmp",72)
pistooliukko = LoadObject ("pistooli.bmp",72)
konepistooliukko = LoadObject ("rynnakkokivaari.bmp",72)
osuma = LoadAnimObject("osuma.png",40,40,0,4)
ShowObject osuma,OFF
ShowObject miekkaase,OFF
ShowObject pati,OFF
ShowObject miekkaukko,OFF
ShowObject pistooliukko,OFF
ShowObject konepistooliukko,OFF
////vihollisen jutut////
vihollinen1 = LoadObject ("monsteri1.png",72)
vihollinen2 = LoadObject ("monsteri2.png",72)
vihollinen3 = LoadObject ("orkki.bmp",72)
ShowObject vihollinen1,OFF
ShowObject vihollinen2,OFF
ShowObject vihollinen3,OFF
bossi1 = LoadObject ("boss1.png",72)
SetupCollision bossi1,pelaaja,2,2,2
bossi2 = LoadObject ("boss2.png",72)
SetupCollision bossi2,pelaaja,2,2,2
//ladataan musiikit ja äänet
pistooli = LoadSound ("colt45.ogg")
konepistooli = LoadSound ("machinegun.ogg")
miekka = LoadSound ("sword.ogg")
lyöminen = LoadSound ("bulletbody.ogg")
osui = LoadSound ("bulletbody.ogg")
vihollinen = LoadSound ("snorker 1.ogg")
musiikki1 = PlaySound ("taustamusiikki1.ogg")
yläpalkki = LoadImage ("ylapalkki2.png")
sumu = LoadImage ("sumu.png")
ruumis = LoadObject ("ruumis1.png")
ruumisbossi1 = CloneObject (ruumis) : ShowObject ruumisbossi1,OFF
ruumisbossi2 = CloneObject (ruumis) : ShowObject ruumisbossi2,OFF
ruumisbossi3 = CloneObject (ruumis) : ShowObject ruumisbossi3,OFF
kuolit = LoadObject ("ruumis.png")
ShowObject kuolit,OFF
ShowObject ruumis, OFF
//laitetaan pelaajan hp , voima , kaikkea..
hp = 1000
voima = 5
ammukset = 35
tapot = 0
tapotpisteet = 50
//ASEET
ase = 1
ShowMouse OFF
ObjectOrder pelaaja,1
ObjectOrder osuma,1
Repeat
If SoundPlaying(musiikki1)=0 Then
musiikki1 = PlaySound ("taustamusiikki1.ogg")
If Rand(1,2)=1 Then
SetSound musiikki1,0,100,-100
Else
SetSound musiikki1,0,100,100
EndIf
EndIf
//pelaajan ohjaus
PositionObject hiiri,MouseWX(),MouseWY()
PointObject pelaaja, hiiri
MoveObject pelaaja, (UpKey()+KeyDown(cbkeyW)-KeyDown(cbkeyS)-DownKey() ) * 2
///////////////////////
////// AMPUMINEN //////
///////////////////////
If reload = 0 And ammukset>0 And ase<>0 Then
If ammuttu = 1 And ase = 1 Then esto=ON
If MouseDown(1) And esto=OFF Then
newBullet.BULLETS= New(BULLETS)
newBullet\obj = CloneObject(pati)
newbullet\dmg = voima
newbullet\speed = speedupg
CloneObjectPosition newBullet\obj,pelaaja
CloneObjectOrientation newbullet\obj,pelaaja
MoveObject newBullet\obj,24
ammukset - 1
Select ase
Case 1 ' Pistooli
PlaySound pistooli, 50
reload = 4
Case 2 ' Konekiväri
PlaySound konepistooli,50
reload = 8
EndSelect
ammuttu = 1
EndIf
EndIf
If MouseUp(1) Then esto=OFF : ammuttu = 0
If reload>0 Then reload-1 // vähennetään vain kun on realoadia...
////aseen vaihto
//käytä elselauseita kun mahdollista
If KeyHit (cbkey1)
PaintObject pelaaja,pistooliukko
ShowObject miekkaase,OFF
ase = 1
ElseIf KeyHit (cbkey2)
PaintObject pelaaja,konepistooliukko
ShowObject miekkaase,OFF
ase = 2
ElseIf KeyHit (cbkey3)
PaintObject pelaaja,miekkaukko
ShowObject miekkaase,ON // Showobject komennon määrittämistä ei tarvitse tehdä joka kierros..
ase = 0
EndIf
If ase=0 Then
PositionObject miekkaase, ObjectX(pelaaja)+lisäysX_suunnassa, ObjectY(pelaaja)+lisäys_Y_suunnassa
miekkaangle = WrapAngle(miekkaangle + (KeyDown(cbkeyA)-KeyDown(cbkeyD)) * 10 )
RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
// ensin ylempi rivi, koska alempirivi tarvitsee sitä, että tarkistus ei mene kierrosta jäljessä.
EndIf
//ALIENIT
If luo>80
newAlien.vihut= New(vihut)
newAlien\obj=CloneObject(vihollinen1)
ScreenPositionObject newAlien\obj,Rand(0,ScreenWidth()),Rand(0,screenheight())
ObjectOrder newalien\obj,1
newAlien\id=Rand(1,3)
Select newAlien\id 'käytä mielummin selectiä on selvempi
Case 1
newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
Case 2
PaintObject newAlien\obj,vihollinen2
newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
Case 3
PaintObject newAlien\obj,vihollinen3
newAlien\hp=Rand(280,340):newAlien\dmg=Rand(7,9):newAlien\score=Rand(35,50)
Default
MakeError "Annetulle IDlle ei ole asetettu toimintoa"
EndSelect
luo=0
EndIf
luo+1
For iAlien.vihut= Each vihut
If iAlien\ID>0 Then ' jos on elossa
sidle=Rand(-20,20)
If CountCollisions(iAlien\obj) Then MoveObject iAlien\obj,0,sidle
If ObjectSight (iAlien\obj,pelaaja) Then MoveObject iAlien\obj,1 Else MoveObject iAlien\obj,0
PointObject iAlien\obj,pelaaja
If ObjectsOverlap(iAlien\obj,pelaaja) Then hp-iAlien\dmg
For ibullet.bullets=Each bullets
If ObjectsOverlap(ibullet\obj,iAlien\obj) Then
PlaySound osui,50
iAlien\hp-ibullet\dmg
EndIf
Next ibullet
If ObjectsOverlap (pelaaja,iAlien\obj) Then
iAlien\hp-4
newanim.animaatio= New(animaatio)
newanim\obj=CloneObject(osuma)
ObjectOrder newanim\obj,-1
PlayObject newanim\obj,0,4,0.1
If Timer()>aikaruumis+15 Then CloneObjectPosition newanim\obj,pelaaja
aikaruumis=TIMER()
ObjectLife newanim\obj , 1000
EndIf
If ObjectsOverlap (miekkaase,ialien\obj) Then iAlien\hp-9
If iAlien\hp<0 Then
tapotpisteet+1
tapot+1
If Timer()>record+100 Then
blink=Not blink
record=Timer()
EndIf
/////////////////////////////////
////////// RUUMIIN TEKO /////////
/////////////////////////////////
xx=ObjectX(iAlien\obj)
yy=ObjectY(iAlien\obj)
ShowObject iAlien\obj, OFF
iAlien\obj = CloneObject(ruumis)
PositionObject iAlien\obj,xx,yy
ShowObject iAlien\obj, ON
ObjectOrder iAlien\obj,-1
iAlien\ID=-1 ' estetään toiminnot
ObjectLife iAlien\obj,300 'poistetaan tietyn ajan kuluttua
ObjectOrder ruumis,-1
EndIf
EndIf
Next iAlien
For iBullet.BULLETS= Each BULLETS
If CountCollisions(ibullet\obj) Then ibullet\hp-32
MoveObject iBullet\obj,6'llikutetaan luotia
If Distance2(iBullet\obj,pelaaja)>200 Or ibullet\hp<0 Then 'jos...niin tuhotaan ammus
DeleteObject iBullet\obj
Delete iBullet
EndIf
Next iBullet
////Bossien ammpuminen
For ibullet.bullets=Each bullets
If ObjectsOverlap (bossi1,ibullet\obj) Then
bossi1hp-ibullet\dmg
EndIf
Next ibullet
For ibullet.bullets=Each bullets
If ObjectsOverlap (bossi2,ibullet\obj) Then
bossi2hp-ibullet\dmg
EndIf
Next ibullet
////
PointObject bossi1,pelaaja
If ObjectSight (bossi1,pelaaja) Then MoveObject bossi1, 1 Else MoveObject bossi1,0
If ObjectsOverlap (bossi1,pelaaja) Then hp-3
If bossi1hp<0 Then
If pisteetlisätty1=0 Then
tapot+1
score+2000
bossit+1
// CloneObjectPosition die1,bossi1
// ShowObject die1,ON
ShowObject bossi1,OFF
PositionObject bossi1,90000000,900000000
MoveObject bossi1,-1
pisteetlisätty1=1
EndIf
EndIf
If tapot=30 Then
wait 5000
Goto onnistuit1
EndIf
DrawGame
// Valikko
DrawImage sumu,0,0
DrawImage yläpalkki ,0,0
Text 10,10,"PISTEITÄ :"+tapotpisteet
Text 200,10,"TAPOT :"+tapot
text 100,100,"FPS: "+fps()
Text 20,30, "LISÄÄ HP(4) + 50hp - 30p"
Text 20,45, "HP nyt = "+hp
Text 250,30,"LISÄÄ VOIMAA(5) + 5 voima - 20p"
Text 250,45,"VOIMA nyt = "+voima
Text 500,30,"LISÄÄ AMMUKSIA(6) + 25 ammusta - 10p"
Text 500,45,"AMMUKSIA nyt = "+ammukset
' tapotpisteet <> 30 tarkoittaa samaa kuin Not tapotpisteet=30
// voit muuttaa nämä normaaleiksi if-lauseiksi jos haluat painaa napeja yhtäaikaa
If KeyHit(cbkey4) And tapotpisteet>30
hp+50
tapotpisteet-30
ElseIf KeyHit(cbkey5) And tapotpisteet>20
voima+5
tapotpisteet-20
ElseIf KeyHit(cbkey6) And tapotpisteet>10
ammukset+25
tapotpisteet-10
EndIf
UpdateGame
CloneCameraPosition pelaaja
DrawScreen
If KeyHit(cbkeyf12) Then ScreenShot "C:\capture.bmp"
Forever
/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
onnistuit1:
ClearObjects
ClearText
ClearKeys
SCREEN 400,400
Text 150,150,"Hyvä! . pääsit tehtävän Läpi!"
Repeat
Wait 5000
Goto tehtävä1video
DrawScreen
Forever
///////////////////////////////////////////////////
tehtävä1video:
ClearObjects
ClearText
ClearKeys
video = PlayAnimation ("tehtävä1.wmv")
w= AnimationWidth(video)
h= AnimationHeight(video)
StopAnimation video
SCREEN w,h
video= PlayAnimation("tehtävä1.wmv")
Repeat
DrawAnimation video
If AnimationPlaying(video) = 0 Then Goto tehtävä1
DrawScreen
Forever
tehtävä1:
ClearObjects
ClearText
ClearKeys
Color cbred
While luku<100
AddText "Ladattu... "+luku+"%"
luku = Min( luku+Rand(1,30), 100) // lisätään lukuun randomisti ja rajoitetaan se 100:aan
DrawScreen
Wait Rand(500,1500)
Wend
// näytetään vielä lopuksi 100%
AddText "Ladattu... "+luku+"%"
DrawScreen
Wait 500
SCREEN 800,600
SetWindow "Earth at danger1 tehtävä1",0,"Oletko aivan varma?"
FrameLimit 40
//pelin maasto
kartta = LoadMap("tavallinenmap1.til","TILESET.png")
//ladataan kaikki pelin objectit
pati = LoadObject("luoti.png")
hiiri = LoadObject ("tähtäin.png")
pelaaja = LoadObject ("pistooli.bmp",72)
SetupCollision pelaaja, kartta, 1, 4, 2
miekkaase = LoadObject ("miekka.png",72)
miekkaukko = LoadObject ("miekkamies.bmp",72)
pistooliukko = LoadObject ("pistooli.bmp",72)
konepistooliukko = LoadObject ("rynnakkokivaari.bmp",72)
osuma = LoadAnimObject("osuma.png",40,40,0,4)
ShowObject osuma,OFF
ShowObject miekkaase,OFF
ShowObject pati,OFF
ShowObject miekkaukko,OFF
ShowObject pistooliukko,OFF
ShowObject konepistooliukko,OFF
////vihollisen jutut////
vihollinen1 = LoadObject ("monsteri1.png",72)
vihollinen2 = LoadObject ("monsteri2.png",72)
vihollinen3 = LoadObject ("orkki.bmp",72)
ShowObject vihollinen1,OFF
ShowObject vihollinen2,OFF
ShowObject vihollinen3,OFF
bossi1 = LoadObject ("boss1.png",72)
SetupCollision bossi1,pelaaja,2,2,2
SetupCollision bossi1, kartta, 1, 4, 2
bossi2 = LoadObject ("boss2.png",72)
SetupCollision bossi2,pelaaja,2,2,2
SetupCollision bossi2, kartta, 1, 4, 2
//ladataan musiikit ja äänet
pistooli = LoadSound ("colt45.ogg")
konepistooli = LoadSound ("machinegun.ogg")
miekka = LoadSound ("sword.ogg")
lyöminen = LoadSound ("bulletbody.ogg")
osui = LoadSound ("bulletbody.ogg")
vihollinen = LoadSound ("snorker 1.ogg")
musiikki1 = PlaySound ("taustamusiikki1.ogg")
yläpalkki = LoadImage ("ylapalkki2.png")
sumu = LoadImage ("sumu.png")
ruumis = LoadObject ("ruumis1.png")
ruumisbossi1 = CloneObject (ruumis) : ShowObject ruumisbossi1,OFF
ruumisbossi2 = CloneObject (ruumis) : ShowObject ruumisbossi2,OFF
ruumisbossi3 = CloneObject (ruumis) : ShowObject ruumisbossi3,OFF
kuolit = LoadObject ("ruumis.png")
ShowObject kuolit,OFF
ShowObject ruumis, OFF
//laitetaan pelaajan hp , voima , kaikkea..
hp = 1000
voima = 5
ammukset = 100
tapot = 0
tapotpisteet = 50
//ASEET
ase = 1
ShowMouse OFF
ObjectOrder pelaaja,1
ObjectOrder osuma,1
For x=1 To MapWidth()
For y=1 To MapWidth()
If GetMap2(3,x,y)=1 Then PositionObject pelaaja,x*32-(ObjectSizeX(kartta)/2),-y*32+(ObjectSizeY(kartta)/2)
Next y
Next x
Repeat
If SoundPlaying(musiikki1)=0 Then
musiikki1 = PlaySound ("taustamusiikki1.ogg")
If Rand(1,2)=1 Then
SetSound musiikki1,0,100,-100
Else
SetSound musiikki1,0,100,100
EndIf
EndIf
//pelaajan ohjaus
PositionObject hiiri,MouseWX(),MouseWY()
PointObject pelaaja, hiiri
MoveObject pelaaja, (UpKey()+KeyDown(cbkeyW)-KeyDown(cbkeyS)-DownKey() ) * 2
///////////////////////
////// AMPUMINEN //////
///////////////////////
If reload = 0 And ammukset>0 And ase<>0 Then
If ammuttu = 1 And ase = 1 Then esto=ON
If MouseDown(1) And esto=OFF Then
newBullet.BULLETS= New(BULLETS)
newBullet\obj = CloneObject(pati)
newbullet\dmg = voima
newbullet\speed = speedupg
CloneObjectPosition newBullet\obj,pelaaja
CloneObjectOrientation newbullet\obj,pelaaja
MoveObject newBullet\obj,24
ammukset - 1
Select ase
Case 1 ' Pistooli
PlaySound pistooli, 50
reload = 4
Case 2 ' Konekiväri
PlaySound konepistooli,50
reload = 8
EndSelect
ammuttu = 1
EndIf
EndIf
If MouseUp(1) Then esto=OFF : ammuttu = 0
If reload>0 Then reload-1
////aseen vaihto
//käytä elselauseita kun mahdollista
If KeyHit (cbkey1)
PaintObject pelaaja,pistooliukko
ShowObject miekkaase,OFF
ase = 1
ElseIf KeyHit (cbkey2)
PaintObject pelaaja,konepistooliukko
ShowObject miekkaase,OFF
ase = 2
ElseIf KeyHit (cbkey3)
PaintObject pelaaja,miekkaukko
ShowObject miekkaase,ON // Showobject komennon määrittämistä ei tarvitse tehdä joka kierros..
ase = 0
EndIf
If ase=0 Then
PositionObject miekkaase, ObjectX(pelaaja)+lisäysX_suunnassa, ObjectY(pelaaja)+lisäys_Y_suunnassa
miekkaangle = WrapAngle(miekkaangle + (KeyDown(cbkeyA)-KeyDown(cbkeyD)) * 10 )
RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
EndIf
//ALIENIT
If luo>80
newAlien.vihut= New(vihut)
newAlien\obj=CloneObject(vihollinen1)
ScreenPositionObject newAlien\obj,Rand(0,ScreenWidth()),Rand(0,screenheight())
ObjectOrder newalien\obj,1
SetupCollision newalien\obj, kartta, 1, 4, 2
newAlien\id=Rand(1,3)
Select newAlien\id 'käytä mielummin selectiä on selvempi
Case 1
newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
Case 2
PaintObject newAlien\obj,vihollinen2
newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
Case 3
PaintObject newAlien\obj,vihollinen3
newAlien\hp=Rand(280,340):newAlien\dmg=Rand(7,9):newAlien\score=Rand(35,50)
Default
MakeError "Annetulle IDlle ei ole asetettu toimintoa"
EndSelect
luo=0
EndIf
luo+1
For iAlien.vihut= Each vihut
If iAlien\ID>0 Then ' jos on elossa
sidle=Rand(-20,20)
If CountCollisions(iAlien\obj) Then MoveObject iAlien\obj,0,sidle
If ObjectSight (iAlien\obj,pelaaja) Then MoveObject iAlien\obj,1 Else MoveObject iAlien\obj,0
PointObject iAlien\obj,pelaaja
If ObjectsOverlap(iAlien\obj,pelaaja) Then hp-iAlien\dmg
For ibullet.bullets=Each bullets
If ObjectsOverlap(ibullet\obj,iAlien\obj) Then
PlaySound osui,50
iAlien\hp-ibullet\dmg
EndIf
Next ibullet
If ObjectsOverlap (pelaaja,iAlien\obj) Then
iAlien\hp-4
newanim.animaatio= New(animaatio)
newanim\obj=CloneObject(osuma)
ObjectOrder newanim\obj,-1
PlayObject newanim\obj,0,4,0.1
If Timer()>aikaruumis+15 Then CloneObjectPosition newanim\obj,pelaaja
aikaruumis=TIMER()
ObjectLife newanim\obj , 1000
EndIf
If ObjectsOverlap (miekkaase,ialien\obj) Then iAlien\hp-9
If iAlien\hp<0 Then
tapotpisteet+1
tapot+1
If Timer()>record+100 Then
blink=Not blink
record=Timer()
EndIf
/////////////////////////////////
////////// RUUMIIN TEKO /////////
/////////////////////////////////
xx=ObjectX(iAlien\obj)
yy=ObjectY(iAlien\obj)
ShowObject iAlien\obj, OFF
iAlien\obj = CloneObject(ruumis)
PositionObject iAlien\obj,xx,yy
ShowObject iAlien\obj, ON
ObjectOrder iAlien\obj,-1
iAlien\ID=-1 ' estetään toiminnot
ObjectLife iAlien\obj,300 'poistetaan tietyn ajan kuluttua
ObjectOrder ruumis,-1
EndIf
EndIf
Next iAlien
For iBullet.BULLETS= Each BULLETS
If CountCollisions(ibullet\obj) Then ibullet\hp-32
MoveObject iBullet\obj,6
If Distance2(iBullet\obj,pelaaja)>200 Or ibullet\hp<0 Then 'jos...niin tuhotaan ammus
DeleteObject iBullet\obj
Delete iBullet
EndIf
Next iBullet
DrawGame
// Valikko
DrawImage sumu,0,0
DrawImage yläpalkki ,0,0
Text 10,10,"PISTEITÄ :"+tapotpisteet
Text 200,10,"TAPOT :"+tapot
text 100,100,"FPS: "+fps()
Text 20,30, "LISÄÄ HP(4) + 50hp - 30p"
Text 20,45, "HP nyt = "+hp
Text 250,30,"LISÄÄ VOIMAA(5) + 5 voima - 20p"
Text 250,45,"VOIMA nyt = "+voima
Text 500,30,"LISÄÄ AMMUKSIA(6) + 25 ammusta - 10p"
Text 500,45,"AMMUKSIA nyt = "+ammukset
If KeyHit(cbkey4) And tapotpisteet>30
hp+50
tapotpisteet-30
ElseIf KeyHit(cbkey5) And tapotpisteet>20
voima+5
tapotpisteet-20
ElseIf KeyHit(cbkey6) And tapotpisteet>10
ammukset+25
tapotpisteet-10
EndIf
UpdateGame
CloneCameraPosition pelaaja
DrawScreen
If KeyHit(cbkeyf12) Then ScreenShot "C:\capture.bmp"
Forever