Page 1 sur 1

Niveau

Publié : dim. 10/oct./2004 13:43
par garzul
Voila j'ai un probleme au niveau de mon code car j'ai fais ce que vous m'aviez dit c'est a dire avec les datas ( merci dobro et tout le monde ) puis j'ai réussi a faire un genre de map mais le seul probleme c'est qu'avec mon code le sprite avance de 32 alors que je ne veux pas qu'il avance mais qu'il colle l'image sur la position d'ou il etait avant comme un editeur de map ( avec des datas ) je sais pas si vous avez compri mais regardez mon code , en faite pour faire simple je veux que si le datas et egale a 1 il m'affiche un mur etsi il et de 0 sa ne m'affiche rien :

Code : Tout sélectionner

  Procedure Jeux()
    
    ;Création du niveau 1 avec les datas 
   
      
      Restore Niveau1 ; on restaure le label niv1
      Read a ; On lit les datas stocke dans a
      
        If a = 1 ; si a = 1
            
           DisplaySprite(#Mur,Murx , Mury) ;on affiche le mur au coordoner 
           Murx = Murx + 32 ; et on ajoute 32
        
        EndIf
        
           If a = 0
          
           EndIf
        
              If a = 88
          
                 Mury = Mury + 32
                 Murx = 0
          
              EndIf
              

                If a = 1 ; si a = 1
                
                  ;  DisplaySprite(#Mur,Murx, Mury) ;on affiche le mur au coordoner 
                  Murx = Murx + 32 ; et on ajoute 32
                
                EndIf
              
  EndProcedure
Et les datas :

Code : Tout sélectionner

DataSection

Niveau1 :

Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88
Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,88


EndDataSection 

Publié : dim. 10/oct./2004 14:09
par Anonyme2
Je ne sais pas si j'ai bien compris ton charabia

1) Je ne vois aucun data à 0, c'est normal ?
Comme les datas valent soit 1 soit 88, la condition d'affichage du mur sera toujours vrai (sauf pour 88)

2) structure le code de manière à éviter des tests inutiles (utilise Elsif et Else)

Code : Tout sélectionner

If a = 1 ; si a = 1 
            
           DisplaySprite(#Mur,Murx , Mury) ;on affiche le mur au coordoner 
           Murx = Murx + 32 ; et on ajoute 32 
        
        EndIf 
        
           If a = 0 
          
           EndIf 
        
              If a = 88 
          
                 Mury = Mury + 32 
                 Murx = 0 
          
              EndIf 
devient

Code : Tout sélectionner

If a = 1 ; si a = 1 
            
           DisplaySprite(#Mur,Murx , Mury) ;on affiche le mur au coordoner 
           Murx = Murx + 32 ; et on ajoute 32 
        
        elseIf  a = 88 
          
                 Mury = Mury + 32 
                 Murx = 0 
          
              EndIf 
pas besoin de tester le 0, ni le3, ni le 4 ni le 5 etc puisque l'on ne fera rien.
On ne fait une action que si la data lue vaut 0 ou 88.

Publié : dim. 10/oct./2004 14:17
par comtois
Remplace 3 par le nombre de ligne de ta map
et 4 par le nombre de colonne

Code : Tout sélectionner

For V = 0 To 3
  For u = 0 To 4
    Read mur
    If mur 
      DisplaySprite(#mur,u*SpriteWidth(#mur),V*SpriteHeight(#mur))
    EndIf
  Next u
Next V

Data.l 1,1,1,1,1
Data.l 1,0,0,0,1
Data.l 1,0,0,0,1
Data.l 1,1,1,1,1

Publié : dim. 10/oct./2004 14:53
par garzul
:? :mad: Sa m'enerve ses data ( pk je ne les ai pas utiliser avant ) on peut pas faire data 1,0,0,0,0,1,1,1,1

et donc sa va nous afficher un mur puis 4 vide puis 4 mur car la sa m'affiche un gross bloc en transformant le code de comtois pour mon jeux .

Publié : dim. 10/oct./2004 14:55
par Aranoth
moi j'utilise les tableau pour les maps

Dim Map(tilesx,tilesy)


Combiné avec une structure du genre:

Structure map
tile.l
collision.b
couche.b
aff.b
Endstructure

C'est très pratique ! :P

Publié : dim. 10/oct./2004 15:01
par garzul
Moii je voudrai utiliser les data comme sa je saurais les utiliser :D ( mais c pas gagner :mad: )

Publié : dim. 10/oct./2004 15:15
par garzul
Bon ben finalement je laisse tomber les data je prend les tableau :D

Publié : dim. 10/oct./2004 15:21
par comtois
garzul a écrit ::? :mad: Sa m'enerve ses data ( pk je ne les ai pas utiliser avant ) on peut pas faire data 1,0,0,0,0,1,1,1,1

et donc sa va nous afficher un mur puis 4 vide puis 4 mur car la sa m'affiche un gross bloc en transformant le code de comtois pour mon jeux .

Il ne faut pas oublier de mettre un Restore si tu utilises le code tel que je te l'ai montré !

Mais bien sûr , le mieux c'est de combiner tableau et data :)

En clair tu lis tes datas ,tu les stockes dans un tableau , et ensuite tu fais ta procédure d'affichage du décor en utilisant le tableau .
ou alors ,tu lis un fichier pour remplir ton tableau .

Code : Tout sélectionner

Restore Map
For V = 0 To 3 
  For u = 0 To 4 
    Read mur 
    If mur 
      DisplaySprite(#mur,u*SpriteWidth(#mur),V*SpriteHeight(#mur)) 
    EndIf 
  Next u 
Next V 

DataSection
Map:
Data.l 1,1,1,1,1 
Data.l 1,0,0,0,1 
Data.l 1,0,0,0,1 
Data.l 1,1,1,1,1
EndDataSection

Code : Tout sélectionner

InitKeyboard() 
InitSprite() 

OpenScreen(640,480,32,"") 
  
Enumeration 
   #mur
  #herbe
EndEnumeration 

;Sprite Mur
CreateSprite(#mur,32,32) 
StartDrawing(SpriteOutput(#mur)) 
Box(0,0,32,32,RGB(228,128,128))
For i = 0 To 100
  Plot(Random(32),Random(32),RGB(150,30,30))
Next i 
StopDrawing() 

;Sprite Herbe
CreateSprite(#herbe,32,32) 
StartDrawing(SpriteOutput(#herbe)) 
Box(0,0,32,32,RGB(128,228,128))
For i = 0 To 100
  Plot(Random(32),Random(32),RGB(30,150,30))
Next i  
StopDrawing() 

Procedure Decor()  
;Indispensable !! 
Restore Map
  
  For V = 0 To 3 
  For u = 0 To 4 
    Read Decor 
    ;Plutôt que de faire ce test , les datas pourraient contenir directement le No du sprite 
    ; on aurait : DisplaySprite(Decor,u*SpriteWidth(Decor),V*SpriteHeight(Decor)) 
    If Decor 
      DisplaySprite(#mur,u*SpriteWidth(#mur),V*SpriteHeight(#mur)) 
    Else
      DisplaySprite(#herbe,u*SpriteWidth(#herbe),V*SpriteHeight(#herbe))  
    EndIf 
  Next u 
Next V 
EndProcedure
Repeat 
  FlipBuffers() 
  
  ExamineKeyboard() 

  Decor()

Until KeyboardReleased(#PB_Key_Escape) 



DataSection
Map:
Data.l 1,1,1,1,1
Data.l 1,0,0,0,1 
Data.l 1,0,0,0,1 
Data.l 1,1,1,1,1
EndDataSection

Publié : dim. 10/oct./2004 15:27
par garzul
La j'ai bien compris , je pense qu'il me fallait un exemple MERCI COMTOIS et tous les autres pour m'avoir aider . :P 8)

Publié : dim. 10/oct./2004 15:36
par garzul
Sa marche completement merci comtois :P

Publié : dim. 10/oct./2004 18:36
par Le Soldat Inconnu
je pense que la méthode de Comtois est la mieux pour éviter de se mélanger les pinceaux.
De plus, il est ensuite très facile de remplacer la data par un fichier texte et ainsi avoir plusieurs niveaux

Publié : dim. 10/oct./2004 18:48
par garzul
:D Oui la methode de comtois et effectivement pour moi la plus simple :) , Pour le fichier texte LSI moi je vais utiliser les restore car je code un jeux qui et sans media (meme pas un ^^ ) .