; ****************************
; ********************************
; *** ***
; *** ***
; *** MAZE MISSION ***
; *** ***
; *** © 2005 by Christian Gleinser ***
; *** ***
; *** ***
; ********************************
; ****************************
InitSprite()
InitKeyboard()
Global breite.b
Global hoehe.b
Global cnt.l
Global rndness.b, maxrnd.b
Global cx.b, cy.b
Global Dim zelle(500,500,5)
Global Dim maze.b(1001,1001)
Global Dim bereits(4)
Global modus.b
Global mrichtung.b
Global anzeigen.b
Global deadends.l
Global mazefertig.b
Global PlayerX.w, PlayerY.w
Global richtung.b, walk.b, Blickrichtung.b
Global anicnt.l
Global Dim GegnerX.w(500)
Global Dim GegnerY.w(500)
Global Dim GegnerRichtung.b(500)
Global GegnerAnzahl.l
Global ganicnt.l
Global Dim MuniX.w(100)
Global Dim MuniY.w(100)
Global MuniAnzahl.l
Global Munition.l
Global ShotX.w, ShotY.w
Global Shoot.b
Global ShootRichtung.b
Global mission.b
Global Zeit.w
Global BlueX.w
Global BlueY.w
Global TheButtonX.w
Global TheButtonY.w
Global ExitX.w
Global ExitY.w
Global newgame.b
Declare removesomedeadends()
Declare makesomerooms()
Declare scheiss()
Declare init()
Declare Map()
Declare MakeSomeSprites()
Declare game()
Declare gameover()
Declare explode()
Declare Display()
Declare DisplayMaze()
Declare DisplayItems()
Declare DisplayPlayer()
Declare DisplayEnemies()
Declare Controls()
Declare Player()
Declare Enemies()
Declare Richtungswechsel(i.l)
#links=0
#rechts=1
#hoch=2
#runter=3
Procedure umrechnenfinal()
For i = 2 To breite*2 Step 2
For j = 2 To hoehe*2 Step 2
If zelle(i/2,j/2,5)=1
maze(i-1,j-1)=1
EndIf
If zelle(i/2,j/2,2)=1
maze(i-1,j-1)=1
maze(i+1-1,j-1)=1
EndIf
If zelle(i/2,j/2,3)=1
maze(i-1,j-1)=1
maze(i-1,j+1-1)=1
EndIf
Next j
Next i
makesomerooms()
EndProcedure
Procedure umrechnen()
For i = 1 To breite
For j = 1 To hoehe
If zelle(i,j,1)=1
zelle(i,j-1,3)=1
EndIf
If zelle(i,j,2)=1
zelle(i+1,j,4)=1
EndIf
If zelle(i,j,3)=1
zelle(i,j+1,1)=1
EndIf
If zelle(i,j,4)=1
zelle(i-1,j,2)=1
EndIf
Next j
Next i
EndProcedure
Procedure calcmaze()
If modus=0
If cnt>=breite*hoehe
modus=1
umrechnen()
removesomedeadends()
EndIf
EndIf
If zelle(cx, cy, 5)=0
zelle(cx, cy, 5)=1
cnt=cnt+1
EndIf
While erfolg=0
rndness=rndness+1
If rndness=1
maxrnd=Int(Random(Int(breite/10)+1)+2)
mrichtung=Int(Random(3)+1)
EndIf
bereits(mrichtung)=1
If bereits(1) And bereits(2) And bereits(3) And bereits(4)
Break
EndIf
Select mrichtung
Case 1:
If cy>1
If zelle(cx,cy-1,5)=0
zelle(cx,cy,1)=1
cy=cy-1
erfolg=1
EndIf
EndIf
Case 2:
If cx<breite
If zelle(cx+1,cy,5)=0
zelle(cx,cy,2)=1
cx=cx+1
erfolg=1
EndIf
EndIf
Case 3:
If cy<hoehe
If zelle(cx,cy+1,5)=0
zelle(cx,cy,3)=1
cy=cy+1
erfolg=1
EndIf
EndIf
Case 4:
If cx>1
If zelle(cx-1,cy,5)=0
zelle(cx,cy,4)=1
cx=cx-1
erfolg=1
EndIf
EndIf
EndSelect
Wend
If rndness>=maxrnd
rndness=0
EndIf
For i = 1 To 4: bereits(i)=0: Next i
If erfolg=0
Repeat
cx=Int(Random(breite-1)+1)
cy=Int(Random(hoehe-1)+1)
Until zelle(cx, cy,5)=1
rndness=0
deadends=deadends+1
EndIf
EndProcedure
Procedure makesomeloops()
For krass = 1 To Int(breite/2)
; dead ends suchen
Repeat
cx=Int(Random(breite-1)+1)
cy=Int(Random(hoehe-1)+1)
If zelle(cx,cy,1)+zelle(cx,cy,2)+zelle(cx,cy,3)+zelle(cx,cy,4)=1
Break
EndIf
cnt2=cnt2+1
If cnt2>=300
umrechnenfinal()
EndIf
ForEver
; dead end zum loop machen
Repeat
i=Int(Random(3))+1
Until zelle(cx,cy,i)=0
zelle(cx,cy,i)=1
Select i
Case 1: cy=cy-1: zelle(cx,cy,3)=1
Case 2: cx=cx+1: zelle(cx,cy,4)=1
Case 3: cy=cy+1: zelle(cx,cy,1)=1
Case 4: cx=cx-1: zelle(cx,cy,2)=1
EndSelect
Next krass
umrechnenfinal()
EndProcedure
Procedure removesomedeadends()
For krass = 1 To Int(breite/2)
; dead ends suchen
Repeat
cx=Int(Random(breite-1)+1)
cy=Int(Random(hoehe-1)+1)
If zelle(cx,cy,1)+zelle(cx,cy,2)+zelle(cx,cy,3)+zelle(cx,cy,4)=1
Break
EndIf
ForEver
; dead end removen
Repeat
For i = 1 To 4
If zelle(cx,cy,i)
Break
EndIf
Next i
zelle(cx,cy,i)=0
zelle(cx,cy,5)=0
Select i
Case 1: cy=cy-1: zelle(cx,cy,3)=0
Case 2: cx=cx+1: zelle(cx,cy,4)=0
Case 3: cy=cy+1: zelle(cx,cy,1)=0
Case 4: cx=cx-1: zelle(cx,cy,2)=0
EndSelect
Until zelle(cx,cy,1)+zelle(cx,cy,2)+zelle(cx,cy,3)+zelle(cx,cy,4)>1
Next krass
makesomeloops()
EndProcedure
Procedure makesomerooms()
roomanzahl=Int(Random(breite*hoehe*0.08))+2
For i = 1 To roomanzahl
roomwidth=Int(Random(breite/2-4))+3
roomheight=Int(Random(hoehe/2-4))+3
roomx=Int(Random(breite*2-roomwidth-2))+1
roomy=Int(Random(hoehe*2-roomheight-2))+1
For j = 1 To roomwidth
For k = 1 To roomheight
maze(roomx+j,roomy+k)=1
Next k
Next j
Next i
FlipBuffers()
mazefertig=1
EndProcedure
Procedure WaitForKey()
Repeat
ExamineKeyboard()
Until KeyboardReleased(#PB_Any)
EndProcedure
Procedure ClearAll()
breite = 20
hoehe = 15
cx = 1
cy = 1
cnt = 0
mazefertig=0
mrichtung=0
deadends=0
modus=0
rndness=0
maxrnd=0
LoadFont(1,"arial",7)
LoadFont(2,"arial",5)
For i = 0 To 1001
For j = 0 To 1001
maze(i,j)=0
Next j
Next i
For i = 0 To 500
For j = 0 To 500
For k = 0 To 5
zelle(i,j,k)=0
Next k
Next j
Next i
For i = 0 To 4
bereits(i)=0
Next i
For i = 0 To 100
MuniX(i)=0
MuniY(i)=0
Next i
PlayerX=0
PlayerY=0
BlueX=0
BlueY=0
TheButtonX=0
TheButtonY=0
ShotX=0
ShotY=0
ExitX=0
ExitY=0
For i = 0 To 500
GegnerX(i)=0
GegnerY(i)=0
Next i
EndProcedure
Procedure main()
ClearAll()
ClearScreen(RGB(40,60,80))
StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(113, 80, "M A Z E M I S S I O N")
DrawText(100, 120, "© 2005 by Christian Gleinser")
DrawText(245, 225, "Press any key...")
StopDrawing()
FlipBuffers()
WaitForKey()
ClearScreen(RGB(40,60,80))
StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(113, 80, "M A Z E M I S S I O N")
DrawText(130, 120, "F1 - tiny maze")
DrawText(130, 140, "F2 - medium maze")
DrawText(130, 160, "F3 - giant maze")
StopDrawing()
FlipBuffers()
Repeat
ExamineKeyboard()
If KeyboardReleased(#PB_Key_F1)
breite=15
hoehe=15
Break
EndIf
If KeyboardReleased(#PB_Key_F2)
breite=25
hoehe=15
Break
EndIf
If KeyboardReleased(#PB_Key_F3)
breite=35
hoehe=25
Break
EndIf
If KeyboardReleased(#PB_Key_Escape)
ClearScreen(RGB(40,60,80))
FlipBuffers()
Delay(500)
End
EndIf
If WaitWindowEvent(2) = #PB_Event_CloseWindow
End
EndIf
ForEver
ClearScreen(RGB(40,60,80))
StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(113, 80, "M A Z E M I S S I O N")
DrawText(130, 120, "patience please...")
StopDrawing()
FlipBuffers()
MakeSomeSprites()
Repeat
calcmaze()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If WaitWindowEvent(2) = #PB_Event_CloseWindow
End
EndIf
Until mazefertig
init()
game()
End
EndProcedure
Procedure game()
newgame=1
Repeat
Display()
Controls()
If mission<9
Player()
Enemies()
Else
mission=mission+1
If mission=100
gameover()
EndIf
EndIf
Delay(8)
If mission=2
ZeitCnt=ZeitCnt+1
If ZeitCnt=100
Zeit=Zeit-1
ZeitCnt=0
EndIf
If Zeit=0
explode()
EndIf
EndIf
If IsWindow(0)
If WindowEvent() = #PB_Event_CloseWindow
End
EndIf
EndIf
ForEver
EndProcedure
Procedure gameover()
For i = 321 To 200 Step -1
ClearScreen(RGB(40,60,80))
StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(i, 200, "game over")
StopDrawing()
FlipBuffers()
Delay(10)
Next i
WaitForKey()
main()
EndProcedure
Procedure missioncomplete()
Delay(700)
ClearScreen(RGB(40,60,80))
StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(95, 80, "C O N G R A T U L A T I O N S !")
DrawText(136, 100, "you made it!")
StopDrawing()
FlipBuffers()
Delay(2000)
ExamineKeyboard()
WaitForKey()
ClearScreen(RGB(0,0,0))
FlipBuffers()
Delay(700)
main()
EndProcedure
Procedure explode()
GrabSprite(666,60,40,200,160)
For i = 50 To 4 Step -1
ClearScreen(RGB(40,60,80))
DisplaySprite(666,60+Int(Random(i/2)),40+Int(Random(i/2)))
FlipBuffers()
Delay(16)
ClearScreen(RGB(40,60,80))
DisplaySprite(666,60+Int(Random(i/2)),40+Int(Random(i/2)))
FlipBuffers()
Delay(16)
Next i
ExamineKeyboard()
gameover()
EndProcedure
Procedure Display()
ClearScreen(RGB(0,0,0))
DisplayMaze()
DisplayItems()
DisplayPlayer()
DisplayEnemies()
StartDrawing(ScreenOutput())
Box(0,0,320,40,RGB(40,60,80))
Box(0,200,320,40,RGB(40,60,80))
Box(0,0,60,240,RGB(40,60,80))
Box(260,0,60,240,RGB(40,60,80))
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawingFont(FontID(1))
DrawText(17, 17, "Bullets: "+Str(Munition))
Select mission
Case 0: DrawText(190, 17, "Find the blueprints!")
Case 1: DrawText(190, 17, "Find self-destruction switch!")
Case 2: DrawText(190, 17, "Get out of here!")
If Zeit<11
FrontColor(RGB(255,0,0))
EndIf
DrawText(190, 27, Str(Zeit)+" seconds left")
EndSelect
If mission>9
FrontColor(RGB(255,0,0)):DrawText(190, 17, "They got you!")
EndIf
If newgame
FrontColor(RGB(0,255,0))
DrawText(140, 70, "get ready")
EndIf
StopDrawing()
FlipBuffers()
If newgame
newgame=0
Delay(1000)
EndIf
EndProcedure
Procedure DisplayMaze()
For x = 0 To 11
For y = 0 To 9
bx=x*20+60-PlayerX%20-10
by=y*20+40-PlayerY%20-10
ox=(PlayerX/20)+x-5
oy=(PlayerY/20)+y-4
If ox>=0 And oy>=0 And ox<=breite*2 And oy<=hoehe*2
If maze(ox,oy)
DisplaySprite(1,bx,by)
Else
DisplaySprite(2,bx,by)
EndIf
Else
DisplaySprite(2,bx,by)
EndIf
Next y
Next x
EndProcedure
Procedure DisplayItems()
For i = 0 To MuniAnzahl
ox=MuniX(i)-PlayerX-10+160
oy=MuniY(i)-PlayerY-10+120
DisplayTransparentSprite(301,ox,oy)
Next i
ox=BlueX-PlayerX-10+160
oy=BlueY-PlayerY-10+120
DisplayTransparentSprite(303,ox,oy)
ox=TheButtonX-PlayerX-10+160
oy=TheButtonY-PlayerY-10+120
DisplayTransparentSprite(304,ox,oy)
ox=ExitX-PlayerX-10+160
oy=ExitY-PlayerY-10+120
DisplayTransparentSprite(305,ox,oy)
EndProcedure
Procedure DisplayPlayer()
If walk=0
anicnt=0
EndIf
anicnt=anicnt+6
If anicnt>200
anicnt=0
EndIf
ClipSprite(100,Int(anicnt/100)*20,richtung%2*20,20,20)
DisplayTransparentSprite(100,150,110)
If Shoot
ox=ShotX-PlayerX-10+160
oy=ShotY-PlayerY-10+120
DisplayTransparentSprite(302,ox,oy)
EndIf
EndProcedure
Procedure DisplayEnemies()
ganicnt=ganicnt+6
If ganicnt>200
ganicnt=0
EndIf
For i = 0 To GegnerAnzahl
ox=GegnerX(i)-PlayerX-10+160
oy=GegnerY(i)-PlayerY-10+120
If GegnerRichtung(i)>=5 And GegnerRichtung(i)<40
GegnerRichtung(i)=GegnerRichtung(i)+1
DisplayTransparentSprite(201,ox,oy)
EndIf
If GegnerRichtung(i)<5
ClipSprite(200,Int(ganicnt/100)*20,GegnerRichtung(i)%2*20,20,20)
DisplayTransparentSprite(200,ox,oy)
EndIf
Next i
EndProcedure
Procedure Controls()
Static dauerfeuergibtshiernicht.b
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If KeyboardReleased(#PB_Key_F1)
MakeSomeSprites()
EndIf
If KeyboardReleased(#PB_Key_F2)
Map()
EndIf
If KeyboardPushed(#PB_Key_Left)
richtung=#links
Blickrichtung=#links
walk=1
EndIf
If KeyboardPushed(#PB_Key_Right)
richtung=#rechts
Blickrichtung=#rechts
walk=1
EndIf
If KeyboardPushed(#PB_Key_Up)
richtung=#hoch
Blickrichtung=#hoch
walk=1
EndIf
If KeyboardPushed(#PB_Key_Down)
richtung=#runter
Blickrichtung=#runter
walk=1
EndIf
If KeyboardPushed(#PB_Key_Space)
If Shoot=0 And Munition>0 And dauerfeuergibtshiernicht=0
Shoot=1
ShootRichtung=Blickrichtung
Munition=Munition-1
ShotX=PlayerX
ShotY=PlayerY
dauerfeuergibtshiernicht=1
EndIf
EndIf
If KeyboardReleased(#PB_Key_Space)
dauerfeuergibtshiernicht=0
EndIf
If KeyboardReleased(#PB_Any)
walk=0
EndIf
EndProcedure
Procedure Player()
If walk
nx1 = Int(PlayerX / 20)
nx2 = Int((PlayerX + 19) / 20)
ny1 = Int(PlayerY / 20)
ny2 = Int((PlayerY + 19) / 20)
Select richtung
Case #links:
If maze(nx2-1,ny1)<>1: hoscheisse=1: EndIf
If maze(nx2-1,ny2)<>1: ruscheisse=1: EndIf
If hoscheisse=0 And ruscheisse=1: richtung=#hoch: EndIf
If hoscheisse=1 And ruscheisse=0: richtung=#runter: EndIf
If hoscheisse=1 And ruscheisse=1: walk=0: EndIf
Case #rechts:
If maze(nx1+1,ny1)<>1: hoscheisse=1: EndIf
If maze(nx1+1,ny2)<>1: ruscheisse=1: EndIf
If hoscheisse=0 And ruscheisse=1: richtung=#hoch: EndIf
If hoscheisse=1 And ruscheisse=0: richtung=#runter: EndIf
If hoscheisse=1 And ruscheisse=1: walk=0: EndIf
Case #hoch:
If maze(nx1,ny2-1)<>1: lischeisse=1: EndIf
If maze(nx2,ny2-1)<>1: rescheisse=1: EndIf
If lischeisse=0 And rescheisse=1: richtung=#links: EndIf
If lischeisse=1 And rescheisse=0: richtung=#rechts: EndIf
If lischeisse=1 And rescheisse=1: walk=0: EndIf
Case #runter:
If maze(nx1,ny1+1)<>1: lischeisse=1: EndIf
If maze(nx2,ny1+1)<>1: rescheisse=1: EndIf
If lischeisse=0 And rescheisse=1: richtung=#links: EndIf
If lischeisse=1 And rescheisse=0: richtung=#rechts: EndIf
If lischeisse=1 And rescheisse=1: walk=0: EndIf
EndSelect
EndIf
If walk
Select richtung
Case #links: PlayerX=PlayerX-1
Case #rechts: PlayerX=PlayerX+1
Case #hoch: PlayerY=PlayerY-1
Case #runter: PlayerY=PlayerY+1
EndSelect
EndIf
;einsammeln
For i = 0 To MuniAnzahl
If PlayerX>=MuniX(i)-6 And PlayerX<=MuniX(i)+6
If PlayerY>=MuniY(i)-6 And PlayerY<=MuniY(i)+6
Munition=Munition+4
MuniX(i)=-500
EndIf
EndIf
Next i
If PlayerX>=BlueX-8 And PlayerX<=BlueX+8
If PlayerY>=BlueY-8 And PlayerY<=BlueY+8
BlueX=-500
mission=1
EndIf
EndIf
If PlayerX>=TheButtonX-8 And PlayerX<=TheButtonX+8
If PlayerY>=TheButtonY-8 And PlayerY<=TheButtonY+8
If mission=1
mission=2
Zeit=breite*2
ClearScreen(RGB(255,255,255))
FlipBuffers()
Delay(20)
EndIf
EndIf
EndIf
If PlayerX>=ExitX-8 And PlayerX<=ExitX+8
If PlayerY>=ExitY-8 And PlayerY<=ExitY+8
If mission=2
missioncomplete()
EndIf
EndIf
EndIf
;schieЯen
If Shoot
ox=ShotX-PlayerX-10+160
oy=ShotY-PlayerY-10+120
Select ShootRichtung
Case #links: ShotX=ShotX-5
Case #rechts: ShotX=ShotX+5
Case #hoch: ShotY=ShotY-5
Case #runter: ShotY=ShotY+5
EndSelect
If ox<20 Or ox>300 Or oy<20 Or oy>220
Shoot=0
EndIf
For i = 0 To GegnerAnzahl
If GegnerRichtung(i)<5
If ShotX>=GegnerX(i)-10 And ShotX<=GegnerX(i)+10
If ShotY>=GegnerY(i)-10 And ShotY<=GegnerY(i)+10
GegnerRichtung(i)=5
Shoot=0
EndIf
EndIf
EndIf
Next i
If maze(Int(ShotX/20),Int(ShotY/20))<>1
If Shoot<>2
Shoot=Shoot+1
Else
Shoot=0
EndIf
EndIf
EndIf
EndProcedure
Procedure Enemies()
For i = 0 To GegnerAnzahl
nx = Int(GegnerX(i) / 20)
nxx = Int((GegnerX(i) + 19) / 20)
ny = Int(GegnerY(i) / 20)
nyy = Int((GegnerY(i) + 19) / 20)
Repeat
r=0
Select GegnerRichtung(i)
Case #links
If GegnerX(i)%20=0
If maze(nxx-1,ny)<>1
GegnerRichtung(i)=Int(Random(3))
r=1
EndIf
EndIf
If r=0
GegnerX(i)=GegnerX(i)-1
EndIf
Case #rechts
If GegnerX(i)%20=0
If maze(nx+1,ny)<>1
GegnerRichtung(i)=Int(Random(3))
r=1
EndIf
EndIf
If r=0
GegnerX(i)=GegnerX(i)+1
EndIf
Case #hoch
If GegnerY(i)%20=0
If maze(nx,nyy-1)<>1
GegnerRichtung(i)=Int(Random(3))
r=1
EndIf
EndIf
If r=0
GegnerY(i)=GegnerY(i)-1
EndIf
Case #runter
If GegnerY(i)%20=0
If maze(nx,ny+1)<>1
GegnerRichtung(i)=Int(Random(3))
r=1
EndIf
EndIf
If r=0
GegnerY(i)=GegnerY(i)+1
EndIf
EndSelect
Until r=0
If GegnerRichtung(i)<5
;Kollision
If GegnerX(i)>=PlayerX-6 And GegnerX(i)<=PlayerX+6
If GegnerY(i)>=PlayerY-9 And GegnerY(i)<=PlayerY+9
mission=9
EndIf
EndIf
EndIf
Next i
EndProcedure
Procedure Richtungswechsel(i.l)
GegnerRichtung(i)=Int(Random(3))
EndProcedure
Procedure Map()
ClearScreen(RGB(0,0,0))
ox=160-breite*3
oy=120-hoehe*3
StartDrawing(ScreenOutput())
For x = 0 To breite*2
For y = 0 To hoehe*2
If maze(x,y)=0
Box(x*3+ox,y*3+oy,3,3,RGB(0,128,255))
EndIf
Next y
Next x
For i = 0 To GegnerAnzahl
Plot(GegnerX(i)/20*3+1+ox,GegnerY(i)/20*3+1+oy,RGB(255,0,0))
Next i
Box(PlayerX/20*3+ox,PlayerY/20*3+oy,3,3,RGB(255,255,0))
StopDrawing()
FlipBuffers()
WaitForKey()
EndProcedure
Procedure init()
While maze(PlayerX,PlayerY)=0
PlayerX=Int(Random(breite*2))
PlayerY=Int(Random(hoehe*2))
Wend
PlayerX=PlayerX*20
PlayerY=PlayerY*20
Blickrichtung=#links
GegnerAnzahl=breite*hoehe/15
;GegnerAnzahl=49
For i = 0 To GegnerAnzahl
While maze(GegnerX(i),GegnerY(i))=0
GegnerX(i)=Int(Random(breite*2))
GegnerY(i)=Int(Random(hoehe*2))
Wend
GegnerX(i)=GegnerX(i)*20
GegnerY(i)=GegnerY(i)*20
GegnerRichtung(i)=Int(Random(3))
If GegnerX(i)>=PlayerX-50 And GegnerX(i)<=PlayerX+50
If GegnerY(i)>=PlayerY-50 And GegnerY(i)<=PlayerY+50
GegnerX(i)=0
GegnerY(i)=0
i=i-1
EndIf
EndIf
Next i
Munition=2
MuniAnzahl=breite*hoehe/100
For i = 0 To MuniAnzahl
While maze(MuniX(i),MuniY(i))=0
MuniX(i)=Int(Random(breite*2))
MuniY(i)=Int(Random(hoehe*2))
Wend
MuniX(i)=MuniX(i)*20
MuniY(i)=MuniY(i)*20
Next i
While maze(BlueX,BlueY)=0 Or BlueX=PlayerX/20 And BlueY=PlayerY/20
BlueX=Int(Random(breite*2))
BlueY=Int(Random(hoehe*2))
Wend
BlueX=BlueX*20
BlueY=BlueY*20
While maze(TheButtonX,TheButtonY)=0 Or TheButtonX=PlayerX/20 And TheButtonY=PlayerY/20
TheButtonX=Int(Random(breite*2))
TheButtonY=Int(Random(hoehe*2))
Wend
TheButtonX=TheButtonX*20
TheButtonY=TheButtonY*20
While maze(ExitX,ExitY)=0 Or ExitX=PlayerX/20 And ExitY=PlayerY/20
ExitX=Int(Random(breite*2))
ExitY=Int(Random(hoehe*2))
Wend
ExitX=ExitX*20
ExitY=ExitY*20
mission=0
EndProcedure
Procedure MakeSomeSprites()
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,128,255))
Line(0,0,20,0,RGB(220,230,255))
Line(0,0,0,20,RGB(220,230,255))
Line(1,19,20,0,RGB(0,96,192))
Line(19,0,0,20,RGB(0,96,192))
If Int(Random(1))
Line(3,3,14,0,RGB(0,96,192))
Line(3,3,0,14,RGB(0,96,192))
Line(4,16,13,0,RGB(220,230,255))
Line(16,3,0,14,RGB(220,230,255))
If Int(Random(1))
Box(4,4,12,12,RGB(100,200,255))
EndIf
If Int(Random(1))
Box(4,4,12,12,RGB(0,0,0))
EndIf
EndIf
If Int(Random(1))
Line(8,8,4,0,RGB(220,230,255))
Line(8,8,0,5,RGB(220,230,255))
Line(9,12,4,0,RGB(0,96,192))
Line(12,8,0,4,RGB(0,96,192))
If Int(Random(1))
Box(9,9,3,3,RGB(100,200,255))
EndIf
If Int(Random(1))
Box(9,9,3,3,RGB(0,0,0))
EndIf
If Int(Random(1))
Box(9,9,3,3,RGB(0,128,255))
EndIf
EndIf
StopDrawing()
GrabSprite(2,0,0,20,20)
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,20,40))
StopDrawing()
GrabSprite(1,0,0,20,20)
; SPIELFIGUR
StartDrawing(ScreenOutput())
Box(0,0,40,40,RGB(0,0,0))
Circle(10,5,2,RGB(255,255,0))
Line(10,7,0,4,RGB(255,255,0))
Line(10,11,-1,4,RGB(255,255,0))
Line(10,11,1,6,RGB(255,255,0))
Line(10,7,-2,4,RGB(255,255,0))
Line(10,7,2,5,RGB(255,255,0))
Circle(20+10,5,2,RGB(255,255,0))
Line(20+10,7,0,4,RGB(255,255,0))
Line(20+10,11,-3,6,RGB(255,255,0))
Line(20+10,11,3,4,RGB(255,255,0))
Line(20+10,7,-2,5,RGB(255,255,0))
Line(20+10,7,2,4,RGB(255,255,0))
Circle(11,20+5,2,RGB(255,255,0))
Line(10,20+7,0,4,RGB(255,255,0))
Line(10,20+11,-1,4,RGB(255,255,0))
Line(10,20+11,1,6,RGB(255,255,0))
Line(10,20+7,-2,4,RGB(255,255,0))
Line(10,20+7,2,5,RGB(255,255,0))
Circle(20+11,20+5,2,RGB(255,255,0))
Line(20+10,20+7,0,4,RGB(255,255,0))
Line(20+10,20+11,-3,6,RGB(255,255,0))
Line(20+10,20+11,3,4,RGB(255,255,0))
Line(20+10,20+7,-2,5,RGB(255,255,0))
Line(20+10,20+7,2,4,RGB(255,255,0))
StopDrawing()
GrabSprite(100,0,0,40,40)
TransparentSpriteColor(-1,RGB(0,0,0))
; GEGNER
StartDrawing(ScreenOutput())
Box(0,0,40,40,RGB(0,0,0))
Circle(10,5,2,RGB(255,0,0))
Line(10,7,0,4,RGB(255,0,0))
Line(10,11,-1,4,RGB(255,0,0))
Line(10,11,1,6,RGB(255,0,0))
Line(10,7,-2,4,RGB(255,0,0))
Line(10,7,2,5,RGB(255,0,0))
Circle(20+10,5,2,RGB(255,0,0))
Line(20+10,7,0,4,RGB(255,0,0))
Line(20+10,11,-3,6,RGB(255,0,0))
Line(20+10,11,3,4,RGB(255,0,0))
Line(20+10,7,-2,5,RGB(255,0,0))
Line(20+10,7,2,4,RGB(255,0,0))
Circle(11,20+5,2,RGB(255,0,0))
Line(10,20+7,0,4,RGB(255,0,0))
Line(10,20+11,-1,4,RGB(255,0,0))
Line(10,20+11,1,6,RGB(255,0,0))
Line(10,20+7,-2,4,RGB(255,0,0))
Line(10,20+7,2,5,RGB(255,0,0))
Circle(20+11,20+5,2,RGB(255,0,0))
Line(20+10,20+7,0,4,RGB(255,0,0))
Line(20+10,20+11,-3,6,RGB(255,0,0))
Line(20+10,20+11,3,4,RGB(255,0,0))
Line(20+10,20+7,-2,5,RGB(255,0,0))
Line(20+10,20+7,2,4,RGB(255,0,0))
StopDrawing()
GrabSprite(200,0,0,40,40)
;GEGNER TOT
StartDrawing(ScreenOutput())
Box(0,0,40,40,RGB(0,0,0))
Line(5,5,10,10,RGB(255,0,0))
Line(14,5,-10,10,RGB(255,0,0))
Line(5,10,10,0,RGB(255,0,0))
Line(10,5,0,10,RGB(255,0,0))
Circle(10,10,3,RGB(0,0,0))
StopDrawing()
GrabSprite(201,0,0,20,20)
; ITEMS
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,0,0))
Line(5,5,0,3,RGB(255,0,0))
Line(7,5,0,3,RGB(255,0,0))
Line(9,5,0,3,RGB(255,0,0))
Line(11,5,0,3,RGB(255,0,0))
Plot(5,8,RGB(255,255,0))
Plot(7,8,RGB(255,255,0))
Plot(9,8,RGB(255,255,0))
Plot(11,8,RGB(255,255,0))
StopDrawing()
GrabSprite(301,0,0,20,20)
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,0,0))
Circle(10,10,4,RGB(255,0,0))
Circle(10,10,2,RGB(255,255,0))
StopDrawing()
GrabSprite(302,0,0,20,20)
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,0,0))
Box(3,3,14,14,RGB(255,255,255))
Box(4,4,12,12,RGB(0,30,170))
Circle(7,7,3,RGB(255,255,255))
Circle(7,7,2,RGB(0,30,170))
Line(5,12,5,0,RGB(255,255,255))
Line(5,14,4,0,RGB(255,255,255))
Line(12,5,0,10,RGB(255,255,255))
Line(12,12,3,0,RGB(255,255,255))
Line(12,14,4,0,RGB(255,255,255))
StopDrawing()
GrabSprite(303,0,0,20,20)
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,0,0))
Box(4,4,11,11,RGB(80,80,80))
Line(4,4,11,0,RGB(120,120,120))
Line(4,4,0,11,RGB(120,120,120))
Line(15,4,0,11,RGB(50,50,50))
Line(15,15,-11,0,RGB(50,50,50))
Circle(10,10,4,RGB(0,0,0))
Circle(10,10,3,RGB(255,0,0))
Circle(10,10,2,RGB(200,0,0))
StopDrawing()
GrabSprite(304,0,0,20,20)
StartDrawing(ScreenOutput())
Box(0,0,20,20,RGB(0,0,0))
Box(2,2,16,16,RGB(0,180,0))
Box(4,4,12,12,RGB(0,50,0))
DrawingFont(FontID(2))
DrawingMode(1)
FrontColor(RGB(255,255,255))
DrawText(2, 7, "EXIT")
StopDrawing()
GrabSprite(305,0,0,20,20)
ClearScreen(RGB(40,60,80))
EndProcedure
Procedure StartWindowed()
If OpenWindow(0,0,0,640,480,"Maze Mission",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),0,0,320,240,1,0,0)
main()
EndIf
EndIf
EndProcedure
Procedure StartFullscreen()
If OpenScreen(320,240,32,"Maze Mission")
main()
Else
MessageRequester("Fehler", "Fullscreen-Mode scheint nicht zu gehen. Nun muЯ eben der Fenstermodus genьgen :)")
StartWindowed()
EndIf
EndProcedure
;StartFullscreen() ;hier kцnnt ihr wдhlen, welchen Modus ihr wollt
StartWindowed()