Problème camera, vie, IA, Monde Rond et tir tous en 3D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Message par Anonyme »

Maintenant on passe a une autre , la 3d ou on a autre chose a aprendre ?
T'énerves pas , reste pas mal de chose à faire , l'IA & le score , après nous verrons les sprites , puis les fonctions afin de rendre le code plus lisible.


l'IA :


Pour le moment , les raquettes sont invincibles , elle seront toujours à la hauteur de la balle.
Comment la rendre moins forte ?

déjà , la raquette doit avoir une vitesse propre à elle pour les déplacement verticaux , car là , elle va a la vitesse de la balle.

donc , si BalleY > (RaquetteY+RaquetteHauteur/2)
RaquetteY + VitesseRaquette

Adapte se que je viens de te dire.
Ensuite on continue un peu , puis les scores.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

guerrier001 a écrit :ok alors :

Maintenant on passe a une autre , la 3d ou on a autre chose a aprendre ?
8O
2D -> X et Y
3D -> X et Y et Z
regarde à nouveau le schéma de Cpl.Bator, et place des repères pour t'aider à y voir plus clair, voyez:

Code : Tout sélectionner

; cours 2D: pong facile

If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
     End
EndIf

;Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):

;  #irepere ; permet au progammeur de repèrer les positions des divers objets qu'il teste à l'écran...

;EndEnumeration




ScreenX.i = 1024 ;la longueur de la fenetre en plein ecran
ScreenY.i = 768 ; La largeur de la fenetre en plein ecran

Rayon.i = 20 ;j'ai agrandi le rayon du cercle


; Direction de la babale
Dir_Haut = 1
Dir_Bas = 0
Dir_Droite = 1
Dir_Gauche =0

Vitesse = 5-3 ;- vitesse de la balle, là, ici, coucou !

BalleX= ScreenX / 2
BalleY= ScreenY / 2

;- raquette à gauche de l'écran:
RaquetteGX.w= 100
RaquetteGY.w= 384
RaquetteGHauteur.w= 100
RaquetteGLargeur.w= 20

;- raquette à droite de l'écran:
RaquetteDX.w= 850
RaquetteDY.w= 0
RaquetteDHauteur.w= 100
RaquetteDLargeur.w= 25
; Box(RaquetteDX, RaquetteDY, RaquetteDLargeur, RaquetteDHauteur,RGB(255,255,255))

;OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur

If OpenWindow ( 0 , 0, 0, ScreenX+100,ScreenY, "vers l'infini 0.4" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered )
 OpenWindowedScreen ( WindowID ( 0 ), 0, 0, ScreenX,ScreenY, 0, 1, 1) ; un ecran graphique dans la fenêtre toute simple.
 SetWindowColor(0, RGB (0, 0, 0)) 
EndIf
KeyboardMode(#PB_Keyboard_International)

; CreateSprite ( #irepere , 4, 4 ) ; test utile pour le programmeur
; StartDrawing ( SpriteOutput ( #irepere ))
;  BackColor ( RGB (0,0,0))
;  Box (0,0, 5, 5, RGB (190, 27, 27))
; StopDrawing ()

; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
 Event= WindowEvent ()

ExamineKeyboard()
ExamineMouse() ;Examine la position de la souris je crois

x = MouseX()
y = MouseY()



;Mouvement de la balle
If Dir_Haut = 1
BalleY - Vitesse
EndIf

If Dir_Bas = 1
BalleY + Vitesse
EndIf

If Dir_Droite = 1
BalleX + Vitesse
EndIf

If Dir_Gauche = 1
BalleX - Vitesse
EndIf


;Colllision avec le Haut de l'écran. le haut est egal a 0
If BalleY-Rayon < 0
Dir_Bas=1
Dir_Haut=0
EndIf

;Colllision avec le Bas de l'écran. le bas est egal a ScreenY
If BalleY+Rayon > ScreenY
Dir_Bas=0
Dir_Haut=1
EndIf

;Colllision avec la GAUCHE de l'écran. egal a 0
If BalleX-Rayon < 0
Dir_Gauche=0
Dir_Droite=1
EndIf

;Colllision avec la DROITE de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Dir_Gauche=1
Dir_Droite=0
EndIf



;Collision avec la raquettes gauche

If Ballex-Rayon < RaquetteGX + RaquetteGLargeur ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteGY And balley-Rayon < RaquetteGY + RaquetteGHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf

EndIf

RaquetteGY = BalleY - RaquetteGHauteur/2



StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat
;Box(850,y-50,25,100,RGB(255,255,255))
;- raquete interactive:
Box(RaquetteDX, RaquetteDY+y, RaquetteDLargeur, RaquetteDHauteur,RGB(255,255,255))


Box(RaquetteGX, RaquetteGY ,RaquetteGLargeur,RaquetteGHauteur,RGB(255,255,255))


Circle(BalleX,BalleY , Rayon,RGB(255,255,255))
;le cercle est egal a la position x et y de la souris grace a Repeat le cercle renouvelle a
;chaque fois la position de la souris ce qui fait que le cercle suit la souris et qu'il a une couleur marron


;- test du codeur:
  Box (RaquetteDX, RaquetteDY+y, 4, 4, RGB (255, 27, 27))
  Box (RaquetteDX, RaquetteDY+y+100, 4, 4, RGB (255, 27, 27))
 
  Box (BalleX+Rayon,BalleY, 4, 4, RGB (255, 27, 27)) ;- <- là  
 
 
StopDrawing() ;on arrete supprime (ou arrete le dessin




;- pas de sprite pour l'instand, car c'est encore trop tôt.
 ; DisplayTransparentSprite( #irepere , 100,100);RaquetteDX-200, RaquetteDY+y)




 FlipBuffers()
 ClearScreen(RGB(0,0,0))
; ******************************************************************************************************   
 If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):End:EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver 
Dernière modification par beauregard le dim. 18/janv./2009 14:23, modifié 1 fois.
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

Je doit le faire aller plus lent ou plus vite les raquettes?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

guerrier001 a écrit :Je doit le faire aller plus lent ou plus vite les raquettes?
j'ai ralentis la balle pour t'aider

Code : Tout sélectionner

  Box (RaquetteDX, RaquetteDY+y+100, 4, 4, RGB (255, 27, 27))
 
  Box (BalleX+Rayon,BalleY, 4, 4, RGB (255, 27, 27)) ;- <- là  
RaquetteDX -> X de la raquette du joueur
BalleX+Rayon -> X bordure droite de la baballe

je viens d'ajouter au code:
Vitesse = 5-3 ;- vitesse de la balle, là, ici, coucou !

donc:

Si X de la balle est supérieur à X de la raquette Et ...
IF ............................... > ............................. AND
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

j'ai réussi a le faire a "MA MANIERE"

Code : Tout sélectionner

InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
ScreenX.i = 1024 ;la longueur de la fenetre en plein ecran
ScreenY.i = 768 ; La largeur de la fenetre en plein ecran

Rayon.i = 20 ;j'ai agrandi le rayon du cercle


; Direction de la babale
Dir_Haut = 1
Dir_Bas = 0
Dir_Droite = 1
Dir_Gauche =0

Vitesse = 5

BalleX= ScreenX / 2
BalleY= ScreenY / 2


RaquetteGaucheX= 100
RaquetteGaucheY= 384
RaquetteDroiteX= 900
RaquetteDroiteY= 384
RaquetteHauteur= 100
RaquetteLargeur= 20


OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur


Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
ExamineKeyboard()




;Mouvement de la balle
If Dir_Haut = 1
BalleY - Vitesse
EndIf

If Dir_Bas = 1
BalleY + Vitesse
EndIf

If Dir_Droite = 1
BalleX + Vitesse
EndIf

If Dir_Gauche = 1
BalleX - Vitesse
EndIf


;Colllision avec le Haut de l'écran. le haut est egal a 0
If BalleY-Rayon < 0
Dir_Bas=1
Dir_Haut=0
EndIf

;Colllision avec le Bas de l'écran. le bas est egal a ScreenY
If BalleY+Rayon > ScreenY
Dir_Bas=0
Dir_Haut=1
EndIf

;Colllision avec la GAUCHE de l'écran. egal a 0
If BalleX-Rayon < 0
Dir_Gauche=0
Dir_Droite=1
EndIf

;Colllision avec la DROITE de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Dir_Gauche=1
Dir_Droite=0
EndIf



;Collision avec la raquettes gauche

If Ballex-Rayon => -10+RaquetteDroiteX - RaquetteLargeur ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteDroiteY And balley-Rayon < RaquetteDroiteY + RaquetteHauteur
Dir_Gauche=1
Dir_Droite=0
EndIf

EndIf

RaquetteDroiteY = BalleY-RaquetteDroiteY/2 ;je retreci la taille de la raquette de 2 ce qui lui donne beaucoups plus de vitesse
;Collision avec la raquettes gauche

If Ballex-Rayon < RaquetteGaucheX + RaquetteLargeur ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteGaucheY And balley-Rayon < RaquetteGaucheY + RaquetteHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf

EndIf


RaquetteGaucheY = BalleY - RaquetteGaucheY/10 ;je retreci la taille de la raquette de 10 ce qui lui donne beaucoups plus de vitesse



 



StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat


Box(RaquetteDroiteX,RaquetteDroiteY  ,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))

Box(RaquetteGaucheX, RaquetteGaucheY,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))


Circle(BalleX,BalleY , Rayon,RGB(255,255,255))
;le cercle est egal a la position x et y de la souris grace a Repeat le cercle renouvelle a
;chaque fois la position de la souris ce qui fait que le cercle suit la souris et qu'il a une couleur marron
StopDrawing() ;on arrete supprime (ou arrete le dessin





FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter
Voila montre moi ce que je devait vraiment faire lol .
Anonyme

Message par Anonyme »

Code : Tout sélectionner

InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
ScreenX.i = 1024 ;la longueur de la fenetre en plein ecran
ScreenY.i = 768 ; La largeur de la fenetre en plein ecran

Rayon.i = 20 ;j'ai agrandi le rayon du cercle


; Direction de la babale
Dir_Haut = 1
Dir_Bas = 0
Dir_Droite = 1
Dir_Gauche =0

Vitesse = 5

BalleX= ScreenX / 2
BalleY= ScreenY / 2


RaquetteGaucheX= 100
RaquetteGaucheY= 384
RaquetteDroiteX= 900
RaquetteDroiteY= 384
RaquetteDroiteVitesse = 8
RaquetteHauteur= 100
RaquetteLargeur= 20


OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur


Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
ExamineKeyboard()




;Mouvement de la balle
If Dir_Haut = 1
BalleY - Vitesse
EndIf

If Dir_Bas = 1
BalleY + Vitesse
EndIf

If Dir_Droite = 1
BalleX + Vitesse
EndIf

If Dir_Gauche = 1
BalleX - Vitesse
EndIf


;Colllision avec le Haut de l'écran. le haut est egal a 0
If BalleY-Rayon < 0
Dir_Bas=1
Dir_Haut=0
EndIf

;Colllision avec le Bas de l'écran. le bas est egal a ScreenY
If BalleY+Rayon > ScreenY
Dir_Bas=0
Dir_Haut=1
EndIf

;Colllision avec la GAUCHE de l'écran. egal a 0
If BalleX-Rayon < 0
Dir_Gauche=0
Dir_Droite=1
EndIf

;Colllision avec la DROITE de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Dir_Gauche=1
Dir_Droite=0
EndIf



;Collision avec la raquettes droite

If Ballex+Rayon => RaquetteDroiteX  ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteDroiteY And balley-Rayon < RaquetteDroiteY + RaquetteHauteur
Dir_Gauche=1
Dir_Droite=0
EndIf

EndIf


;IA DROITE

If BalleX > 1024/2 ; la balle est dans son secteur

  If BalleY=>RaquetteDroiteY + (RaquetteHauteur/2)
      RaquetteDroiteY + RaquetteDroiteVitesse
  EndIf 
  
  If BalleY<=RaquetteDroiteY + (RaquetteHauteur/2)
      RaquetteDroiteY- RaquetteDroiteVitesse
  EndIf
    
    
    Else ; Si elle n'est pas dans le secteur , on centre la raquette
    
     If RaquetteDroiteY + (RaquetteHauteur/2)>384
      RaquetteDroiteY - RaquetteDroiteVitesse
      EndIf 
  
    If RaquetteDroiteY + (RaquetteHauteur/2)<384
      RaquetteDroiteY+ RaquetteDroiteVitesse
    EndIf
    
    
EndIf 












;Collision avec la raquettes gauche
If Ballex-Rayon < RaquetteGaucheX + RaquetteLargeur ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteGaucheY And balley-Rayon < RaquetteGaucheY + RaquetteHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf

EndIf




 



StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat


Box(RaquetteDroiteX,RaquetteDroiteY  ,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))

Box(RaquetteGaucheX, RaquetteGaucheY,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))


Circle(BalleX,BalleY , Rayon,RGB(255,255,255))
;le cercle est egal a la position x et y de la souris grace a Repeat le cercle renouvelle a
;chaque fois la position de la souris ce qui fait que le cercle suit la souris et qu'il a une couleur marron
StopDrawing() ;on arrete supprime (ou arrete le dessin





FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter
les collisions avec la droites on été faite à l'arrache , evite d'utilisé des nombre dans les conditions , car si tu veut changer le rayon de la balle ca te met le systeme en l'air

Code : Tout sélectionner

If Ballex-Rayon => -10+RaquetteDroiteX - RaquetteLargeur
deviens

Code : Tout sélectionner

If Ballex+Rayon => RaquetteDroiteX
Tu as de la chance que les nombre sont juste ,sinon ta condition ne marchais pas.
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

et maintenant qu'est ce que je fait ?
Anonyme

Message par Anonyme »

Regarde le code du dessus , tu as une raquette "intelligente"
controle l'autre avec la souris.

Vire les collisions sur les bords latéraux

si la balle touche l'un des bords latéraux , recentre la balle au millieu de l'écran.
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

Oui prof
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

Voila , ca c'etait facile mais la vitesse etait quand meme dur.

Code : Tout sélectionner

InitSprite() : InitKeyboard() ;le demarrage du sprite et du clavier
InitMouse() ;j'ai démarrer la souris
ScreenX.i = 1024 ;la longueur de la fenetre en plein ecran
ScreenY.i = 768 ; La largeur de la fenetre en plein ecran

Rayon.i = 20 ;j'ai agrandi le rayon du cercle


; Direction de la babale
Dir_Haut = 1
Dir_Bas = 0
Dir_Droite = 1
Dir_Gauche =0

Vitesse = 5

BalleX= ScreenX / 2
BalleY= ScreenY / 2


RaquetteGaucheX= 100
RaquetteGaucheY= 384
RaquetteDroiteX= 900
RaquetteDroiteY= 384
RaquetteDroiteVitesse = 8
RaquetteHauteur= 100
RaquetteLargeur= 20


OpenScreen(ScreenX,ScreenY,32,"MonProgramme modifier") ; l'ouverture de la fentre en mode plein ecran avec son titre et le nombre de couleur


Repeat ;repete la meme procedure a chaque fois
ClearScreen(RGB(0,0,0)) ; la scene a une couleur verte
ExamineKeyboard()
ExamineMouse()
RaquetteGaucheY =MouseY()



;Mouvement de la balle
If Dir_Haut = 1
BalleY - Vitesse
EndIf

If Dir_Bas = 1
BalleY + Vitesse
EndIf

If Dir_Droite = 1
BalleX + Vitesse
EndIf

If Dir_Gauche = 1
BalleX - Vitesse
EndIf


;Colllision avec le Haut de l'écran. le haut est egal a 0
If BalleY-Rayon < 0
Dir_Bas=1
Dir_Haut=0
EndIf

;Colllision avec le Bas de l'écran. le bas est egal a ScreenY
If BalleY+Rayon > ScreenY
Dir_Bas=0
Dir_Haut=1
EndIf

;Colllision avec la GAUCHE de l'écran. egal a 0
If BalleX-Rayon < 0
Ballex=512
Balley=384
Dir_Gauche=0
Dir_Droite=1
EndIf

;Colllision avec la DROITE de l'écran. egal a 0 ScreenX
If BalleX+Rayon > ScreenX
Ballex=512
Balley=384
Dir_Gauche=1
Dir_Droite=0
EndIf



;Collision avec la raquettes droite

If Ballex+Rayon => RaquetteDroiteX  ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteDroiteY And balley-Rayon < RaquetteDroiteY + RaquetteHauteur
Dir_Gauche=1
Dir_Droite=0
EndIf

EndIf


;IA DROITE

If BalleX > 1024/2 ; la balle est dans son secteur

  If BalleY=>RaquetteDroiteY + (RaquetteHauteur/2)
      RaquetteDroiteY + RaquetteDroiteVitesse
  EndIf
 
  If BalleY<=RaquetteDroiteY + (RaquetteHauteur/2)
      RaquetteDroiteY- RaquetteDroiteVitesse
  EndIf
   
   
    Else ; Si elle n'est pas dans le secteur , on centre la raquette
   
     If RaquetteDroiteY + (RaquetteHauteur/2)>384
      RaquetteDroiteY - RaquetteDroiteVitesse
      EndIf
 
    If RaquetteDroiteY + (RaquetteHauteur/2)<384
      RaquetteDroiteY+ RaquetteDroiteVitesse
    EndIf
   
   
EndIf












;Collision avec la raquettes gauche
If Ballex-Rayon < RaquetteGaucheX + RaquetteLargeur ; La balle dépasse la raquette gauche

; COLLISION !!!!
If balley+Rayon > RaquetteGaucheY And balley-Rayon < RaquetteGaucheY + RaquetteHauteur
Dir_Gauche=0
Dir_Droite=1
EndIf

EndIf




 



StartDrawing(ScreenOutput()) ;on recommence a faire a dessiner grace a la commande repeat


Box(RaquetteDroiteX,RaquetteDroiteY  ,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))

Box(RaquetteGaucheX, RaquetteGaucheY,RaquetteLargeur,RaquetteHauteur,RGB(255,255,255))


Circle(BalleX,BalleY , Rayon,RGB(255,255,255))
;le cercle est egal a la position x et y de la souris grace a Repeat le cercle renouvelle a
;chaque fois la position de la souris ce qui fait que le cercle suit la souris et qu'il a une couleur marron
StopDrawing() ;on arrete supprime (ou arrete le dessin





FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) ;on appuie sur echap pour quitter 
L'étape suivante est le score ?
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

un up pour ne pas m'oublier avec mes score et je dit aussi a cpl.Bator merci de son aide car le code de la balle qui est dans la partie adverse fait réagir l'ia va me servir dans mon jeux 3d ^^
Le guerrier avance vers sa destiné!
Répondre