To learn to program on my first computer, a HP model 85, I create a little game 45 years ago. I want to write it with PB, but I found a difference between PB 6,20 on Imac Sequoia and PB 6.20 on MacBook M1 pb 6.20
On each case , it is the same code share via google drive.
The game compile on Imac, everything is correct

The game compile on M1 , graphic is divided by 2

The code
To control player 1 use arrows right and left, and player2 key "w" and key "x"
Code: Select all
EnableExplicit ;n'accepte que les variables déclarées
Global LargBox = 10, HautBox = 10,X1,Y1,X2,Y2,largeur=400,hauteur=400,delta = 20
Global dir1, dir2, coul1, coul2, h1,h2, v1,v2, fin
Debug largeur/delta
Global Dim tab(largeur/delta,hauteur/delta)
Global max = (largeur/delta)-1
Debug "max" + max
Procedure serpent1Aff()
;Debug "1 "+x1+" "+y1
If X1 > largeur/delta Or Y1 > hauteur/delta Or x1 < 0 Or y1 < 0
SetGadgetColor(14, #PB_Gadget_FrontColor , coul2)
SetGadgetText(14,"Joueur 2 gagné")
fin = #True
ElseIf tab(x1,y1) > 0
SetGadgetColor(14, #PB_Gadget_FrontColor , coul2)
SetGadgetText(14,"Joueur 2 gagné")
fin = #True
Else
tab(x1,y1) = 1
StartDrawing(CanvasOutput(10))
Box(X1*delta, Y1*delta,delta, delta , coul1)
StopDrawing()
EndIf
EndProcedure
Procedure serpent1()
; direction 1>h, 2>b, 3>d, 4>g
Debug "dir1 1 "+dir1
Debug "S1 x1:"+x1+" y1:"+y1 +" h1:"+h1+" v1:"+v1
Debug ">>>>>>>>>>>>>>>>>"+tab(x1,y1)
Select dir1 ; changement de direction si case non libre
Case 1 ;^
If tab(X1,y1-1) > 0 And tab(x1+1,Y1) > 0; coin
dir1 = 4
ElseIf tab(X1,y1-1) > 0 And tab(x1-1,Y1) > 0 ; coin
dir1 = 3
ElseIf tab(x1,y1-1) > 0
dir1=Random(4,3)
EndIf
Case 2 ;v
If tab(X1,y1+1) > 0 And tab(x1-1,Y1) > 0; coin
dir1 = 3
ElseIf tab(X1+1,y1) > 0 And tab(x1,Y1+1) > 0 ; coin
dir1 = 4
ElseIf tab(x1,y1+1) > 0
dir1=Random(4,3)
EndIf
Case 3 ;>
If tab(X1,y1-1) > 0 And tab(x1+1,Y1) > 0; coin
dir1 = 2
ElseIf tab(X1+1,y1) > 0 And tab(x1,Y1+1) > 0 ; coin
dir1 = 1
ElseIf tab(x1+1,y1) > 0
dir1=Random(2,1)
EndIf
Case 4 ;<
If tab(X1-1,y1) > 0 And tab(x1,Y1-1) > 0; coin
dir1 = 2
ElseIf tab(X1-1,y1) > 0 And tab(x1,Y1+1) > 0 ; coin
dir1 = 1
ElseIf tab(x1-1,y1) > 0
dir1=Random(2,1)
EndIf
EndSelect
Select dir1
Case 1 ;^
Y1 = y1 - 1 ; haut
Case 2 ;v
y1 = y1 + 1
Case 3 ;>
x1 = x1 + 1
Case 4 ;<
X1 = X1 - 1
EndSelect
serpent1Aff()
EndProcedure
Procedure serpent2Aff()
;Debug "2 "+x2+" "+y2
If X2 > largeur/delta Or Y2 > hauteur/delta Or x2 < 0 Or y2 < 0
SetGadgetColor(14, #PB_Gadget_FrontColor , coul1)
SetGadgetText(14,"Joueur 1 gagné")
fin = #True
ElseIf tab(x2,y2) >0
SetGadgetColor(14, #PB_Gadget_FrontColor , coul1)
SetGadgetText(14,"Joueur 1 gagné")
fin = #True
Else
tab(x2,y2) = 2
StartDrawing(CanvasOutput(10))
Box(X2*delta, Y2*delta,delta, delta , coul2)
StopDrawing()
EndIf
EndProcedure
Procedure serpent2()
; direction 1>h, 2>b, 3>d, 4>g
Debug "2-1 x2:"+x2+" y2:"+y2+" d2"+dir2
Select dir2 ; changement de direction si case non libre
Case 1 ;^
If tab(X2,y2-1) > 0 And tab(x2+1,y2) > 0; coin
dir2 = 4
ElseIf tab(x2,y2-1) > 0 And tab(x2-1,y2) > 0 ; coin
dir2 = 3
ElseIf tab(x2,y2-1) > 0
dir2=Random(4,3)
EndIf
Case 2 ;v
If tab(x2,y2+1) > 0 And tab(x2-1,y2) > 0; coin
dir2 = 3
ElseIf tab(x2+1,y2) > 0 And tab(x2,y2+1) > 0 ; coin
dir2 = 4
ElseIf tab(x2,y2+1) > 0
dir2=Random(4,3)
EndIf
Case 3 ;>
If tab(x2,y2-1) > 0 And tab(x2+1,y2) > 0; coin
dir2 = 2
ElseIf tab(x2+1,y2) > 0 And tab(x2,y2+1) > 0 ; coin
dir2 = 1
ElseIf tab(x2+1,y2) > 0
dir2=Random(2,1)
EndIf
Case 4 ;<
If tab(x2-1,y2) > 0 And tab(x2,y2-1) > 0; coin
dir2 = 2
ElseIf tab(x2-1,y2) > 0 And tab(x2,y2+1) > 0 ; coin
dir2 = 1
ElseIf tab(x2-1,y2) > 0
dir2=Random(2,1)
EndIf
EndSelect
Debug "2-2 x:"+x2+" y"+y2+" d"+dir2
Select dir2
Case 1
Y2 = y2 - 1
Case 2
y2 = y2 + 1
Case 3
x2 = x2 + 1
Case 4
X2 = X2 - 1
EndSelect
serpent2Aff()
EndProcedure
Procedure EffaceTab()
Define i,j
For i = 1 To max-1
For j = 1 To max-1
tab (i,j) = 0
Next
Next
EndProcedure
Procedure limite()
Define i,j
For i = 0 To max
StartDrawing(CanvasOutput(10))
tab (max,i) = 2
Box(max*delta, i*delta,delta, delta , $BDBDBD)
tab (0,i) = 2
Box(0, i*delta,delta, delta , $BDBDBD)
tab (i,max) = 2
Box(i*delta, max*delta,delta, delta , $BDBDBD)
tab (i,0) = 2
Box(i*delta, 0*delta,delta, delta , $BDBDBD)
StopDrawing()
Next
EndProcedure
Procedure PrepareCanvas()
StartDrawing(CanvasOutput(10))
Box(delta, delta,largeur-2*delta, hauteur-2*delta , $ffffff)
StopDrawing()
coul1 = RGB(Random(255),Random(255),Random(255))
dir1 = Random(4,1)
X1 = Random(largeur/delta-5,5)
Y1 = Random(hauteur/delta-5,5)
Debug "1: "+x1+"/"+y1+" "+dir1+" "+coul1
serpent1aff()
coul2 = RGB(Random(255),Random(255),Random(255))
dir2 = Random(4,1)
X2 = Random(largeur/delta-5,5)
Y2 = Random(hauteur/delta-5,5)
Debug "2: "+x2+"/"+y2+ " "+dir2+" "+coul2
serpent2aff()
EndProcedure
Procedure bordure()
EndProcedure
If OpenWindow(0, 0, 0, largeur, hauteur+50, "Le mur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Define Event, gadget, type,D, EventMenu, i
AddWindowTimer(0, 123, 200)
AddKeyboardShortcut(0, #PB_Key_Right, 31)
AddKeyboardShortcut(0, #PB_Key_Left, 33)
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 34)
AddKeyboardShortcut(0, #PB_Key_Up, 32)
AddKeyboardShortcut(0, #PB_Key_X, 35) ;w sepent 2 gauche
AddKeyboardShortcut(0, #PB_Key_W, 36) ;x sepent 2 droite
AddKeyboardShortcut(0, #PB_Key_Space, 37)
TextGadget(14, 10, hauteur+20,150,20,"XXXXXXXXXX")
ButtonGadget(15, largeur - 110, hauteur+20 , 100, 20, "NOUVEAU")
CanvasGadget(10, 0, 0, largeur, hauteur, #PB_Canvas_Container)
;limite
For i = 0 To max
StartDrawing(CanvasOutput(10))
tab (max,i) = 2
Box(max*delta, i*delta,delta, delta , $BDBDBD)
tab (0,i) = 2
Box(0, i*delta,delta, delta , $BDBDBD)
tab (i,max) = 2
Box(i*delta, max*delta,delta, delta , $BDBDBD)
tab (i,0) = 2
Box(i*delta, 0*delta,delta, delta , $BDBDBD)
StopDrawing()
Next
coul1 = RGB(Random(255),Random(255),Random(255))
dir1 = Random(4,1)
X1 = Random(largeur/delta-5,5)
Y1 = Random(hauteur/delta-5,5)
Debug "1: "+x1+"/"+y1+" "+dir1+" "+coul1
serpent1aff()
coul2 = RGB(Random(255),Random(255),Random(255))
dir2 = Random(4,1)
X2 = Random(largeur/delta-5,5)
Y2 = Random(hauteur/delta-5,5)
Debug "2: "+x2+"/"+y2+ " "+dir2+" "+coul2
serpent2aff()
CloseGadgetList()
Repeat
Event = WaitWindowEvent()
gadget = EventGadget()
type = EventType()
Select Event
Case #PB_Event_Menu
EventMenu = EventMenu()
Select EventMenu
Case 31
Debug "droite"
Select dir1
Case 1 ;^
dir1 = 3
Case 2 ;v
dir1 = 4
Case 3 ;>
dir1 = 2
Case 4 ;<
dir1 = 1
EndSelect
Case 33 ;gauche
Debug "gauche"
Select dir1
Case 1 ;^
dir1 = 4
Case 2 ;v
dir1 = 3
Case 3 ;>
dir1 = 1
Case 4 ;<
dir1 = 2
EndSelect
Case 36 ;w <
Debug "2 gauche"
Select dir2
Case 1 ;^
dir2 = 4
Case 2 ;v
dir2 = 3
Case 3 ;>
dir2 = 1
Case 4 ;<
dir2 = 2
EndSelect
Case 35 ;x >
Debug "2 droite"
Select dir2
Case 1 ;^
dir2 = 3
Case 2 ;v
dir2 = 4
Case 3 ;>
dir2 = 2
Case 4 ;<
dir2 = 1
EndSelect
Case 34
Debug "fin"
fin = #True
Case 37
serpent1()
EndSelect
Case #PB_Event_Timer
If EventTimer() = 123
If fin = 0
serpent1()
serpent2()
EndIf
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case 15
PrepareCanvas()
EffaceTab()
fin =#False
Case 1
CloseWindow(0)
End
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf