J'arrivais pas à dormir....
Publié : mar. 08/juin/2004 6:46
... alors je me suis amusé à faire ça!
C'est une espèce de jeu de squash, (mais avec un seul joueur), comme on en voyait sur les vielles consoles (type atari ou phillips) à la fin des années 70. Ca nous rajeunit pas !!!
C'est pas fini, et ça le sera probablement jamais, j'ai fait ça pour passer le temps. Il n'y a pas les scores, il n'y a qu'un joueur, (il en faudrait 2, pour bien faire), les balles sont illimitées, et il n'y a pas non plus les bruitages (plik...plok...plok)
Ca, c'était de l'ambiance
Et pour couronner le tout, il y a un bug, de temps en temps, quand la balle tape juste au bout de la raquette, elle la suit au lieu de rebondir, et c'est codé comme un goret.
Bref... Touches haut et bas pour la raquette, espace pour lancer la balle.
Chris 
C'est une espèce de jeu de squash, (mais avec un seul joueur), comme on en voyait sur les vielles consoles (type atari ou phillips) à la fin des années 70. Ca nous rajeunit pas !!!

C'est pas fini, et ça le sera probablement jamais, j'ai fait ça pour passer le temps. Il n'y a pas les scores, il n'y a qu'un joueur, (il en faudrait 2, pour bien faire), les balles sont illimitées, et il n'y a pas non plus les bruitages (plik...plok...plok)
Ca, c'était de l'ambiance

Et pour couronner le tout, il y a un bug, de temps en temps, quand la balle tape juste au bout de la raquette, elle la suit au lieu de rebondir, et c'est codé comme un goret.
Bref... Touches haut et bas pour la raquette, espace pour lancer la balle.
Code : Tout sélectionner
#Window = 0
#Width = 975 ; Les dimensions d'un terrain de squash
#Height = 640 ; enfin, d'après Internet...!
#Timer = 0
Enumeration
#balle
#Raquette
EndEnumeration
Global SensX, SensY
Procedure Sprites()
If CreateSprite(#balle,24,24,0) ; Sprite Balle
StartDrawing(SpriteOutput(#balle))
Circle(12,12,12,RGB($FF,$FF,$FF))
StopDrawing()
EndIf
If CreateSprite(#Raquette,16,64,0) ; Sprite Raquette
StartDrawing(SpriteOutput(#Raquette))
Box(0,0,16,64,RGB($FF,$FF,$FF))
StopDrawing()
EndIf
EndProcedure
Procedure TraceFond()
StartDrawing(ScreenOutput())
Box(544,0,5,640,RGB($FF,$FF,$FF)) ; Ligne de service
Box(549,160,165,5,RGB($FF,$FF,$FF)) ; Carre de service haut
Box(709,0,5,160,RGB($FF,$FF,$FF))
Box(549,475,165,5,RGB($FF,$FF,$FF)) ; Carre de service bas
Box(709,480,5,160,RGB($FF,$FF,$FF))
Box(549,318,426,5,RGB($FF,$FF,$FF))
StopDrawing()
EndProcedure
;- Initialisation de DirectX
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#Window) : End
EndIf
;- Ouverture de la fenêtre et de l'écran
hwnd = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "PB-SQUASH")
OpenWindowedScreen(hwnd, 0, 0, #Width, #Height, 0, 0, 0)
Sprites() ; Affiche les sprites
X_Raquette = #Width - 30
Y_Raquette = #Height/2 - SpriteHeight(#Raquette)/2
Dep = Random(1)+1 ; Position de départ aléatoire
;- Début de la boucle
Repeat
ClearScreen(0, 0, 0) : ExamineKeyboard()
TraceFond() ; Trace la surface de jeu
If x > X_Raquette Or x > #Width : Start = 0 ; La balle dépasse la raquette
Dep = Random(1)+1 ; Position de départ
EndIf
; La balle tape sur le mur du fond.
; Si elle tape au milieu, il faut la dévier
If x <= 0 : SensX = -SensX : EndIf
; La balle tape sur les murs de coté
If y +24 >= #Height Or y <= 0 : SensY = -SensY : EndIf
;La balle touche la raquette
If SpriteCollision(#balle,x,y,#Raquette,X_Raquette,Y_Raquette)
;Pour faire des lifts en haut ou en bas
If KeyboardPushed(#PB_Key_Up)
lift = -3
ElseIf KeyboardPushed(#PB_Key_Down)
lift = 3
Else
lift = 0
EndIf
SensY+lift
SensX = -SensX ; Renvoie la balle
Coup + 1 ; Ajoute 1 point
EndIf
;SetWindowTitle(#Window, Str(Coup)); Pour contrôler le score, en attendant
If Start = 1 ; On joue, la balle se déplace
x + SensX : y + SensY
ElseIf Start = 0 ; La balle est arrêtée
If Dep = 1 ; Point de départ en haut
x = 620
y = 70
ElseIf Dep = 2 ; Point de départ en bas
x = 620
y = 550
EndIf
SensX = 9 : SensX = -SensX ; Inverse le sens pour que la balle parte à gauche
EndIf
; Affiche la raquette et la balle
DisplaySprite(#Raquette,X_Raquette, Y_Raquette)
DisplayTransparentSprite(#balle,x,y)
FlipBuffers()
; Raquette vers le haut
If KeyboardPushed(#PB_Key_Up)
If Y_Raquette > 0 : Y_Raquette - 10 : EndIf
EndIf
;Raquette vers le bas
If KeyboardPushed(#PB_Key_Down)
If Y_Raquette + SpriteHeight(#Raquette) < #Height : Y_Raquette + 10 : EndIf
EndIf
;Lance la balle
If KeyboardReleased(#PB_Key_Space)
SensY = Random(3)+ 2 ; Direction Y aléatoire
If Dep = 2 ; Si la balle part du bas
SensY = -SensY ; l'envoie vers le haut
EndIf
Start = 1 ; Go !!!!
EndIf
If KeyboardPushed(#PB_Key_Escape) : quit = 1 : EndIf
While WindowEvent() : Wend
Until quit = 1
