Pong Pong Ptit Pong !

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Pong Pong Ptit Pong !

Message par Crystal Noir »

Tiens comme j'savais pas trop quoi faire, j'vous refile un petit pong rétro que j'ai fait ce matin. Aucun graph, ya qu'à copier-Coller dans pure et zou en avant la mousseline ! Super pour les débutants :p et sympa pour les nostalgiques :p

Flèche haut et Flèche bas pour contrôler, et ESC pour sortir :p

Code : Tout sélectionner

;-PONGY PAR CRYSTAL NOIR


;Initialisation des composants
InitSprite()
InitKeyboard()

;Initialisation des constantes
  ;Variables Globales
  Global MaFenetre    ;Fenêtre principale
  Global JoueurX      ;Position en X du joueur
  Global JoueurY      ;Idem en Y
  Global AdversaireX  ;Position du PC en X
  Global AdversaireY  ;Position du PC en Y
  Global BalleX       ;Position de la balle en X
  Global BalleY       ;Position de la balle en Y
  Global SpeedX       ;Sens de la balle et vitesse en X
  Global SpeedY       ;Sens de la balle et vitesse en Y
  Global Aleatoire    ;IA du PC
  Global AdvScore     ;Score du PC
  Global JouScore     ;Score du joueur
  
  ;Constantes
  #Bat_Joueur = 1     ;Sprite du joueur
  #Bat_Adversaire = 2 ;Sprite du PC
  #Decor = 3          ;Ben...c'est le décor
  #Balle = 4           ;C'est la bouboule

;Création de la fenêtre principale 
SetRefreshRate(60)
MaFenetre = OpenScreen(800,600,32,"Test")
If MaFenetre  = 0 
  MessageRequester("Erreur", "Impossible d'ouvrir une fenêtre DirectX", #PB_MessageRequester_Ok)
EndIf


;Création des sprites
CreateSprite(#Bat_Joueur,20,100)
JoueurX = 10
JoueurY = 250
JouScore = 0
StartDrawing(SpriteOutput(#Bat_Joueur))
  Box(0,0,20,100,RGB(255,255,255))
StopDrawing()

CreateSprite(#Bat_Adversaire,20,100)
AdversaireX = 772
AdversaireY = 250
Aleatoire = Random(99) +1
AdvScore = 0
StartDrawing(SpriteOutput(#Bat_Adversaire))
  Box(0,0,20,100,RGB(255,255,255))
StopDrawing()

CreateSprite(#Decor,800,600)
StartDrawing(SpriteOutput(#Decor))
  Box(0,0,800,10,RGB(255,255,255))
  Box(0,590,800,10,RGB(255,255,255))
  Box(400,0,10,600,RGB(255,255,255))
StopDrawing()

CreateSprite(#Balle,15,15)
BalleX = 300
BalleY = 250
SpeedX = 5
SpeedY = 5
StartDrawing(SpriteOutput(#Balle))
  Box(0,0,15,15,RGB(255,0,0))
StopDrawing()
TransparentSpriteColor(#Balle,0,0,0)

Procedure MovePlayer()
  If KeyboardPushed(#PB_Key_Up) :JoueurY - 4  :EndIf
  If KeyboardPushed(#PB_Key_Down) :JoueurY + 4  :EndIf
  If JoueurY < 12 :JoueurY = 12 :EndIf
  If JoueurY > 487 :JoueurY = 487 :EndIf
  DisplaySprite(#Bat_Joueur,JoueurX,JoueurY)
EndProcedure

Procedure MoveBalle()
  If BalleX > 799
    JouScore + 1
    BalleY = 300
    BalleX = 400
    JoueurX = 10
    JoueurY = 250
    AdversaireX = 772
    AdversaireY = 250
    SpeedX = -SpeedX
    Aleatoire = Random(99) + 1
  EndIf
  If BalleX < 20
    AdvScore + 1
    BalleY = 300
    BalleX = 400
    JoueurX = 10
    JoueurY = 250
    AdversaireX = 772
    AdversaireY = 250
    Aleatoire = Random(99) + 1
  EndIf
  If BalleY < 20 Or BalleY > 575
    SpeedY = -SpeedY
  EndIf
  If SpriteCollision(#Balle,BalleX,BalleY,#Bat_Joueur,JoueurX,JoueurY)
    SpeedX = SpeedX-(SpeedX*2)
    StartDrawing(SpriteOutput(#Balle))
      Box(0,0,15,15,RGB(Random(255),Random(255),Random(255)))
    StopDrawing()
    Aleatoire = Random(99) + 1
  EndIf
  If SpriteCollision(#Balle,BalleX,BalleY,#Bat_Adversaire,AdversaireX,AdversaireY)  
    SpeedX = SpeedX-(SpeedX*2) 
    StartDrawing(SpriteOutput(#Balle))
      Box(0,0,15,15,RGB(Random(255),Random(255),Random(255)))
    StopDrawing()
    Aleatoire = Random(99) + 1
  EndIf
  BalleX + SpeedX
  BalleY + SpeedY
  DisplaySprite(#Balle,BalleX,BalleY)
EndProcedure

Procedure MoveAdversaire()
  If BalleY > AdversaireY
    If Aleatoire < 35
      If AdversaireY < BalleY - 100
      AdversaireY + 5
      EndIf
    Else
      AdversaireY + 5
    EndIf
  EndIf
  If BalleY < AdversaireY
    If Aleatoire < 35
      If AdversaireY > BalleY + 100
      AdversaireY - 5
      EndIf
    Else
      AdversaireY - 5
    EndIf
  EndIf
  If AdversaireY < 12 :AdversaireY = 12 :EndIf
  If AdversaireY > 487  :AdversaireY = 487  :EndIf
  DisplaySprite(#Bat_Adversaire,AdversaireX,AdversaireY)
  timer - 1
EndProcedure

Procedure DisplayScore()
StartDrawing(ScreenOutput())
  Locate(325,30)
  BackColor(0,0,0)
  FrontColor(255,255,255)
  DrawText(Str(JouScore))
  Locate (480,30)
  DrawText(Str(AdvScore))
StopDrawing()
EndProcedure

Repeat
  FlipBuffers()
  ExamineKeyboard()
  DisplaySprite(#Decor,0,0)
  MovePlayer()
  MoveAdversaire()
  MoveBalle()
  DisplayScore()
Until KeyboardPushed(#PB_Key_Escape)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

cool, surtout la balle (carrée :?: :?: :?: ) quichange de couleur :D
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

et vi les premiers pong la balle était carré lol
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je ne sais pas pourquoi, mais il ne peut pas ouvrir la fenetre DirectX (d'ailleurs, peut-être un end après le messagerequester serait bien pour terminer en cas d'erreur).

J'ai jamais eu ce problème. Vous avez un tite idée :?: (ne me dites pas que je n'ai pas directX, car c'est faux et mis à jour régulièrement)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

peut-être le SetRefreshRate(60) ,passe le à zéro pour voir ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

comtois a écrit :peut-être le SetRefreshRate(60) ,passe le à zéro pour voir ?
Merci Comtois, c'était ça, je ne comprend pas pourquoi mais bon...

Ca va vite, il faudrait une raquette qui face la hauteur de l'écran si je veux gagner :mrgreen: :0:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

et vi les premiers pong la balle était carré lol
Faut élovuer :wink:
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

c vrai mais je reste assez nostalgique de ces premiers jeux :D
Keph
Messages : 19
Inscription : mer. 21/janv./2004 21:00
Contact :

Message par Keph »

Sympa, mais les "engagements" sont trop rapides et on perd plein de points :(
Image
Répondre