Page 1 sur 1

problème gestion de clavier

Publié : jeu. 20/avr./2006 21:33
par patbou
Bonjour à tous

Nouveau avec purebasic depuis 1 semaine, j'ai certain problèmes avec le code suivant:

Code : Tout sélectionner

; ------------------------------------------------------------
 ;        Démo 1 - Jeu de KONG - version PureBasic 3.94
; ------------------------------------------------------------

; ----- Procédure - Constantes - Structures - Variables ------


; Déclaration des procédures

Declare TesterClavier()
Declare InitialiseNiveau()
Declare AffichePointage()
Declare TesterAI()

; Constantes

#VITESSE_JOUEUR = 7       ; Vitesse du joueur
#VITESSE_ORDI = 6         ; Vitesse de l'ordinateur

#TOUCHE_PAUSE = 80        ; Correspond au code pour la touche P

; Structures

Structure s_player       ; structure pour le joueur et l'ordinateur
  y.l                     ; position y du joueur en question
  pointage.l              ; pointage du joueur en question
EndStructure

Structure s_balle        ; structure pour la balle
  x.l                     ; position x de la balle
  y.l                     ; position y de la balle
  xv.l                    ; vélocité en x de la balle
  yv.l                    ; vélocité en y de la balle
EndStructure

; Variables

Global joueur1.s_player    ; on donne le type s_player à joueur1 (joueur humain)
Global joueur2.s_player    ; on donne le type s_player à joueur2 (ordinateur)
Global balle.s_balle       ; on donne le type s_balle à balle (notre balle de jeu)


; ----- INITIALISATION DU PROGRAMME -----

InitSprite()          ; Initialise l'environnement nécessaire au fonctionnement des sprites

InitKeyboard()        ; Initialise l'environnement propre à la gestion du clavier

OpenScreen(800,600,32,"Kong") ; Ouvre un nouvel écran pour notre jeu

; Charge en mémoire les sprites

If LoadSprite(0,"player1.bmp") = 0
  MessageRequester("Erreur","Impossible de charger le sprite player1.bmp",0)
  End ; Quitte le programme
EndIf

If LoadSprite(1,"player2.bmp") = 0
  MessageRequester("Erreur","Impossible de charger le sprite player2.bmp",0)
  End ; Quitte le programme
EndIf

If LoadSprite(2,"ball.bmp") = 0
  MessageRequester("Erreur","Impossible de charger le sprite ball.bmp",0)
  End ; Quitte le programme
EndIf

; Affiche le texte de départ

FlipBuffers()
ClearScreen(0,0,0)

StartDrawing(ScreenOutput())

FrontColor(255,255,255)
BackColor(0,0,0)

Locate(400,300)
DrawText("Ready...Set")

Locate(420,330)
DrawText("Go!!!!")

StopDrawing()

FlipBuffers()

Delay(3000)

; Initialise le niveau

InitialiseNiveau()

; Initialise le pointage

joueur1\pointage = 0
joueur2\pointage = 0


; ----- BOUCLE PRINCIPALE DU PROGRAMME -----

Repeat

  ClearScreen(0,0,0)
  
  DisplaySprite(2,balle\x,balle\y)
  DisplaySprite(0,60,joueur1\y)
  DisplaySprite(1,740,joueur2\y)
  
  TesterClavier()
  
  TesterAI()
  
  AffichePointage()
  
  FlipBuffers()
  
  Delay(20)

Until KeyboardPushed(#PB_Key_Escape)

End


; ----- PROCEDURES -----

; Procédure InitialiseNiveau

Procedure InitialiseNiveau()

 ; Place la balle au centre de l'écran
 
 balle\x = 400
 balle\y = 300
 
 ; Déplace la balle dans une direction aléatoire
 
 balle\xv = Random(4) + 2
 balle\yv = Random(16)+ 2
 
 ; Place les joueurs à la bonne position
 
 joueur1\y = 300
 joueur2\y = 300 

EndProcedure

Procedure TesterClavier()

  If ExamineKeyboard()
  
      If KeyboardPushed(#PB_Key_Up)
        joueur1\y = joueur1\y - VITESSE_JOUEUR
      
      ElseIf KeyboardPushed(#PB_Key_Down)
        joueur1\y = joueur1\y + VITESSE_JOUEUR
    
      ElseIf KeyboardPushed(TOUCHE_PAUSE)
        ClearScreen(0,0,0)
      
        StartDrawing(ScreenOutput())
        FrontColor(255,255,255)
        BackColor(0,0,0)
        Locate(400,300)
        DrawText("Appuyez sur P pour reprendre le jeu...")
        StopDrawing()
      
        Repeat
        Delay(1)
        Until KeyboardPushed(TOUCHE_PAUSE)
      
      EndIf
  
  EndIf
 
EndProcedure

Procedure TesterAI()
EndProcedure

Procedure AffichePointage()
EndProcedure

Le problème semble venir de la procédure TesterClavier. Si j'appuie sur la touche Escape le programme se termine normalement mais appuyer sur la touche HAUT ou BAS (flèche) ou P (pause) n'a aucune incidence et je ne vois vraiment pas pourquoi.

Je sais que c'est surement une erreur stupide mais, désolé, je ne la voie vraiment pas! Tout aide serait grandement appréciée!

merci à tous

patbou

Publié : jeu. 20/avr./2006 21:58
par comtois

Code : Tout sélectionner

joueur1\y = joueur1\y + VITESSE_JOUEUR
C'est parce que VITESSE_JOUEUR vaut zéro.
tu as oublié le # :)

Bienvenue à toi .

Publié : jeu. 20/avr./2006 22:29
par patbou
aarrrggggg!!!!

Je savais que c'était juste une connerie!

Alors quand on déclare une constante le # doit suivre tout au long du programme!

merci comtois

patbou