(362 points)
Code : Tout sélectionner
Structure main
w.d
h.d
xM.d
yM.d
EndStructure
Define *this.main = AllocateMemory(SizeOf(main) )
recomp = 1
With *this
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
\w = DesktopWidth(0)
\h = DesktopHeight(0)
\xM = \w - 1
\yM = \h - 1
OpenScreen(\w, \h, 32, "")
Dim s(1)
s(0) = CreateSprite(#PB_Any, 80, 50, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(s(0) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, 80, 50, RGBA(255, 0, 0, 255) )
Box(1, 1, 78, 48, RGBA(0, 0, 255, 255) )
Plot(40, 25, RGBA(255, 255, 255, 255) )
StopDrawing()
Define.d x0, y0, x1, y1, x2, y2, x3, y3
Define.d xMin, yMin, xMax, yMax
xMin = 0.0
yMin = 0.0
xMax = 1.0
yMax = 1.0
x0 = xMin
y0 = yMin
x1 = xMax
y1 = yMin
x2 = xMax
y2 = yMax
x3 = xMin
y3 = yMax
mode | 1
dir = 0
x = 39
y = 25
wt = 200
Dim x(3999)
Dim y(3999)
x(avant) = 39
y(avant) = 25
foodX = 40
foodY = 25
Dim kb(255)
Dim k(5, 1)
score =-1
Repeat
Delay(16)
ExamineKeyboard()
ExamineMouse()
ClearScreen(RGB(0, 0, 0) )
If KeyboardReleased(#PB_Key_Space): mode ! 1: EndIf
If mode
For i = 0 To 5
k(i, 1) = k(i, 0)
Next
k(0, 0) = KeyboardPushed(#PB_Key_Up)
k(1, 0) = KeyboardPushed(#PB_Key_Down)
k(2, 0) = KeyboardPushed(#PB_Key_Left)
k(3, 0) = KeyboardPushed(#PB_Key_Right)
k(4, 0) = KeyboardPushed(#PB_Key_PageUp)
k(5, 0) = KeyboardPushed(#PB_Key_PageDown)
For i = 0 To 5
If k(i, 0) And Not k(i, 1)
kb(kbi) = 1 << i
kbi + 1
kbi % 256
kbL + 1
EndIf
Next
clk = ElapsedMilliseconds()
If clk => forward
If kbL > 0
kbL - 1
kdir = kb(kbo)
kbo + 1
kbo % 256
If kdir & 1 And (dir & 4 = 0): dir = 4: EndIf
If kdir & 2 And (dir & 4 = 0): dir = 12: EndIf
If kdir & 4 And (dir & 4 = 4): dir = 8: EndIf
If kdir & 8 And (dir & 4 = 4): dir = 0: EndIf
If kdir & 16: dir + 4: dir & 15: EndIf
If kdir & 32: dir - 4: dir & 15: EndIf
EndIf
forward = clk + wt
Select dir
Case 0: x + 1
Case 4: y - 1
Case 8: x - 1
Case 12: y + 1
EndSelect
avant + 1
avant % 4000
x(avant) = x
y(avant) = y
StartDrawing(SpriteOutput(s(0) ) )
c = Point(x, y)
If c <> RGB(0, 0, 255)
If c <> RGB(255, 255, 255)
mode = 0
Else
level + 1
allonge + recomp
If level < 64
If (level & %11) = 0
recomp + 1
EndIf
Else
recomp = 2
EndIf
score + recomp
If level >= 3
appears + 16
If appears > 255
appears = 255
EndIf
EndIf
If wt > 70
wt - 1
EndIf
Repeat
foodX = Random(79)
foodY = Random(49)
Until Point(foodX, foodY) = RGB(0, 0, 255)
Plot(foodX, foodY, RGB(255, 255, 255) )
EndIf
EndIf
If allonge
allonge - 1
Else
Plot(x(arriere), y(arriere), RGB(0, 0, 255) )
arriere + 1
arriere % 4000
EndIf
Plot(x, y, RGB(255, 255, 0) )
Plot(x, y, RGB(255, 255, 0) )
StopDrawing()
s(1) = CopySprite(s(0), #PB_Any, #PB_Sprite_AlphaBlending)
EndIf
TransformSprite(s(0), x0 * \xM, y0 * \yM, x1 * \xM, y1 * \yM, x2 * \xM, y2 * \yM, x3 * \xM, y3 * \yM)
TransformSprite(s(1), x0 * \xM, y0 * \yM, x1 * \xM, y1 * \yM, x2 * \xM, y2 * \yM, x3 * \xM, y3 * \yM)
SpriteQuality(0)
DisplayTransparentSprite(s(0), 0, 0, 255 - appears)
SpriteQuality(#PB_Sprite_BilinearFiltering)
DisplayTransparentSprite(s(1), 0, 0, appears)
EndIf
StartDrawing(ScreenOutput() )
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0, 0, "SCORE : " + Str(score), RGB(255, 255, 255) )
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Right)
EndWith