Code : Tout sélectionner
; Auteur : Cederavic
; Version PB : 3.93
; Date : 12/03/05
; Description : un casse brique basic commenté
; Initialisation de DirectX
If InitSprite() = 0
; Si l'initialisation echoue, on ferme
MessageRequester("Casse Brique", "Impossible d'initialiser DirectX", 0)
End
EndIf
; déclaration des procédures
Declare InitBox()
; Position de la raquette
Player.POINT
; Position de la balle
BallPos.POINT
; Direction de la balle
BallDir.POINT
; Position du curseur
Cursor.POINT
; liste des briques
Dim BoxList(10, 15)
; Ouverture de la fenetre principale
If OpenWindow(1, 0, 0, 800, 617, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Casse Brique")
; Création du menu
If CreateMenu(1, WindowID())
MenuTitle("Fichier")
MenuItem(1, "Nouvelle partie")
MenuItem(2, "Quitter")
Else
;Si la creation du menu echoue, on ferme
MessageRequester("Casse Brique", "Impossible de créer le menu", 0)
End
EndIf
; Ouverture de l'ecran
If OpenWindowedScreen(WindowID(), 0, 0, 800, 600, 0, 0, 0) = 0
; Si l'ouverture de l'écran echoue, on ferme
MessageRequester("Casse Brique", "Impossible d'ouvrir l'écran", 0)
End
EndIf
; Création des sprites
CreateSprite(0, 80, 10) ; Le joueur
StartDrawing(SpriteOutput(0))
DrawingMode(0)
Box(0, 0, 80, 10, RGB(40, 255, 80))
DrawingMode(4)
Box(0, 0, 80, 10, RGB(32, 32, 32))
StopDrawing()
CreateSprite(1, 20, 20) ; La balle
StartDrawing(SpriteOutput(1))
DrawingMode(0)
Circle(10, 10, 10, RGB(160, 160, 40))
DrawingMode(4)
Circle(10, 10, 10, RGB(32, 32, 32))
StopDrawing()
CreateSprite(2, 80, 20) ; Une brique
StartDrawing(SpriteOutput(2))
DrawingMode(0)
Box(1, 1, 78, 18, RGB(255, 80, 40))
DrawingMode(4)
Box(1, 1, 78, 18, RGB(32, 32, 32))
StopDrawing()
; Positionement de la balle
BallPos\x = 400
BallPos\y = 500
BallDir\y = 1
; Boucle principale
Repeat
; Partie du code pour la fenetre
wEvent = WindowEvent()
If wEvent
Select wEvent
; L'utilisateur choisi un menu
Case #PB_Event_Menu
Select EventMenuID()
; Menu Nouvelle partie
Case 1
; Initialisation des briques
InitBox()
Play = #True
; Positionement de la balle
BallPos\x = 400
BallPos\y = 500
BallDir\y = 1
; Menu Quitter
Case 2
Quit = #True
EndSelect
; L'utilisateur ferme la fenetre
Case #WM_Close
Quit = #True
EndSelect
EndIf
; Partie du code pour le windowedscreen
; Récuperation de la position du curseur
GetCursorPos_(@Cursor)
; Positionnement du joueur
Player\x = Cursor\x - WindowX()
; si le joueur sort de l'écran, on le repositionne
If Player\x < 40 : Player\x = 40 : EndIf
If Player\x > 760 : Player\x = 760 : EndIf
; Gestion de la balle
; Deplacement suivant la direction si la partie est lancée
If Play = #True
If BallDir\x = 0
BallPos\x + 2
Else
BallPos\x - 2
EndIf
If BallDir\y = 0
BallPos\y + 2
Else
BallPos\y - 2
EndIf
EndIf
; Collision avec les bords de l'ecran
If BallPos\x < 11
BallPos\x = 11
BallDir\x = 0
EndIf
If BallPos\x > 795
BallPos\x = 795
BallDir\x = 1
EndIf
If BallPos\y < 11
BallPos\y = 11
BallDir\y = 0
EndIf
If BallPos\y > 595
Play = #False
EndIf
; Collision avec le joueur
If SpritePixelCollision(1, BallPos\x - 10, BallPos\y - 10, 0, Player\x - 40, 590)
BallDir\y = 1
EndIf
ClearScreen(80, 120, 255)
Win = #True
; Affichage des briques
For x = 0 To 9
For y = 0 To 15
; Collision avec la brique si elle existe
If BoxList(x, y) = 1
If SpritePixelCollision(1, BallPos\x - 10, BallPos\y - 10, 2, x * 80, y * 20)
If BallDir\y = 0
If BallPos\x > x * 80 + 80
BallDir\x = 0
ElseIf BallPos\x < x * 80
BallDir\x = 1
Else
BallDir\y = 1
EndIf
BoxList(x, y) = 0
ElseIf BallDir\y = 1
If BallPos\x > x * 80 + 80
BallDir\x = 0
ElseIf BallPos\x < x * 80
BallDir\x = 1
Else
BallDir\y = 0
EndIf
BoxList(x, y) = 0
EndIf
EndIf
EndIf
; si la brique existe on l'affiche
If BoxList(x, y) = 1
Win = #False
DisplayTransparentSprite(2, x * 80, y * 20)
EndIf
Next
Next
; Si win = #True c'est que toutes les briques sont detruite
If Win = #True
Play = #False
EndIf
; Affichage du joueur
DisplayTransparentSprite(0, Player\x - 40, 590)
; Affichage de la balle
DisplayTransparentSprite(1, BallPos\x - 10, BallPos\y - 10)
FlipBuffers()
Until Quit = #True
; Si l'ouverture de la fenetre principale echoue, on ferme
Else
MessageRequester("Casse Brique", "Impossible d'ouvrir la fenetre principale", 0)
End
EndIf
; Fermeture du programme
End
; Initialisation des briques
Procedure InitBox()
For x = 0 To 10
For y = 0 To 15
BoxList(x, y) = Random(1)
Next
Next
EndProcedure