En tiiä mikä kusee siinä, tässä lähdekoodit, jos joku vaikka löytää vian, se on siellä updateWorld-aliohjelmassa se virhe todennäköisimmin:
Code: Select all
Type Enemy
Field object
Field hp
EndType
Type BULLET
Field object
EndType
Function color3ToPutPixel(r As Integer, g As Integer, b As Integer)
Return (r Shl 16) + (g Shl 8) + b
EndFunction
//Energia-hassutus, käynnistyykö serveri vai client
If GetWord(CommandLine(),1="-mode")Then
//Internet not implemented yet
Else
Repeat
If button(0,0,100,100,"Start game") Then
Gosub mainGame
EndIf
DrawScreen
Until KeyHit(cbkeyreturn)
EndIf
Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
If MouseUp(1) Then Return True
Else
Color 220,220,220
EndIf
Box x+s,y,w-(s*2),h
Box x,y+s,w,h-(s*2)
Circle x,y,s*2
Circle x+w-s*2,y,s*2
Circle x+w-s*2,y+h-s*2,s*2
Circle x,y+h-s*2,s*2
Color cbblack
CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
EndFunction
mainGame:
SAFEEXIT OFF
Randomize Timer()
FrameLimit 100
SCREEN 640,360
SSvalue =0
Smooth2D ON
gameFont = LoadFont("Media/font.ttf",18)
SetFont gamefont
godmode=0
velX=0
velY=0
points=0
r As Integer = 250
g As Integer = 0
b As Integer = 0
sparkle = LoadImage("Media/sparkle.png")
godSparkle = MakeEmitter(sparkle,10)
ShowObject godSparkle,OFF
masterBullet = LoadObject("Media/bullet.png")
ShowObject masterBullet,OFF
redOrb = LoadObjectWithMask("Media/Energyorb.png",177,177,177,255,0,0)
ShowObject redOrb,OFF
player = LoadObjectWithMask("Media/ship.png",177,177,177,255,0,0)
masterenemy = LoadObjectWithMask("Media/ship_enemy.png",177,177,177,255,0,255)
ShowObject masterenemy,OFF
PositionObject player,-250,0
bgIMG = LoadImage("Media/backround.png")
backround = MakeObjectFloor()
PositionObject backround,0,0,-100
PaintObject backround,bgIMG
hp#=250.0
sound = PlaySound ("Media/music.ogg")
Repeat
CloneObjectPosition godSparkle,player
ParticleMovement godSparkle,-5,0,0.97
ParticleEmission godSparkle,1,0,180
Gosub moving
Gosub createEnemy
Gosub updateWorld
If godMode Then
GhostObject player,50
ParticleEmission godSparkle,1,50,180
Else
GhostObject player,100
EndIf
Color 255,255,255
DrawGame
Text 0,0,"HP: "+hp+" Points: "+points
If KeyHit(59) Then
ScreenShot "ScreenShot/SCREEN-"+SSvalue+".bmp"
EndIf
DrawScreen
Forever
Return
Function changeImageColor(img,oldr,oldg,oldb,newr,newg,newb)
Lock Image(img)
DrawToImage img
For x=0 To ImageWidth(img)
For y=0 To ImageHeight(img)
PickImageColor2 img,x,y
If getRGB(RED)=oldr And getRGB(GREEN)=oldg And getRGB(BLUE)=oldb Then
PutPixel2 x,y,color3ToPutPixel(newr, newg, newb),Image(img)
EndIf
Next y
Next x
DrawToScreen
Unlock Image(img)
EndFunction
Function LoadObjectWithMask(fileName As String, maskR, maskG, maskB, vR, vG, vB)
tempIMG = LoadImage(filename)
temp = MakeObject()
changeImageColor(tempIMG,maskR,maskG,maskB,vR,vG,vB)
PaintObject temp,-tempIMG
Return temp
EndFunction
Function laskeProsentit#(määrä#,maxMäärä#)
Return määrä*100/maxMäärä
EndFunction
moving:
If LeftKey() Or KeyDown(cbkeya) Then velX=velX-10
If RightKey() Or KeyDown(cbkeyd) Then velX=velX+10
If UpKey() Or KeyDown(cbkeyw) Then velY=velY+10
If DownKey() Or KeyDown(cbkeys) Then velY=velY-10
If KeyHit(cbkeyspace) Then Gosub createBullet
//If KeyHit(cbkeyg) Then godMode = Not Godmode
TranslateObject player,velX,velY
velX=0
velY=0
Return
createEnemy:
If(Rand(100)<1) Then
newEnemy.Enemy = New(Enemy)
newEnemy\object = CloneObject(masterEnemy)
PositionObject newEnemy\object,250,Rnd(-190,190)
ObjectInteger newEnemy\object,ConvertToInteger(newEnemy)
newEnemy\hp = 100
EndIf
Return
updateWorld:
For EnemyUnit.Enemy = Each Enemy
MoveObject EnemyUnit\object,-5
If ObjectsOverlap(EnemyUnit\object,player,1) Then
DeleteObject EnemyUnit\object
Delete EnemyUnit
If Not godmode Then hp=hp-10
EndIf
For ammo.BULLET = Each BULLET
MoveObject ammo\object,5
If ObjectsOverlap(EnemyUnit\object,ammo\object) Then
DeleteObject EnemyUnit\object
Delete EnemyUnit
DeleteObject ammo\object
Delete ammo
points = points + 10
EndIf
Next ammo
If ObjectX(EnemyUnit\object) = -250 Then
points=points-10
DeleteObject EnemyUnit\object
Delete EnemyUnit
EndIf
Next EnemyUnit
Return
createBullet:
newBullet.BULLET = New(BULLET)
newBullet\object = CloneObject(masterBullet)
ObjectInteger newBullet\object,ConvertToInteger(newBullet)
CloneObjectPosition newBullet\object,player
MoveObject newBullet\object,40
Return