Début d'un casseBrique

Programmation avancée de jeux en PureBasic
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Début d'un casseBrique

Message par Tonio »

Bonjour
j'ai commencer un Casse Brique
je voudrais faire en sorte que ma balle soit collée sur la raquette et si on appuie sur le bouron gauche de la souris on lance la balle
Comment je peux faire ça ? merci

Code : Tout sélectionner

;------ Break Out ------
;------ PureBasic 5.60, 64 bits  --
;--- Initilisation :
EnableExplicit

If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse() = 0
      MessageRequester("Erreur", "Impossible d'initialiser le jeux  ")
      End
EndIf


;--- Constantes
Enumeration Windows
  #Main_Game
EndEnumeration

Enumeration Game
  #Spr_pad
  #Spr_balle
 EndEnumeration
 
 ;--- Structure pour la raquette(pad)
 Structure Pad
   padX.i
 EndStructure   

 ;--- Structure pour la balle 
 Structure ball
   ballX.i
   ballY.i
   Speed.i
 EndStructure  
 
 
 ;--- Variables 
 Global Raquette.Pad
 Global Balle.ball
 Global  Largeur = 800,Hauteur = 600, Event,MouseX,balleColle = #true 

 
 
 ;--- Fenetre Jeux 
OpenWindow(#Main_Game, 0, 0, Largeur, Hauteur,"", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Game), 0, 0, Largeur, Hauteur)
SetWindowTitle(#Main_Game,"Break Out" +"                          ESC pour quitter le jeu  ")

;---Création de la raquette 
CreateSprite(#Spr_pad,200,16)
StartDrawing(SpriteOutput(#Spr_pad))
Box(0, 0, 200,16, RGB(0, 128, 192))
StopDrawing()

;---Création de la balle 
CreateSprite(#Spr_balle,32,32)
StartDrawing(SpriteOutput(#Spr_balle))
Circle(10,10,10,RGB(255, 255, 0))
StopDrawing()

balle\ballX = 350
balle\ballY = 560 

RGB(255, 255, 0)


;--- Boucle du jeux 

Repeat 
  Repeat
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event=0
  ClearScreen(RGB(0, 0, 0))
  
  ;--- Affichage de la raquette 
  DisplayTransparentSprite(#Spr_pad,Raquette\padX,Hauteur-16)
  ;---Affichage de la balle
  DisplayTransparentSprite(#Spr_balle,Balle\ballX,Balle\ballY)
  MouseX = MouseX()
  ExamineMouse()
  ;--Deplcament de la raquette avec la souris 
  If MouseX<=Largeur-200
Raquette\padX=MouseX
Else
Raquette\padX=Largeur-200
EndIf


  
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Début d'un casseBrique

Message par falsam »

Presque tout est dans ton code.

■ Si pas clique gauche de la souris
=> La balle suit la raquette : balle\ballX = Raquette\padX

■ SI Clique gauche de la souris
=> la balle est relachée : balleColle = #False
=> Initialisation de la vitesse verticale de balle : balle\Speed = -5

■ Si la balle n'est plus collée
==> La balle est en mouvement

■ Code

Code : Tout sélectionner

;------ Break Out ------
;------ PureBasic 5.60, 64 bits  --
;--- Initilisation :
EnableExplicit

If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser le jeux  ")
  End
EndIf


;--- Constantes
Enumeration Windows
  #Main_Game
EndEnumeration

Enumeration Game
  #Spr_pad
  #Spr_balle
EndEnumeration

;--- Structure pour la raquette(pad)
Structure Pad
  padX.i
EndStructure   

;--- Structure pour la balle 
Structure ball
  ballX.i
  ballY.i
  Speed.i
EndStructure  


;--- Variables 
Global Raquette.Pad
Global Balle.ball
Global  Largeur = 800,Hauteur = 600, Event,MouseX, balleColle = #True 

;--- Fenetre Jeux 
OpenWindow(#Main_Game, 0, 0, Largeur, Hauteur,"", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Game), 0, 0, Largeur, Hauteur)
SetWindowTitle(#Main_Game,"Break Out" +"                          ESC pour quitter le jeu  ")

;---Création de la raquette 
CreateSprite(#Spr_pad,200,16)
StartDrawing(SpriteOutput(#Spr_pad))
Box(0, 0, 200,16, RGB(0, 128, 192))
StopDrawing()

;---Création de la balle 
CreateSprite(#Spr_balle,32,32)
StartDrawing(SpriteOutput(#Spr_balle))
Circle(10,10,10,RGB(255, 255, 0))
StopDrawing()

balle\ballX = 350
balle\ballY = 560 

RGB(255, 255, 0)


;--- Boucle du jeux 

Repeat 
  Repeat
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event=0
  ClearScreen(RGB(0, 0, 0))
  
  ;--- Affichage de la raquette 
  DisplayTransparentSprite(#Spr_pad,Raquette\padX,Hauteur-16)
  ;---Affichage de la balle
  DisplayTransparentSprite(#Spr_balle,Balle\ballX,Balle\ballY)
  MouseX = MouseX()
  ExamineMouse()
  
  ;--Deplcament de la raquette avec la souris 
  If MouseX<=Largeur-200
    Raquette\padX=MouseX
  Else
    Raquette\padX=Largeur-200
  EndIf
  
  ;--Si la balle est collée alors la balle suit la raquette
  If balleColle = #True
    balle\ballX = Raquette\padX  
  Else
    balle\ballY = Balle\ballY + Balle\Speed
  EndIf
  
  ;-- Clique gauche de la souris
  If MouseButton(#PB_MouseButton_Left) And balleColle = #True
    ;Balle relachée
    balleColle = #False
    
    ;Init vitesse de la balle
    balle\Speed = -5
  EndIf
  
  
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
A toi de gérer les rebonds.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: Début d'un casseBrique

Message par Tonio »

Un grand merci Falsam pour tes conseils
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Début d'un casseBrique

Message par TazNormand »

Tonio, regardes dans un de tes précédents messages sous le pseudo JBernard13, celui-ci en l'occurence à adapter en PB 5.6 bien entendu
Image
Image
Répondre