Die Regeln sind die gleichen wie hier
außer, dass Befehle wie RunProgram(),WinExec_(),CreateProcess_(),ShellExecute_(),ShellExecuteEx_(),... nicht erlaubt sind.
1693
Code: Alles auswählen
Structure Player
x.l
y.l
dir.l
EndStructure
Procedure Check(Result)
If Result=0
MessageRequester("ERROR","Can't init screen!",#MB_ICONERROR)
End
EndIf
ProcedureReturn Result
EndProcedure
Check(InitSprite())
Check(InitKeyboard())
hWnd=Check(OpenWindow(1,0,0,640,480,"Snake",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget))
Check(CreateGadgetList(hWnd))
Check(OpenWindowedScreen(hWnd,0,0,640,480,0,0,0))
SetFrameRate(30)
RandomSeed(6)
For count=0 To 200
DisplayRGBFilter(Random(640),Random(480),10,10,Random(128)+127,Random(128)+127,Random(128)+127)
Next
P1.Player
P1\x=160
P1\y=240
P1\dir=1
P2.Player
P2\x=480
P2\y=240
P2\dir=2
Repeat
Select P1\dir
Case 1
P1\y-1
Case 2
P1\y+1
Case 3
P1\x-1
Case 4
P1\x+1
EndSelect
Select P2\dir
Case 1
P2\y-1
Case 2
P2\y+1
Case 3
P2\x-1
Case 4
P2\x+1
EndSelect
If P1\x<0 Or P1\x>639 Or P1\y<0 Or P1\y>479:Loser=1:EndIf
If P2\x<0 Or P2\x>639 Or P2\y<0 Or P2\y>479:Loser=2:EndIf
StartDrawing(ScreenOutput())
If Loser=0
If Point(P1\x,P1\y)<>0:Loser=1:EndIf
If Point(P2\x,P2\y)<>0:Loser=2:EndIf
Plot(P1\x,P1\y,#Yellow)
Plot(P2\x,P2\y,#Red)
If Point(P2\x+1,P2\y) And P2\dir=4:P2\dir=1:EndIf
If Point(P2\x-1,P2\y) And P2\dir=3:P2\dir=2:EndIf
If Point(P2\x,P2\y-1) And P2\dir=1:P2\dir=3:EndIf
If Point(P2\x,P2\y+1) And P2\dir=2:P2\dir=4:EndIf
EndIf
StopDrawing()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up):P1\dir=1:EndIf
If KeyboardPushed(#PB_Key_Down):P1\dir=2:EndIf
If KeyboardPushed(#PB_Key_Left):P1\dir=3:EndIf
If KeyboardPushed(#PB_Key_Right):P1\dir=4:EndIf
FlipBuffers()
If Loser
Select Loser
Case 1
MessageRequester("Info","Der Computer hat gewonnen.",#MB_ICONINFORMATION)
Case 2
MessageRequester("Info","Sie haben gewonnen.",#MB_ICONINFORMATION)
EndSelect
End
EndIf
Until WindowEvent()=#PB_Event_CloseWindow