[0k] N00b a la mer !

Programmation avancée de jeux en PureBasic
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

[0k] N00b a la mer !

Message par BuCkSh0t »

Voila apres les phrase motivante que Typhoo,oliv,le soldat et les autres m'ont fait par,j'ai decider de prendre le diable par les c***** et de m'y mettre


Donc voila,j'ai decider de faire juste un chtit truk,un perso ke l'on dirige et ki peut tirer....helas j'ai du foirer un/des/plein/enormement de truk...

passke mon perso avance ke de Y en positif,il ne reagit pas aux autres touches....

Ensuite j'ai fait un truk pour ke kand on appuie sur "espace" un "truc" sort du bonhomme,sensé etre une balle de fusil :lol: ...

Helas sa n'a pas l'air de marché....
Merci d'avance
InitKeyboard()
InitSprite()
InitSound()
UseJPEGImageDecoder()

OpenScreen(800,600,32,"")

Global PlayerX
Global PlayerY
Global TirX
Global TirY
PlayerX=300
PlayerY=200
Tir=1

#Background=1
#Perso=0

LoadSprite(#Background,"gfx\background.jpg")
LoadSprite(#Perso,"gfx\perso.jpg")



Repeat
FlipBuffers()
ExamineKeyboard()
ClearScreen(0,0,0)
DisplaySprite(#Background,0,0)
DisplayTransparentSprite(#Perso,PlayerX,PlayerY)

If KeyboardPushed(#PB_Key_Up)
PlayerY-3
If KeyboardPushed(#PB_Key_Down)
PlayerY+3
If KeyboardPushed(#PB_Key_Right)
PlayerX+3
If KeyboardPushed(#PB_Key_Left)
PlayerX-3
If KeyboardReleased(#PB_Key_Space)
TirX=PlayerX
TirY=PlayerY
Tir=1
EndIf
EndIf
EndIf
EndIf
EndIf
StartDrawing(ScreenOutput())
If Tir=1 : FrontColor(10,10,40):Circle(TirX,TirY,5)
EndIf
StopDrawing()
Until KeyboardReleased(#PB_Key_Escape)
EDIT : Ok j'avais mal placer mes endif

desoler du derenagement
-_Purefication will gonna start_-
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Un petit coup d'indentation, et regarde comment tes If sont imbriqués...
Les autres touches ne sont testées que si la flêche du haut est enfoncée!

Code : Tout sélectionner

InitKeyboard()
InitSprite()
InitSound()
UseJPEGImageDecoder()

OpenScreen(800,600,32,"")

Global PlayerX
Global PlayerY
Global TirX
Global TirY
PlayerX=300
PlayerY=200
Tir=1

#Background=1
#Perso=0

LoadSprite(#Background,"gfx\background.jpg")
LoadSprite(#Perso,"gfx\perso.jpg")



Repeat
   FlipBuffers()
   ExamineKeyboard()
   ClearScreen(0,0,0)
   DisplaySprite(#Background,0,0)
   DisplayTransparentSprite(#Perso,PlayerX,PlayerY)
   
   If KeyboardPushed(#PB_Key_Up)
      PlayerY-3
      If KeyboardPushed(#PB_Key_Down)
         PlayerY+3
         If KeyboardPushed(#PB_Key_Right)
            PlayerX+3
            If KeyboardPushed(#PB_Key_Left)
               PlayerX-3
               If KeyboardReleased(#PB_Key_Space)
                  TirX=PlayerX
                  TirY=PlayerY
                  Tir=1
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   StartDrawing(ScreenOutput())
   If Tir=1 : FrontColor(10,10,40):Circle(TirX,TirY,5)
   EndIf
   StopDrawing()
Until KeyboardReleased(#PB_Key_Escape) 
Comme quoi l'indentation, ça sert pas juste à faire joli :wink:


*EDIT*
Ah ben j'avais pas vu ton édit à la fin, j'ai l'air malin maintenant :lol:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

Message par BuCkSh0t »

lol


Merci quand meme


:P
-_Purefication will gonna start_-
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je n'en dis pas plus , pose des questions s'il y a des choses que tu ne comprends pas .

Code : Tout sélectionner

InitKeyboard() 
InitSprite() 
InitSound() 
UseJPEGImageDecoder() 

OpenScreen(800,600,32,"") 

Global PlayerX 
Global PlayerY 
Global TirX 
Global TirY 

PlayerX=300 
PlayerY=200 
Sens = 1
 
Enumeration
#Background 
#Perso 
#Balle
EndEnumeration

;LoadSprite(#Background,"gfx\background.jpg") 
;LoadSprite(#Perso,"gfx\perso.jpg") 

;Sprite background
CreateSprite(#Background,800,600)
StartDrawing(SpriteOutput(#Background))
Box(0,0,800,600,RGB(128,128,160))
StopDrawing()
;Sprite perso
CreateSprite(#Perso,32,32)
StartDrawing(SpriteOutput(#Perso))
Box(0,0,800,600,RGB(228,128,160))
StopDrawing()
;Sprite balle
CreateSprite(#Balle,3,3)
StartDrawing(SpriteOutput(#Balle))
Box(0,0,800,600,RGB(255,255,160))
StopDrawing()

;Structure minimale , il est bien sûr possible d'ajouter un délai avant d'autoriser un autre tir 
; une durée de Vie ( si c'est des grenades par exemple ) , un Niveau de Dégât , etc 
Structure tir
  x.l
  y.l
  PasX.l
EndStructure

NewList Tir.tir()

Procedure GestionTir()
  ForEach Tir()
    Tir()\x + Tir()\PasX
    If Tir()\x > 800 Or Tir()\x < 0
      DeleteElement(Tir())
    Else
      DisplaySprite(#Balle,Tir()\x,Tir()\y)
    EndIf
  Next   
EndProcedure  
    
Repeat 
  FlipBuffers() 
  ExamineKeyboard() 
  DisplaySprite(#Background,0,0) 

  
  If KeyboardPushed(#PB_Key_Up) 
    PlayerY-3 
  EndIf  
  If KeyboardPushed(#PB_Key_Down) 
    PlayerY+3 
  EndIf  
  If KeyboardPushed(#PB_Key_Right) 
    PlayerX+3 
    Sens = 1
  EndIf  
  If KeyboardPushed(#PB_Key_Left) 
    PlayerX-3 
    Sens = -1
  EndIf  
  If KeyboardReleased(#PB_Key_Space) 
    ;une balle est tirée , il faut l'ajouter pour ensuite la gérer dans la procédure GestionTir()
    AddElement(Tir())
    ;Mémorise dans quel sens la balle devra aller 
    Tir()\PasX = Sens * 5
    ;Mémorise la position de départ de la balle en x
    If Sens = -1
      Tir()\x = PlayerX 
    Else
      Tir()\x = PlayerX + SpriteWidth(#Perso)
    EndIf
    ;Mémorise la position de départ de la balle en y
    Tir()\y = PlayerY + SpriteHeight(#Perso)/2
  EndIf 
  GestionTir()
  DisplayTransparentSprite(#Perso,PlayerX,PlayerY) 
Until KeyboardReleased(#PB_Key_Escape) 
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

Message par BuCkSh0t »

Que veux dire

tir()/x

Ca veut dire ke la procedure Tir est divisee par x ????


lol
je suis encore un n00b


mais merci kand meme.... :D
-_Purefication will gonna start_-
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tir() est une liste chainée, liée à la structure tir

Tir()\x veut dire que la variable à remplir dans la structure est x

PS A remplir, ou à récupérer, evidemment!
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

t'inquiète , ça va finir par rentrer .

pour gérer une balle , j'ai besoin de connaitre sa position en x , sa position en y et son sens de déplacement . ça me fait donc 3 paramètres.

d'où la structure tir , j'aurais pu l'appeler balle :)

Code : Tout sélectionner

Structure tir 
  x.l 
  y.l 
  PasX.l 
EndStructure 

Ensuite , comme je ne veux pas me limiter à un seul tir , et que je ne sais pas combien de fois tu vas t'acharner sur ta touche espace , je préfère utiliser une liste chainée plutôt qu'un tableau , pour t'exercer , je te suggère de remplacer la liste chainée par un tableau de dimension 20 par exemple . euh les tableaux , tu connais ?

Revenons à la liste chainée

pour la créer c'est tout simple

Code : Tout sélectionner

NewList Tir.tir() 
Et si j'avais appelé ma Structure balle à la place de tir

Code : Tout sélectionner

NewList Tir.balle() 
Je viens donc de créer une liste Tir()

voila maintenant je vais pouvoir ajouter des balles dans la liste

Comment ?

Ben comme ça :

Code : Tout sélectionner

AddElement(Tir()) 
Voila je viens d'ajouter un élément (une balle ) à ma liste , maintenant j'ai besoin d'initialiser la position de cette balle

C'est les fameuses lignes que tu peux voir juste après le AddElement()

Code : Tout sélectionner

Tir()\x = PlayerX 

Tir() <<< ça ne te rappelle rien ? notre fameuse liste ?

\ <<< ce n'est pas une division , c'est juste une syntaxe à connaitre , dans d'autre langage tu pourras voir tir.x , avec purebasic on écrit tir\x , c'est comme ça , il faut s'y faire .N'étant pas informaticien , j'ai du mal à te donner le nom exact de la chose :)
si personne ne me corrige , je ferai éventuellement une recherche pour trouver le terme approprié .
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

Message par BuCkSh0t »

:D :D :D

Merci beaucoup a toi d'avoir pris du temps pour m'expliquer....c'est vraiment sympa....



Bon ben Go go go alors ;)
-_Purefication will gonna start_-
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

Message par BuCkSh0t »

:x :x

M*****


j'ai un autre probleme....en effet je voudrais qu'il y ai un sprite qui bouge tous seul donc :
If EnemyX<800:EnemyX+1:EndIf
Ok ca marche mais kand je fais
If EnemyX>800:EnemyX+1:EndIf
Ben le sprite ne part pas dans l'autre sens,il se casse...ciomme sa ...hop il est hors de l'ecran



Auriez vous une idee,de comment je pourrais faire....

Merci
-_Purefication will gonna start_-
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

Heu la je m'incruste vite fait car je crois que j'ai compris ( enfin suis pas sur j'ai pas lus le post :/ ) tu dois faire If EnemyX>800:EnemyX =- EnemyX:EndIf je crois hein ^^
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

et X-1, t'as pas essayé?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu peux aussi définir une variable SensEnnemi
par exemple

Code : Tout sélectionner

SensEnnemi = 2


elle va servir à la fois comme vitesse de déplacement et aussi pour donner le sens du déplacement .

Ensuite si tu veux que ton ennemi se balade de 0 à 800

Code : Tout sélectionner

; Déplace l'ennemi dans la direction de SensEnnemi 
EnnemiX + SensEnnemi 

; Tu ajusteras le test de l'encadrement à ta convenance !
If EnnemiX < 0 Or EnnemiX > 800 
   SensEnnemi * -1 ; inverse le sens de déplacement 
EndIf
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai du mal à te donner le nom exact de la chose Smile
ne dit on pas que c'est un membre ! ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

oui , je crois que c'est ça , c'est un membre de la structure .
BuCkSh0t
Messages : 29
Inscription : lun. 27/sept./2004 12:15

Message par BuCkSh0t »

Dis Garzul tu as encore le codes sources de ton Invaders....


Juste pour voir commen tu a programmer tes collisions


t'inkiete je ne veux pas faire de plagia :P
-_Purefication will gonna start_-
Répondre