Pour GARZUL

Programmation avancée de jeux en PureBasic
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D MERCI BEAUCOUP LES GARS VOUS ETES TOUS SYMPA 5meme si moi je suis un moucheron a coter de vous :))MOI AUSSI JAI BEAUCOUP DESTIME ET JE REMERCE T LE MODE SUR CE FORUM C UN FORUM CONVIVIAL ET TT SA MERCI ET ENCORE MERCI MOI JE VAIS APRENDRE LE PUREBASIC EN ABANDONANT LE C OU LE C++¨PAR CONTRE JE VOUDRAI SAVOIR LEKEL LANGUAGE APRENDRE MAINTENNAT SI JE SERAPEUT ETRE PROGRAMEUR PLUS TARD. et encore merci a dobro et a tt le monde je vous adore.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Pour moi le C est un tres bon langage d'un point de vue pédagogique... Il est tres rigoureux et donc en cas d'erreur on le sait immédiatement...

Par exemple en PB si tu as une variable 'langage' et qu'un moment tu écris 'language' ca va créer une deuxieme variable et parfois on met du temps à trouver ce genre d'erreur (encore hier ca m'est arrivé...)

La philosophie du C est tres différente et sa rigueur risque de te décourager... Aussi faut pas partir là dedans avec l'idée de créer un super truc... Le mieux pour apprendre à coder c'est de se contenter de programmes simples avec l'affichage du résultat dans la console...

Dri
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D bonjour j'ai un probleme comment puis je faire pour creer une collision avec le joueur_1 et l'ennemie

Code : Tout sélectionner

;#################################PIECEMAN###########################################################
;# J'ai fait sa en 2 semaine lol################################################non moin################
;#################################Creer par garzul################################################### 
;enumeration des constant 

Enumeration 
  ;joueur 
  #Joueur_1 
  ;enemis
  #Ennemis
  ;au cas ou 
  #Garzul=1 
  #Police=1 
  ;objet 
  #Piece_1 
  #Sprite3D
EndEnumeration 

Structure Piece 
  x.l 
  y.l 
EndStructure 

NewList Piece.Piece()  ; Liste chainée pour la gestion des pieces 

; ************ Declaration des procedures ********************** 
Declare MovePlayer() 
Declare Collision()
Declare InitPiece()     
Declare AffichePiece()     
Declare MoveEnnemis()
Declare IaEnnemis()
Declare collisionEnnemis() 


;global 
Global x 
Global y 
Global z 
Global e 
  ;les dimension du cercle 
Width=200 
Height=100 
  ;fin 
Global Afiche_piece_1 


      
Resultat = InitSprite() 
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold ) 
EcranX = GetSystemMetrics_(#SM_CXSCREEN):; 
EcranY = GetSystemMetrics_(#SM_CYSCREEN):; 
WindowID = OpenWindow(1, 0, 0, 320, 200,  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "Pieceman") 

WindowID = WindowID(1) 
Result = OpenWindowedScreen(WindowID,0,0, 320, 200, 1, 0,0) 
  MessageRequester("Information : But du jeux","Le but du jeux de pieceman et de manger toute les pieces avant que le traceur vous mange . Aide = F1 touche flechéé pour se deplacer .Bon courage et bon jeux",#PB_MessageRequester_Ok|#MB_ICONinformation)
 
;-sprite joueur 
CreateSprite(#Joueur_1, 10, 10 )    :; 
StartDrawing(SpriteOutput(#Joueur_1)) : 
DrawingMode(0) 
Circle(0, 0, 10 ,RGB(Random(255),Random(242),Random(185))) : 

:; voila on a fini de dessiner notre sprite 
  
StopDrawing() 

 ;-sprite objet 
;creation du sprite des pieces. 
CreateSprite(#Piece_1, 10, 10 ) 
StartDrawing(SpriteOutput(#Piece_1)) : 
 DrawingMode(0) 
Circle(5, 5, 5 ,RGB($FF,$FE,$00)) :StopDrawing() 
;fin des sprite
 
CreateSprite(#Ennemis, 10, 10 ) 
StartDrawing(SpriteOutput(#Ennemis)) : 
 DrawingMode(0) 
Circle(10, 5, 5 ,RGB($FF,$FE,$00)) :StopDrawing() 

z=100 :
e=100 
sensz=6 :
sense=6 : 

Afiche_piece_1 = #True :
;fin 


;-boucle et evenement 
InitPiece() 
Repeat 
  
  Event =WindowEvent() : 
  Delay(5) 
  x+sensx  :;on ajoute (10) a la position colonne actuel du sprite 
  y+sensy :; ;on ajoute (10) a la position ligne actuel du sprite 
  If x>320-20 :; si le sprite arrive vers le bord droit de l'ecran - la largeur du sprite (10) 
    
    sensx=-sensx :; alors on inverse les coordonées en x (colonne) ceci va faire repartir le sprite dans l'autre sens 
  EndIf        
  If x<1 
    sensx=-sensx : ; si le sprite arrive a gauche de l'ecran on inverse ses coordonees !! 
    ;(pas besoin de compter la largeurdu sprite  puisque c'est le coin superieur GAUCHE qui compte !!) 
  EndIf 
  If y>200-10   : ; pareille si le sprite arrive en bas (c'est a dire le bas de l'ecran - la hauteur du sprite) 
    sensy=-sensy ; on inverse les coordonees (il rebondit) 
  EndIf 
  If y<1 
    sensy=-sensy :; pareille si le sprite arrive en haut !! 
  EndIf 
  
  ;pour sprite ennemis
   z+sensz  :
  e+sense : 
  If z>320-20 : 
    
    sensz=-sensz :
      EndIf        
  If z<1 
    sensz=-sensz :  
      EndIf 
  If e>200-10   : 
      sense=-sense 
        EndIf 
  If e<1 
    sense=-sense :
      EndIf 

    ;racourci clavier de l'aide
   InitKeyboard() 
  ExamineKeyboard()
 If KeyboardReleased(#PB_Key_F1) 
  MessageRequester("Information : But du jeux","Le but du jeux de pieceman et de manger toute les pieces avant que le traceur vous mange .:Aide = F1 touche flechéé pour se deplacer ,Bon courage et bon jeux",#PB_MessageRequester_Ok|#MB_ICONinformation)
EndIf

  
  DisplaySprite(#Joueur_1, x, y) : 
    DisplaySprite(#Ennemis, z, e) : 
  
  AffichePiece() 
  Collision()
  MovePlayer() 
  FlipBuffers() 
  ClearScreen(0, 0, 0) 
    

Until Event=#PB_Event_CloseWindow 

 
   

;* *******************   Les PROCEDURES !!!!! ********************************** 
;-mouvement ennemis
Procedure MoveEnnemis() 
If z < 12 :z = 12 :EndIf
If z > 298 :z = 298 :EndIf
If e < 12 :e = 12 :EndIf
If e > 182 :e = 182 :EndIf
EndProcedure 

;-ia de l'ennemis
Procedure IaEnnemis() 
If z < 12 :z = 12 :EndIf
If z > 298 :z = 298 :EndIf
If e < 12 :e = 12 :EndIf
If e > 182 :e = 182 :EndIf
EndProcedure 

;-mouvement du joueur 

Procedure MovePlayer() 
InitKeyboard() 
  ExamineKeyboard() 

  If KeyboardPushed(#PB_Key_Right) :x + 2  :EndIf 
  If KeyboardPushed(#PB_Key_Left) :x - 2  :EndIf 
  
  If x < 12 :x = 12 :EndIf 
  If x > 298 :x = 298 :EndIf 
  If KeyboardPushed(#PB_Key_Up) :y - 2  :EndIf 
  If KeyboardPushed(#PB_Key_Down) :y + 2  :EndIf 
  If y < 12 :y = 12 :EndIf 
  If y > 182 :y = 182 :EndIf 
  
EndProcedure 

Procedure Collision()
 
  ; test chaque piece contenue dans la liste chainée 
  ForEach Piece() 
    If SpriteCollision(#Joueur_1, x, y, #Piece_1, Piece()\x, Piece()\y) = 1
      ; si le joueur touche une piece ,on la supprime de la liste 
      DeleteElement(Piece()) 
    EndIf 
        If CountList(Piece()) = 0
     result = MessageRequester("Finie","Le jeux et finie vous avez ramasser toute les piece ,BRAVO",#PB_MessageRequester_Ok) 
     quit = 0   
     EndIf 

  Next  
EndProcedure 

Procedure AffichePiece() 
  ForEach Piece() 
    DisplaySprite(#Piece_1, Piece()\x, Piece()\y) 
  Next 
EndProcedure 

Procedure InitPiece() 
  For spy=20 To 170 Step 20 :; la boucle des lignes !!! 
      For spx=30 To 280 Step 20:; la boucle des colonnes 
      AddElement(Piece()) 
      Piece()\x = spx 
      Piece()\y = spy 
      DisplaySprite(#Piece_1,spx,spy) 
    Next spx 
  Next spy 
EndProcedure 
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

utilises la fonction spritepixelcollision() pour savoir si ils se rentrent dedans.
je te laisse chercher un peu et si tu trouves pas, on t'aideras ;)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Merci maintenant pour les jeux si jai un probleme donnez juste la fonction je me debroullerais avec et si jarrive pas aidez moi mais autrement donnez juste la fonction comme a fait le soldat inconnus(au fait jai utiliser ton logiciel d'aide pour mon bloc note tres bonne idee ce logiciel d'aide merci le soldat inconnue enfin regis koi a++) et merci
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D je comprend pas comment vous enlever les piece car j'ai fait pareil avec l'ennemis et le joueur mais rien regardez

Code : Tout sélectionner

Procedure CollisionEnnemis()
  ForEach Piece() 
If SpritePixelCollision(#Ennemis, z, e, #Joueur_1,Joueur_1()\a, Joueur_1()\b) = 1
      DeleteElement(Joueur_1()) 
      EndIf
       Next
EndProcedure 

au debut j'ai fait comme pour la piece mais rien alors que le code et juste car j'arrive a le compiler ???????????
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Code : Tout sélectionner

 ;#################################PIECEMAN###########################################################
;# J'ai fait sa en 2 semaine lol###############################################n moin################
;#################################Creer par garzul###################################################
;enumeration des constant

Enumeration
    ;joueur
    #Joueur_1
    ;enemis
    #Ennemis
    ;au cas ou
    #Garzul=1
    #Police=1
    ;objet
    #Piece_1
    #Sprite3D
EndEnumeration

Structure Piece
    x.l
    y.l
EndStructure

NewList Piece.Piece()  ; Liste chainée pour la gestion des pieces

; ************ Declaration des procedures **********************
Declare MovePlayer()
Declare Collision()
Declare InitPiece()     
Declare AffichePiece()     
Declare MoveEnnemis()
Declare IaEnnemis()
Declare collisionEnnemis()


;global
Global x
Global y
Global z
Global e
  ;les dimension du cercle
Width=200
Height=100
  ;fin
Global Afiche_piece_1


     
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;
WindowID = OpenWindow(1, 0, 0, 320, 200,  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "Pieceman")

WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 320, 200, 1, 0,0)
MessageRequester("Information : But du jeux","Le but du jeux de pieceman et de manger toute les pieces avant que le traceur vous mange . Aide = F1 touche flechéé pour se deplacer .Bon courage et bon jeux",#PB_MessageRequester_Ok|#MB_ICONinformation)
 
;-sprite joueur
CreateSprite(#Joueur_1, 10, 10 )    :;
StartDrawing(SpriteOutput(#Joueur_1)) :
DrawingMode(0)
Circle(0, 0, 10 ,RGB(Random(255),Random(242),Random(185))) :

:; voila on a fini de dessiner notre sprite
 
StopDrawing()

 ;-sprite objet
;creation du sprite des pieces.
CreateSprite(#Piece_1, 10, 10 )
StartDrawing(SpriteOutput(#Piece_1)) :
DrawingMode(0)
Circle(5, 5, 5 ,RGB($FF,$FE,$00)) :StopDrawing()
;fin des sprite
 
CreateSprite(#Ennemis, 10, 10 )
StartDrawing(SpriteOutput(#Ennemis)) :
DrawingMode(0)
Circle(10, 5, 5 ,RGB($FF,$FE,$00)) :StopDrawing()

z=100 :
e=100
sensz=6 :
sense=6 :

Afiche_piece_1 = #True :
;fin


;-boucle et evenement
InitPiece()
Repeat
    
    Event =WindowEvent() :
    Delay(5)
    x+sensx  :;on ajoute (10) a la position colonne actuel du sprite
    y+sensy :; ;on ajoute (10) a la position ligne actuel du sprite
    If x>320-20 :; si le sprite arrive vers le bord droit de l'ecran - la largeur du sprite (10)
        
        sensx=-sensx :; alors on inverse les coordonées en x (colonne) ceci va faire repartir le sprite dans l'autre sens
    EndIf       
    If x<1
        sensx=-sensx : ; si le sprite arrive a gauche de l'ecran on inverse ses coordonees !!
        ;(pas besoin de compter la largeurdu sprite  puisque c'est le coin superieur GAUCHE qui compte !!)
    EndIf
    If y>200-10   : ; pareille si le sprite arrive en bas (c'est a dire le bas de l'ecran - la hauteur du sprite)
        sensy=-sensy ; on inverse les coordonees (il rebondit)
    EndIf
    If y<1
        sensy=-sensy :; pareille si le sprite arrive en haut !!
    EndIf
    
    ;pour sprite ennemis
    z+sensz  :
    e+sense :
    If z>320-20 :
        
        sensz=-sensz :
    EndIf       
    If z<1
        sensz=-sensz : 
    EndIf
    If e>200-10   :
        sense=-sense
    EndIf
    If e<1
        sense=-sense :
    EndIf
    
    ;racourci clavier de l'aide
    InitKeyboard()
    ExamineKeyboard()
    If KeyboardReleased(#PB_Key_F1)
        MessageRequester("Information : But du jeux","Le but du jeux de pieceman et de manger toute les pieces avant que le traceur vous mange .:Aide = F1 touche flechéé pour se deplacer ,Bon courage et bon jeux",#PB_MessageRequester_Ok|#MB_ICONinformation)
    EndIf
    
    
    DisplaySprite(#Joueur_1, x, y) :
    DisplaySprite(#Ennemis, z, e) :
    
    AffichePiece()
    Collision()
    MovePlayer()
    FlipBuffers()
    ClearScreen(0, 0, 0)
    
    
Until Event=#PB_Event_CloseWindow

 
   

;* *******************   Les PROCEDURES !!!!! **********************************
;-mouvement ennemis
Procedure MoveEnnemis()
    If z < 12 :z = 12 :EndIf
    If z > 298 :z = 298 :EndIf
    If e < 12 :e = 12 :EndIf
    If e > 182 :e = 182 :EndIf
EndProcedure

;-ia de l'ennemis
Procedure IaEnnemis()
    If z < 12 :z = 12 :EndIf
    If z > 298 :z = 298 :EndIf
    If e < 12 :e = 12 :EndIf
    If e > 182 :e = 182 :EndIf
EndProcedure

;-mouvement du joueur

Procedure MovePlayer()
    InitKeyboard()
    ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Right) :x + 2  :EndIf
    If KeyboardPushed(#PB_Key_Left) :x - 2  :EndIf
    
    If x < 12 :x = 12 :EndIf
    If x > 298 :x = 298 :EndIf
    If KeyboardPushed(#PB_Key_Up) :y - 2  :EndIf
    If KeyboardPushed(#PB_Key_Down) :y + 2  :EndIf
    If y < 12 :y = 12 :EndIf
    If y > 182 :y = 182 :EndIf
    
EndProcedure

Procedure Collision()
    
    ; test chaque piece contenue dans la liste chainée
    ForEach Piece()
        If SpriteCollision(#Joueur_1, x, y, #Piece_1, Piece()\x, Piece()\y) = 1
            ; si le joueur touche une piece ,on la supprime de la liste
            DeleteElement(Piece())
        EndIf
        If CountList(Piece()) = 0
            Result = MessageRequester("Finie","Le jeux et finie vous avez ramasser toute les piece ,BRAVO",#PB_MessageRequester_Ok)
            quit = 0   
        EndIf
    Next 
    ; ************* rajout de DOBRO ************************
    If SpriteCollision(#Joueur_1, x, y, #Ennemis, z, e) = 1
        MessageRequester("touché", "l'ennemi ta touché", #PB_MessageRequester_Ok ) 
        ; ici faut faire disparaitre soit l'ennemi soit le joueur e toi de choisir!! 
        
    EndIf
    
    
EndProcedure

Procedure AffichePiece()
    ForEach Piece()
        DisplaySprite(#Piece_1, Piece()\x, Piece()\y)
    Next
EndProcedure

Procedure InitPiece()
    For spy=20 To 170 Step 20 :; la boucle des lignes !!!
        For spx=30 To 280 Step 20:; la boucle des colonnes
            AddElement(Piece())
            Piece()\x = spx
            Piece()\y = spy
            DisplaySprite(#Piece_1,spx,spy)
        Next spx
    Next spy
EndProcedure 
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D merci beaucoup dobro (je sais pas comment tu arrive a me suporter surement avec du bon cafe )lol :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

t'es pas la personne la plus dur a suporter de ce forum !! :)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D c qui alors :)
Aranoth
Messages : 293
Inscription : sam. 24/janv./2004 12:00
Localisation : Toulouse (31)
Contact :

Message par Aranoth »

c'est lui meme lol


je plaisante bien sur :D
Débutant en programmation, notament en C++ ?
Vous souhaitez apprendre ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Bon je vais essayer de faire un petit jeux TOUT SEUL car vu que vous maidez je vais essayer de faire un jeux sans que vous m'expliquer tout merci le jeu et finie du haut donc si vous voulez bien essayer (meme si c pas moi qui a fait tout vu que vous m'avez aider ) dedans j'ai juste rajouter les score et dans la deuxieme version un genre d'ia pour les telechargez cet pour la version sans ia c http://consolpcgame.ifrance.com/consolp ... anv0.4.exe et pour l'autre version avec ia c http://consolpcgame.ifrance.com/consolp ... anv0.5.exe voila maintenant je vais essayer de faire un petit jeux sans aide car celui la c un peu vous quand meme donc voila a++ :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

J'adore ^^
Le jeu est même livré avec des fôtes d'orthographe ^^

un peu dure la version sans ia... car trop rapide...
Sinon l'ia a un peu de mal...

Dri

PS. bonne chance pour ton provhain jeu
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Si tu veux je te donne la source???
Répondre