ich habe mir mal SpiderBasic zugelegt und mal ein kleines Testspiel damit programmiert.
Die aktuelle KI ist aber sehr dumm.
Daher suche ich Tipps.
...und wie könnte man höhere Bildraten erzielen ? (60 Bilder pro Sekunde sind bei mir einfach nicht drin -> Hab es auf 30 Bilder pro Sekunde, weil es sonst sowie so auf 30 FPS herunterfällt.)
Code: Alles auswählen
;Neu und sauber mit SpiderBasic
Global move = #True
#Laby = 99 ; wie Labyrinth
#Hintergrund = 0
#Mauer = 1
#Paci_Offen = 2
#Paci_Mitte1 = 3
#Paci_Mitte2 = 4
#Paci_Mitte3 = 5
#Paci_Mitte4 = 6
#Paci_Zu = 7
#Blinky = 8
#Pinky = 9
#Inky = 10
#Clyde = 11
#PacDot = 12
#PacBigDot = 13
Global Dim Level.i(20,20)
Global Dim offen.i(5)
offen(1) = 0 : offen(2) = 0 : offen(3) = 0 : offen(4) = 0
Global zufall = 1
;Global zufall_fix = 0, zfix = 0
;Global dir_ex = -1
Global direction = -1
;Global prio_x = 0, prio_y = 0
Global blinky_return.s = ""
Global paci_anim = #True
Global paci_xx = 0, paci_yy = 0
Global paci_lives = 4
Global paci_points = 0
Global paci_x = 64, paci_y = 32, paci_speed = 4
Global paci_left.b = #False, paci_right.b = #False, paci_up.b = #False, paci_down.b = #False
Global blinky_x = 320, blinky_y = 256, blinky_speed = 4
Global blinky_left.b = #False, blinky_right.b = #False, blinky_up.b = #True, blinky_down.b = #False
Global pinky_x = 320, pinky_y = 288, pinky_speed = 4
Global pinky_left.b = #False, pinky_right.b = #False, pinky_up.b = #True, pinky_down.b = #False
Global inky_x = 288, inky_y = 288, inky_speed = 2
Global inky_left.b = #False, inky_right.b = #True, inky_up.b = #False, inky_down.b = #False
Global clyde_x = 352, clyde_y = 288, clyde_speed = 2
Global clyde_left.b = #True, clyde_right.b = #False, clyde_up.b = #False, clyde_down.b = #False
Global stepping = 0
Global return_stepping = 0
Global run = 0, run2 = 0, ms = 0
InitSprite()
Procedure KI_AStern()
;Bitte um Tipps?
EndProcedure
Procedure Blinky_KI()
;Blinky_Move
If blinky_x <= -32
blinky_x = 640
ElseIf blinky_x >= 640
blinky_x = -32
EndIf
If blinky_left = #True
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
blinky_x = blinky_x - blinky_speed
ElseIf blinky_right = #True
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
blinky_x = blinky_x + blinky_speed
ElseIf blinky_up = #True
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
blinky_y = blinky_y - blinky_speed
ElseIf blinky_down = #True
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
blinky_y = blinky_y + blinky_speed
EndIf
tx = Int(blinky_x / 32)
ty = Int(blinky_y / 32)
modx = blinky_x % 32
mody = blinky_y % 32
If tx = 0
tx = 1
ElseIf tx > 19
tx = 19
EndIf
If blinky_y = paci_y And blinky_x < paci_x And (blinky_left = #True Or blinky_right = #True)
ran = 2
ElseIf blinky_y = paci_y And blinky_x > paci_x And (blinky_left = #True Or blinky_right = #True)
ran = 3
ElseIf blinky_x = paci_x And blinky_y < paci_y And (blinky_up = #True Or blinky_down = #True)
ran = 4
ElseIf blinky_x = paci_x And blinky_y > paci_y And (blinky_up = #True Or blinky_down = #True)
ran = 5
Else
ran = Int(Random(1))
If ran = 0
If blinky_y > paci_y
ran = 0
ElseIf blinky_y < paci_y
ran = 1
EndIf
ElseIf ran = 1
If blinky_x > paci_x
ran = 0
ElseIf blinky_x < paci_x
ran = 1
EndIf
EndIf
EndIf
If blinky_x >= 32 And blinky_x <= 640 And blinky_y >= 32 And blinky_y <= 640
If blinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_left = 1 And modx = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Not Level(tx+1,ty) = 1 And ran = 2
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And ran = 3
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Level(tx+1,ty) = 1 And ran = 2
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_left = 1 And modx = 0 And Level(tx-1,ty) = 1 And ran = 3
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx+1,ty) = 1 And ran = 2
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And ran = 3
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Level(tx+1,ty) = 1 And ran = 2
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_right = 1 And modx = 0 And Level(tx-1,ty) = 1 And ran = 3
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Not Level(tx,ty+1) = 1 And ran = 4
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_up = 1 And mody = 0 And Not Level(tx,ty-1) = 1 And ran = 5
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Level(tx,ty+1) = 1 And ran = 4
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_up = 1 And mody = 0 And Level(tx,ty-1) = 1 And ran = 5
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And (ran = 0 Or ran = 1)
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
blinky_left = #True : blinky_right = #False : blinky_up = #False : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
blinky_left = #False : blinky_right = #True : blinky_up = #False : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Not Level(tx,ty+1) = 1 And ran = 4
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
ElseIf blinky_down = 1 And mody = 0 And Not Level(tx,ty-1) = 1 And ran = 5
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Level(tx,ty+1) = 1 And ran = 4
blinky_left = #False : blinky_right = #False : blinky_up = #True : blinky_down = #False
ElseIf blinky_down = 1 And mody = 0 And Level(tx,ty-1) = 1 And ran = 5
blinky_left = #False : blinky_right = #False : blinky_up = #False : blinky_down = #True
EndIf
EndIf
EndProcedure
Procedure Pinky_KI()
;Pinky_Move
If pinky_x <= -32
pinky_x = 640
ElseIf pinky_x >= 640
pinky_x = -32
EndIf
If pinky_left = #True
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
pinky_x = pinky_x - pinky_speed
ElseIf pinky_right = #True
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
pinky_x = pinky_x + pinky_speed
ElseIf pinky_up = #True
pinky_left = #False : pinky_right = #False : pinky_up = #True : pinky_down = #False
pinky_y = pinky_y - pinky_speed
ElseIf pinky_down = #True
pinky_left = #False : pinky_right = #False : pinky_up = #False : pinky_down = #True
pinky_y = pinky_y + pinky_speed
EndIf
tx = Int(pinky_x / 32)
ty = Int(pinky_y / 32)
modx = pinky_x % 32
mody = pinky_y % 32
If tx = 0
tx = 1
ElseIf tx > 19
tx = 19
EndIf
ran = Int(Random(1))
If pinky_x >= 32 And pinky_x <= 640 And pinky_y >= 32 And pinky_y <= 640
If pinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
pinky_left = #False : pinky_right = #False : pinky_up = #True : pinky_down = #False
ElseIf pinky_left = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
pinky_left = #False : pinky_right = #False : pinky_up = #False : pinky_down = #True
ElseIf pinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
pinky_left = #False : pinky_right = #False : pinky_up = #True : pinky_down = #False
ElseIf pinky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
pinky_left = #False : pinky_right = #False : pinky_up = #False : pinky_down = #True
ElseIf pinky_left = 1 And modx = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
ElseIf pinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
pinky_left = #False : pinky_right = #False : pinky_up = #True : pinky_down = #False
ElseIf pinky_right = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
pinky_left = #False : pinky_right = #False : pinky_up = #False : pinky_down = #True
ElseIf pinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
pinky_left = #False : pinky_right = #False : pinky_up = #True : pinky_down = #False
ElseIf pinky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
pinky_left = #False : pinky_right = #False : pinky_up = #False : pinky_down = #True
ElseIf pinky_right = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
ElseIf pinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
ElseIf pinky_up = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
ElseIf pinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
ElseIf pinky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
ElseIf pinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
ElseIf pinky_down = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
ElseIf pinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
pinky_left = #True : pinky_right = #False : pinky_up = #False : pinky_down = #False
ElseIf pinky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
pinky_left = #False : pinky_right = #True : pinky_up = #False : pinky_down = #False
EndIf
EndIf
EndProcedure
Procedure Inky_KI()
;Inky_Move
If inky_x <= -32
inky_x = 640
ElseIf inky_x >= 640
inky_x = -32
EndIf
If inky_left = #True
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
inky_x = inky_x - inky_speed
ElseIf inky_right = #True
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
inky_x = inky_x + inky_speed
ElseIf inky_up = #True
inky_left = #False : inky_right = #False : inky_up = #True : inky_down = #False
inky_y = inky_y - inky_speed
ElseIf inky_down = #True
inky_left = #False : inky_right = #False : inky_up = #False : inky_down = #True
inky_y = inky_y + inky_speed
EndIf
tx = Int(inky_x / 32)
ty = Int(inky_y / 32)
modx = inky_x % 32
mody = inky_y % 32
If tx = 0
tx = 1
ElseIf tx > 19
tx = 19
EndIf
ran = Int(Random(1))
If inky_x >= 32 And inky_x <= 640 And inky_y >= 32 And inky_y <= 640
If inky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
inky_left = #False : inky_right = #False : inky_up = #True : inky_down = #False
ElseIf inky_left = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
inky_left = #False : inky_right = #False : inky_up = #False : inky_down = #True
ElseIf inky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
inky_left = #False : inky_right = #False : inky_up = #True : inky_down = #False
ElseIf inky_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
inky_left = #False : inky_right = #False : inky_up = #False : inky_down = #True
ElseIf inky_left = 1 And modx = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
ElseIf inky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
inky_left = #False : inky_right = #False : inky_up = #True : inky_down = #False
ElseIf inky_right = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
inky_left = #False : inky_right = #False : inky_up = #False : inky_down = #True
ElseIf inky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
inky_left = #False : inky_right = #False : inky_up = #True : inky_down = #False
ElseIf inky_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
inky_left = #False : inky_right = #False : inky_up = #False : inky_down = #True
ElseIf inky_right = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
ElseIf inky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
ElseIf inky_up = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
ElseIf inky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
ElseIf inky_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
ElseIf inky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
ElseIf inky_down = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
ElseIf inky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
inky_left = #True : inky_right = #False : inky_up = #False : inky_down = #False
ElseIf inky_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
inky_left = #False : inky_right = #True : inky_up = #False : inky_down = #False
EndIf
EndIf
EndProcedure
Procedure Clyde_KI()
;Clyde_Move
If clyde_x <= -32
clyde_x = 640
ElseIf clyde_x >= 640
clyde_x = -32
EndIf
If clyde_left = #True
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
clyde_x = clyde_x - clyde_speed
ElseIf clyde_right = #True
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
clyde_x = clyde_x + clyde_speed
ElseIf clyde_up = #True
clyde_left = #False : clyde_right = #False : clyde_up = #True : clyde_down = #False
clyde_y = clyde_y - clyde_speed
ElseIf clyde_down = #True
clyde_left = #False : clyde_right = #False : clyde_up = #False : clyde_down = #True
clyde_y = clyde_y + clyde_speed
EndIf
tx = Int(clyde_x / 32)
ty = Int(clyde_y / 32)
modx = clyde_x % 32
mody = clyde_y % 32
If tx = 0
tx = 1
ElseIf tx > 19
tx = 19
EndIf
ran = Int(Random(1))
If clyde_x >= 32 And clyde_x <= 640 And clyde_y >= 32 And clyde_y <= 640
If clyde_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
clyde_left = #False : clyde_right = #False : clyde_up = #True : clyde_down = #False
ElseIf clyde_left = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
clyde_left = #False : clyde_right = #False : clyde_up = #False : clyde_down = #True
ElseIf clyde_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
clyde_left = #False : clyde_right = #False : clyde_up = #True : clyde_down = #False
ElseIf clyde_left = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
clyde_left = #False : clyde_right = #False : clyde_up = #False : clyde_down = #True
ElseIf clyde_left = 1 And modx = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
ElseIf clyde_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Level(tx,ty+1) = 1
clyde_left = #False : clyde_right = #False : clyde_up = #True : clyde_down = #False
ElseIf clyde_right = 1 And modx = 0 And Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1
clyde_left = #False : clyde_right = #False : clyde_up = #False : clyde_down = #True
ElseIf clyde_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 0
clyde_left = #False : clyde_right = #False : clyde_up = #True : clyde_down = #False
ElseIf clyde_right = 1 And modx = 0 And Not Level(tx,ty-1) = 1 And Not Level(tx,ty+1) = 1 And ran = 1
clyde_left = #False : clyde_right = #False : clyde_up = #False : clyde_down = #True
ElseIf clyde_right = 1 And modx = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
ElseIf clyde_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
ElseIf clyde_up = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
ElseIf clyde_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
ElseIf clyde_up = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
ElseIf clyde_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Level(tx+1,ty) = 1
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
ElseIf clyde_down = 1 And mody = 0 And Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
ElseIf clyde_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 0
clyde_left = #True : clyde_right = #False : clyde_up = #False : clyde_down = #False
ElseIf clyde_down = 1 And mody = 0 And Not Level(tx-1,ty) = 1 And Not Level(tx+1,ty) = 1 And ran = 1
clyde_left = #False : clyde_right = #True : clyde_up = #False : clyde_down = #False
EndIf
EndIf
EndProcedure
Procedure CreateLevel()
lev1.s = "1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#1#1#1#1#3#1#1#0#1#1#1#0#1#0#1#1#1#0#1#1#3#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#1#0#1#1#1#1#1#0#1#0#1#1#0#1#1#1#1#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#1#1#1#1#1#1#1#0#1#1#1#2#1#2#1#1#1#0#1#1#1#1#1#2#2#2#2#1#0#1#2#2#2#2#2#2#2#1#0#1#2#2#2#2#1#1#1#1#1#0#1#2#1#1#2#1#1#2#1#0#1#1#1#1#1#0#0#0#0#0#0#2#2#1#2#2#2#1#2#2#0#0#0#0#0#0#1#1#1#1#1#0#1#2#1#1#1#1#1#2#1#0#1#1#1#1#1#2#2#2#2#1#0#1#2#2#2#2#2#2#2#1#0#1#2#2#2#2#1#1#1#1#1#0#1#2#1#1#1#1#1#2#1#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#1#1#1#0#1#0#1#1#1#0#1#1#0#1#1#1#1#3#0#1#0#0#0#0#0#0#0#0#0#0#0#1#0#3#1#1#1#1#1#0#1#0#1#0#1#1#1#1#1#0#1#0#1#0#1#1#1#1#1#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#1#1#1#1#0#1#1#1#1#1#1#0#1#0#1#1#1#1#1#1#0#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#"
x = 0 : y = 0 : a = 0 : b = 0
For t = 1 To 442 Step 1
If StringField(lev1, t, "#") = "1"
DisplaySprite(#Mauer, x, y)
Level(a,b) = 1
ElseIf StringField(lev1, t, "#") = "0"
DisplaySprite(#PacDot, x, y)
Level(a,b) = 0
ElseIf StringField(lev1, t, "#") = "2"
Level(a,b) = 2
ElseIf StringField(lev1, t, "#") = "3"
DisplaySprite(#PacBigDot, x, y)
Level(a,b) = 3
EndIf
If a = 20
a = 0
b = b + 1
x = 0
y = y + 32
Else
a = a + 1
x = x + 32
EndIf
Next t
EndProcedure
Procedure DisplayLevel()
x = 0 : y = 0 : a = 0 : b = 0
For t = 1 To 442 Step 1
If Level(a,b) = 1
DisplaySprite(#Mauer, x, y)
ElseIf Level(a,b) = 0
DisplaySprite(#PacDot, x, y)
ElseIf Level(a,b) = 3
DisplaySprite(#PacBigDot, x, y)
EndIf
If a = 20
a = 0
b = b + 1
x = 0
y = y + 32
Else
a = a + 1
x = x + 32
EndIf
Next t
EndProcedure
Procedure RenderFrame()
Debug "FPS: "+Str(run2)
ClearScreen(RGB(0,0,0))
DisplayLevel()
DisplaySprite(#Blinky, blinky_x, blinky_y)
DisplaySprite(#Pinky, pinky_x, pinky_y)
DisplaySprite(#Inky, inky_x, inky_y)
DisplaySprite(#Clyde, clyde_x, clyde_y)
If move = #True
If return_stepping = 1
stepping = stepping - 1
ElseIf return_stepping = 0
stepping = stepping + 1
EndIf
If paci_x <= -32
paci_x = 672
ElseIf paci_x >= 672
paci_x = -32
EndIf
tx = Int(paci_x / 32)
ty = Int(paci_y / 32)
modx = paci_x % 32
mody = paci_y % 32
If tx < 1
tx = 1
ElseIf tx > 19
tx = 19
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left) And mody = 0 And Not Level(tx-1,ty) = 1
paci_left = #True : paci_right = #False : paci_up = #False : paci_down = #False
ElseIf KeyboardPushed(#PB_Key_Right) And mody = 0 And Not Level(tx+1,ty) = 1
paci_left = #False : paci_right = #True : paci_up = #False : paci_down = #False
ElseIf KeyboardPushed(#PB_Key_Up) And modx = 0 And Not Level(tx,ty-1) = 1
paci_left = #False : paci_right = #False : paci_up = #True : paci_down = #False
ElseIf KeyboardPushed(#PB_Key_Down) And modx = 0 And Not Level(tx,ty+1) = 1
paci_left = #False : paci_right = #False : paci_up = #False : paci_down = #True
EndIf
EndIf
If paci_left = #True
If Not (Level(tx-1,ty) = 1 And modx = 0)
paci_x = paci_x - paci_speed
EndIf
ElseIf paci_right = #True
If Not (Level(tx+1,ty) = 1 And modx = 0)
paci_x = paci_x + paci_speed
EndIf
ElseIf paci_up = #True
If Not (Level(tx,ty-1) = 1 And mody = 0)
paci_y = paci_y - paci_speed
EndIf
ElseIf paci_down = #True
If Not (Level(tx,ty+1) = 1 And mody = 0)
paci_y = paci_y + paci_speed
EndIf
EndIf
tx = Int(paci_x / 32)
ty = Int(paci_y / 32)
If tx >= 0 And tx <= 20 And ty >= 0 And ty <= 20
If Level(tx,ty) = 0
Level(tx,ty) = 2
ElseIf Level(tx,ty) = 3
Level(tx,ty) = 2
EndIf
EndIf
If paci_anim = #True
If stepping >= 0 And stepping < 5
If paci_left = #True
RotateSprite(#Paci_Offen, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Offen, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Offen, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Offen, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Offen, paci_x, paci_y)
return_stepping = 0
ElseIf stepping >= 5 And stepping <= 10
If paci_left = #True
RotateSprite(#Paci_Mitte1, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Mitte1, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Mitte1, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Mitte1, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Mitte1, paci_x, paci_y)
ElseIf stepping >= 10 And stepping < 15
If paci_left = #True
RotateSprite(#Paci_Mitte2, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Mitte2, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Mitte2, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Mitte2, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Mitte2, paci_x, paci_y)
ElseIf stepping >= 15 And stepping < 20
If paci_left = #True
RotateSprite(#Paci_Mitte3, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Mitte3, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Mitte3, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Mitte3, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Mitte3, paci_x, paci_y)
ElseIf stepping >= 20 And stepping < 25
If paci_left = #True
RotateSprite(#Paci_Zu, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Zu, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Zu, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Zu, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Zu, paci_x, paci_y)
ElseIf stepping >= 25
If paci_left = #True
RotateSprite(#Paci_Zu, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Zu, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Zu, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Zu, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Zu, paci_x, paci_y)
return_stepping = 1
ElseIf stepping < 0
If paci_left = #True
RotateSprite(#Paci_Offen, 180, #PB_Absolute)
ElseIf paci_right = #True
RotateSprite(#Paci_Offen, 0, #PB_Absolute)
ElseIf paci_up = #True
RotateSprite(#Paci_Offen, 270, #PB_Absolute)
ElseIf paci_down = #True
RotateSprite(#Paci_Offen, 90, #PB_Absolute)
EndIf
DisplaySprite(#Paci_Offen, paci_x, paci_y)
return_stepping = 0
EndIf
EndIf
Blinky_KI()
Pinky_KI()
Inky_KI()
Clyde_KI()
;KI_DoIt(blinky_x, blinky_y)
; blinky_return = KI_Move(blinky_x, blinky_y, 1)
; blinky_x = Val(StringField(blinky_return,1,"#"))
; blinky_y = Val(StringField(blinky_return,2,"#"))
;Debug blinky_x
;Debug blinky_y
EndIf
If paci_anim = #True
If SpriteCollision(#Paci_Offen,paci_x,paci_y,#Blinky,blinky_x,blinky_y) Or
SpriteCollision(#Paci_Mitte1,paci_x,paci_y,#Blinky,blinky_x,blinky_y) Or
SpriteCollision(#Paci_Mitte2,paci_x,paci_y,#Blinky,blinky_x,blinky_y) Or
SpriteCollision(#Paci_Mitte3,paci_x,paci_y,#Blinky,blinky_x,blinky_y) Or
SpriteCollision(#Paci_Mitte4,paci_x,paci_y,#Blinky,blinky_x,blinky_y) Or
SpriteCollision(#Paci_Zu,paci_x,paci_y,#Blinky,blinky_x,blinky_y)
paci_anim = #False
paci_left = #False : paci_right = #False : paci_up = #True : paci_down = #False
stepping = 0
DisplaySprite(#Paci_Offen, paci_x, paci_y)
;paci_lives = paci_lives - 1
paci_x = 64 : paci_y = 32
If paci_lives >= 0
move = #True
paci_anim = #True
EndIf
EndIf
EndIf
run = run + 1
ms2 = ElapsedMilliseconds()
If (ms2 - ms) >= 1000
ms = ElapsedMilliseconds()
run2 = run
run = 0
EndIf
FlipBuffers()
EndProcedure
Procedure Start()
SetFrameRate(30)
ms = ElapsedMilliseconds()
If CreateSprite(#Hintergrund, ScreenWidth(), ScreenHeight())
If StartDrawing(SpriteOutput(#Hintergrund))
Box(0,0,SpriteWidth(#Hintergrund),SpriteHeight(#Hintergrund),RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Mauer, 32, 32)
If StartDrawing(SpriteOutput(#Mauer))
Box(0,0,SpriteWidth(#Mauer),SpriteHeight(#Mauer),RGB(68, 120, 134))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Paci_Offen, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Paci_Offen))
Ellipse(16,16,SpriteWidth(#Paci_Offen)/2,SpriteHeight(#Paci_Offen)/2,RGB(255,255,0))
For k = -16 To 16 Step 1
Line(16,16,16,k,RGB(0,0,0))
Next k
StopDrawing()
EndIf
EndIf
; If CreateImage(#Paci_Offen, 32, 32, #PB_Sprite_AlphaBlending)
; If StartVectorDrawing(ImageVectorOutput(#Paci_Offen))
; AddPathArc(0, 0, 32, 32, 16)
; StrokePath(2)
; StopVectorDrawing()
; EndIf
; EndIf
If CreateSprite(#Paci_Mitte1, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Paci_Mitte1))
Ellipse(16,16,SpriteWidth(#Paci_Mitte1)/2,SpriteHeight(#Paci_Mitte1)/2,RGB(255,255,0))
For k = -12 To 12 Step 1
Line(16,16,16,k,RGB(0,0,0))
Next k
StopDrawing()
EndIf
EndIf
If CreateSprite(#Paci_Mitte2, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Paci_Mitte2))
Ellipse(16,16,SpriteWidth(#Paci_Mitte2)/2,SpriteHeight(#Paci_Mitte2)/2,RGB(255,255,0))
For k = -8 To 8 Step 1
Line(16,16,16,k,RGB(0,0,0))
Next k
StopDrawing()
EndIf
EndIf
If CreateSprite(#Paci_Mitte3, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Paci_Mitte3))
Ellipse(16,16,SpriteWidth(#Paci_Mitte3)/2,SpriteHeight(#Paci_Mitte3)/2,RGB(255,255,0))
For k = -4 To 4 Step 1
Line(16,16,16,k,RGB(0,0,0))
Next k
StopDrawing()
EndIf
EndIf
If CreateSprite(#Paci_Zu, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Paci_Zu))
Ellipse(16,16,SpriteWidth(#Paci_Zu)/2,SpriteHeight(#Paci_Zu)/2,RGB(255,255,0))
Line(16,16,16,1,RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Blinky, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Blinky))
Box(0,0,SpriteWidth(#Blinky),SpriteHeight(#Blinky),RGB(255,0,0))
Box(6,4,9,9,RGB(0,0,0))
Box(19,4,9,9,RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Pinky, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Pinky))
Box(0,0,SpriteWidth(#Pinky),SpriteHeight(#Pinky),RGB(237, 26, 133))
Box(6,4,9,9,RGB(0,0,0))
Box(19,4,9,9,RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Inky, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Inky))
Box(0,0,SpriteWidth(#Inky),SpriteHeight(#Inky),RGB(104, 150, 206))
Box(6,4,9,9,RGB(0,0,0))
Box(19,4,9,9,RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#Clyde, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#Clyde))
Box(0,0,SpriteWidth(#Clyde),SpriteHeight(#Clyde),RGB(245, 100, 43))
Box(6,4,9,9,RGB(0,0,0))
Box(19,4,9,9,RGB(0,0,0))
StopDrawing()
EndIf
EndIf
If CreateSprite(#PacDot, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#PacDot))
Box(12,12,8,8,RGB(255, 239, 28))
StopDrawing()
EndIf
EndIf
If CreateSprite(#PacBigDot, 32, 32, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(#PacBigDot))
Circle(16,16,12,RGB(255, 191, 143))
StopDrawing()
EndIf
EndIf
CreateLevel()
BindEvent(#PB_Event_RenderFrame, @RenderFrame())
FlipBuffers()
EndProcedure
OpenScreen(672,672,32,"Pacman")
Start()