Page 1 sur 1

PurePong

Publié : jeu. 26/août/2004 21:22
par hackotedelaplaque
C'est mon premier petit jeu en PureBasic.

Rien de très original si ce n'est que l'ordi joue tout seul avec une marge d'erreur aléatoire afin de rendre le jeu le moins linéaire possible.

Je crois que ça peut faire un bon tuto pour débutants.
Si ça intéresse, je peux commenter le code.

A noter comme d'habitude avec moi la gestion du son et des images sans utilisation de medias (je sais c'est con mais ça me plaît, ça fait des petits exe et ça se diffuse plus facilement !)

Code : Tout sélectionner

; PurePong par Hackotedelaplaque



debut :
InitSprite()
InitKeyboard()

#raquette = 0
#balle = 1

OpenScreen(640, 480, 8, "PurePong")
SetFrameRate(75)

CreateSprite(#raquette, 20, 50, 0)
CreateSprite(#balle, 10, 10, 0)

StartDrawing(SpriteOutput(#raquette))
  Box(0, 0, 20, 50, RGB(255, 255, 255))
StopDrawing()

StartDrawing(SpriteOutput(#balle))
  Box(0, 0, 10, 10, RGB(255, 255, 255))
StopDrawing()


Structure raquette
  x.l
  y.l
  score.b
EndStructure

Structure balle Extends raquette
  sens.b
  echange.w
  faute.w
EndStructure


Dim raquette.raquette(1)
raquette(0)\x = 0
raquette(1)\x = 620
For n = 0 To 1
  raquette(n)\y = 220
  raquette(n)\score = 0
Next

Global balle.balle
balle\echange = 0
balle\faute = Random(9)
balle\x = 320
balle\y = 220
balle\sens = Random(3)

Procedure moveraquettes()
  If KeyboardPushed(#PB_Key_Down)
    If raquette(0)\y < 430
      raquette(0)\y + 5
    Else
      raquette(0)\y = 430
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    If raquette(0)\y > 0
      raquette(0)\y - 5
    Else
      raquette(0)\y = 0
    EndIf
  EndIf
  
  If balle\echange > balle\faute
    raquette(1)\y = balle\y + 10
  Else
    raquette(1)\y = balle\y - 10
  EndIf
  
EndProcedure

Procedure moveballe()
  
  Select balle\sens
    Case 0
      balle\x - 4
      balle\y - 4
    Case 1
      balle\x + 4
      balle\y - 4
    Case 2
      balle\x - 4
      balle\y + 4
    Case 3
      balle\x + 4
      balle\y + 4
  EndSelect
  
EndProcedure

Procedure collisiontest()
  
  If balle\y < 0 Or balle\y > 470 ; test collision avec les bords
    Beep_(1000, 50)
    Select balle\sens
      Case 0 : balle\sens = 2
      Case 1 : balle\sens = 3
      Case 2 : balle\sens = 0
      Case 3 : balle\sens = 1
    EndSelect
  EndIf
  
  For n = 0 To 1
    If SpriteCollision(#balle, balle\x, balle\y, #raquette, raquette(n)\x, raquette(n)\y)
      Beep_(200, 100)
      balle\echange + 1
      Select balle\sens
        Case 0 : balle\sens = 1
        Case 1 : balle\sens = 0
        Case 2 : balle\sens = 3
        Case 3 : balle\sens = 2
      EndSelect
    EndIf
  Next
  
  
EndProcedure

Procedure score()
  
  If balle\x < 0 Or balle\x > 640
    
    If balle\x < 0
      raquette(1)\score + 1
      For a = 1 To 100
        Beep_(200 - a, 10)
      Next
    Else
      raquette(0)\score + 1
      For a = 1 To 100
        Beep_(1000 + a, 10)
      Next
    EndIf
    
    balle\echange = 0
    balle\faute = Random(7)
    balle\x = 320
    balle\y = 220
    balle\sens = Random(3)
    raquette(0)\x = 0
    raquette(1)\x = 620
    raquette(n)\y = 220
    raquette(1)\y = 220
    
    
    For n = 0 To 1
      If raquette(n)\score = 5
        CloseScreen()
        MessageRequester("Merci d'avoir joué à PurePong", "Score Final : " + Str(raquette(0)\score) + " à " + Str(raquette(1)\score), #PB_MessageRequester_Ok)
        If MessageRequester("PurePong", "On remet ça ? ", #PB_MessageRequester_YesNo) = 6 ; 6=yes 7=no
          Goto debut
        Else
          MessageRequester("PurePong", "Dommage, une autre fois alors !", #PB_MessageRequester_OK)
          End
        EndIf
      EndIf
    Next
    
  EndIf
  
EndProcedure

;- Boucle

Repeat
  
  ClearScreen(0, 0, 0)
  
  StartDrawing(ScreenOutput())
    Line(0, 0, 640, 0, RGB(255, 255, 255))
    Line(0, 479, 640, 0, RGB(255, 255, 255))
    
    Locate(250, 240)
    DrawingMode(1)
    FrontColor(255, 255, 255)
    DrawText(Str(raquette(0)\score))
    Locate(390, 240)
    DrawText(Str(raquette(1)\score))
    
  StopDrawing()
  
  DisplaySprite(#raquette, raquette(0)\x, raquette(0)\y)
  DisplaySprite(#raquette, raquette(1)\x, raquette(1)\y)
  DisplaySprite(#balle, balle\x, balle\y)
  
  ExamineKeyboard()
  
  moveraquettes()
  collisiontest()
  moveballe()
  score()
  
  FlipBuffers(0)
  
Until KeyboardPushed(#PB_Key_Escape)
End

Publié : jeu. 26/août/2004 22:02
par Oliv
Tiens ça faisait logntemps :D . J'adorre les bruits lorsqu'un joueur perd :D

Publié : ven. 27/août/2004 18:09
par hackotedelaplaque
tu me mets le doute oliv', je l'avais pas déjà publié ce source ?
Sur B Games il me semble, mais ici je pensais que non.
Désolé pour les répétions si tel est le cas .

Pour les sons, c'est vrai qu'on dirait un gars aux WC après un passage à MC Do !!!!
En tout cas la fonction Beep_ de la winapi est sympa, surtout qu'il y a pas de carte son au bureau et que j'en voulais quand même !!!!

Publié : ven. 27/août/2004 19:08
par Oliv
Non, ça faisait longtemps que l'on ne t'avais pas vu :D . Reflection faite tu avais pas mis un pong sur le musée ?