Aide Compréhension système de MAPs...

Programmation avancée de jeux en PureBasic
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Aide Compréhension système de MAPs...

Message par Neveware »

Bonjour

Je poste aujourd'hui ce sujet pour vous demander de l'aide et surtout essaye de m'expliquer ou de me schématiser la réalisation ou un système de MAPs....

Mon moteur RPG avance à grands pas (déplacements terminés, animations, pseudo sous le joueur, etc...) Mais je suis entrain de composer mon Système de MAPs et j'aimerais s'il vous plaît m'expliquer ou me donner une idée de comment faire une map?....

Je croit qu'il faut tout stocker dans un tableau ou une boucle du genre For x = 0 to Next

For y = 0 etc....

J'ai déjà suivi le Tutorial de comtois mais je ne suis pas assez expérimenté pour comprendre ^^.

Merci d'avance pour votre aide.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Aide Compréhension système de MAPs...

Message par Thyphoon »

Neveware a écrit :Bonjour

Je poste aujourd'hui ce sujet pour vous demander de l'aide et surtout essaye de m'expliquer ou de me schématiser la réalisation ou un système de MAPs....

Mon moteur RPG avance à grands pas (déplacements terminés, animations, pseudo sous le joueur, etc...) Mais je suis entrain de composer mon Système de MAPs et j'aimerais s'il vous plaît m'expliquer ou me donner une idée de comment faire une map?....

Je croit qu'il faut tout stocker dans un tableau ou une boucle du genre For x = 0 to Next

For y = 0 etc....

J'ai déjà suivi le Tutorial de comtois mais je ne suis pas assez expérimenté pour comprendre ^^.

Merci d'avance pour votre aide.
Actuellement j'étudie pour faire une Map en 3D ISO évolué ....
mais en attendant regarde là il y a un tres bon exemple de Cpl_Bator
http://www.purebasic.fr/english/viewtopic.php?t=19741[/code]
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Re: Aide Compréhension système de MAPs...

Message par Neveware »

Merci de ton aide mais je commence à m'en sortir un peu...

Petit screen xD :

Image

Mais c'est compliqué de visualiser le code de la map :s....
Anonyme

Message par Anonyme »

Code : Tout sélectionner

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

OpenScreen(1024,768,32,"")

Declare AfficheMap()






Repeat
  ClearScreen(0)
  ExamineKeyboard()

  AfficheMap()

  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End 

;




Procedure AfficheMap()

Restore NIVEAU

StartDrawing(ScreenOutput())
For y = 0 To 9
  For x = 0 To 9

  Read Valeur.l
  
  TAILLE_TUILLE = 64
  
  TX = (x * TAILLE_TUILLE) + ScrollX ; Si tu veut "scrollé" , change la valeur des variables.
  TY = (y * TAILLE_TUILLE) + ScrollY
  
  
  Select Valeur
    Case 1 :Box(TX,TY,TAILLE_TUILLE,TAILLE_TUILLE,$00FF00)
    Case 0 :Box(TX,TY,TAILLE_TUILLE,TAILLE_TUILLE,$00007F)
  EndSelect 


  
  Next
Next
StopDrawing()



EndProcedure







; Niveau de 10x10
DataSection
NIVEAU:
  Data.l 1,1,1,1,1,1,1,1,1,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,1,1,1,1,1,1,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,0,0,0,0,0,0,0,0,1
  Data.l 1,1,1,1,1,1,1,1,1,1
EndDataSection
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

Sa à l'air intéressant... Enfin quelque chose que je comprends :D, je te remercie et je te dit si sa marche ! ^^

Désolé double post... mais t'aurais pas une solution pour stocker dans un tableau? xD
Anonyme

Message par Anonyme »

oui , mais faut bien que les données soit stoker quelque part... ici , c'est pas un fichier , mais en dur dans le programme. ( les datasection )

je ne vais pas te donner la soluce , à toi de trouvé comment mettre les donné de la datasection dans un tableau quelquonque.

indice :

Code : Tout sélectionner

dim MaMap(9,9)
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

En fait j'ai déjà essayé tout sa... mais j'ai mit tellement de variables que je sait plus où j'en suit...

Si le joueur se déplace de +1 en X , sa le déplace virtuellement mais pas sur la map... alors on déplace la MAP de +1 (deplacement_map_x = deplacement_map_x + 1) puis c'est là le hic, si je veux déplacer la map... il faut que je déplace tout les tiles, donc les coordonnées des tiles doivent être deplacement_map_x et deplacement_map_y mais les coordonnées des tiles n'existent pas...

ENFIN BREF VOUS COMPRENEZ MON PROBLEME XD
Anonyme

Message par Anonyme »

non, j'ai rien compris.
qu'est ce que t'appelle un déplacement virtuel ?? les coordonnées des tuiles et du perso n'ont rien a voir , la seule chose qu'il on en commun c'est le scrolling si il y en a...
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

Je sait mais déplacement virtuel c'est à dire que la variable position_joueur_x elle seule est changée, mais le joueur ne se déplace pas, c'est la map qui bouge.

Ensuite, je sait que c'est le Scroll qui se déplace... mais forcément si on déplace la map on est obligé d'en déplacer tout les tiles!

J'vous montre mon problème :

En gros Map_position_x et Map_position_y sont les variables, les scrolls de la map si vous préférez, donc si je veux placer un tile je fais :

Code : Tout sélectionner

DisplaySprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Sinon la map ne bougera pas si j'ai bien compris...

Et c'est là que je me perds... J'aimerais que chaque Tile ait sa coordonnée X et Y précise pour que je puisse changer chaque tileset de la map...

Voici le début de mon code pour comprendre mes variables un peu :

Code : Tout sélectionner

Enumeration

#Chipset_file

EndEnumeration

;************** SYSTEME DE MAPS - DEBUT DE LA PROGRAMMATION *****************
;-Début de la Programmation



; *************** Définition des variables **************
;-Définition des Variables

Tile_Width = 16 ; Défini la Largeur d'un Tile
Tile_Height = 16 ; Défini la Hauteur d'un Tile

Chipset_file$ = "chipset_1.png" ; Défini le chipset de la MAP.

Map_Width = 100 ; Défini la Largeur de la MAP
Map_Height = 100 ; Défini la Hauteur de la MAP


Map_position_x =New_position_Map_position_x ; Déplacement X sur l'écran...
Map_position_y = New_position_Map_position_y ; Déplacement Y sur l'écran...

Tile_x = 0 ; On défini la variable du Tile actuel X...
Tile_y = 0 ; On défini la variable du Tile actuel Y...





; ************** Chargement des Tiles du Chipset ****************
;- Chargement des Tiles

LoadSprite(#Chipset_file, "data/chipsets/" + Chipset_file$)


; ** Par la Suite, on demande la Hauteur, Largeur du tileset total **

File_chipset_Width = SpriteWidth(#Chipset_file) ; Défini la Largeur du fichier Chipset
File_chipset_Height = SpriteHeight(#Chipset_file) ; Défini la Largeur du fichier Chipset

; ** On découpe ensuite les Tiles pour les Compter **

Total_tiles_Width = File_chipset_Width / Tile_Width ; On calcule le total de tiles en Largeur.
Total_tiles_Height = File_chipset_Height / Tile_Height ; On calcule le total de tiles en Hauteur.

;** On Compte le Total des Tiles **

Total_tiles = Total_tiles_Width * Total_tiles_Height ; On obtient le total des Tiles en faisant Largeur*Hauteur


;** On calcule le total des tiles qu'il y aura sur la MAP**

Total_tiles_map_Height = Map_Height / Tile_Height ; Calcul du nombre de tiles en Largeur
Total_tiles_map_Width = Map_Width / Tile_Width ; Calcul du nombre de tiles en Hauteur

;** On calcule le total **

Total_tiles_map = Total_tiles_map_Height * Total_tiles_map_Width
Je sait que je vais embrouiller pas mal de monde et je m'en excuse mais j'ai besoin d'aide :s

Merci d'avance.
Anonyme

Message par Anonyme »

Et c'est là que je me perds... J'aimerais que chaque Tile ait sa coordonnée X et Y précise pour que je puisse changer chaque tileset de la map...

Ta map est dans un tableau a 2 dimensions ?

Dim Map(100,100) ?


si oui , ta les coordonnées sous les yeux...

Map(0,0) , 0,0 c'est le premier Tile
Map(1,0) c'est le tile à droite du 1°
Map(2,0) etc...

tu vas me dire , oui mais les coordonées de l'écran ??
Simple aussi , tu connais la taille du tile ? on va dire 64.

Map(0,0 )
-> X = 0 x 64 = 0
-> Y = 0 x 64 = 0

donc le 1° tile est en 0,0


Map(1,0 )
-> X = 1 x 64 = 64
-> Y = 0 x 64 = 0

donc le 2° tile est en 64,0

Map(2,0 )
-> X = 2 x 64 = 128
-> Y = 0 x 64 = 0

donc le 1° tile est en 128,0

etc...
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

Ok je vai essayer,je vous tiens au courant!
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

J'ai essayé sa :

Code : Tout sélectionner

Dim Select_Tile.b(Map_Height, Map_Width) ; Création du Tableau aux colonnes X et Y...
Select_Tile(1,0) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Select_Tile(1,2) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Mais sa n'affiche qu'un tile, sûrement à cause de Map_position_x... Help svp sa va faire 8heures que je suis dessus T.T...
Avatar de l’utilisateur
Ouaf-Ouaf
Messages : 212
Inscription : dim. 11/juil./2004 9:07

Message par Ouaf-Ouaf »

Tu veux que le joueur reste toujours au centre de l'ecran, et que le monde se deplace sous ses pieds, c'est ça ?

je comprends pas trop comment tu t y prends. Faut dire que tu mets juste "len-t^te" de ton code.

Code : Tout sélectionner

For A = 0 to X_Tuiles : For b = 0 to Y_Tuiles

DisplaySprite( Map(    A + Decal_X   ,   B + Decal_Y  ), A*32, B*32 )     

Next B : Next A
??

Avec ta map dans map(X,Y), X_ et Y_Tuiles le nombre de tuiles qui tiennent à l'ecran, et Decal_X et _Y la position de l'ecran.

Le joueur tu le mets invariablement au centre.. Et tu note sa pos sur la carte avec une variable.

Que est ce qui te pose pb ? Montre tout ton code ;)
Neveware
Messages : 49
Inscription : dim. 14/sept./2008 17:09

Message par Neveware »

O.O, excuse-moi, je suis sûr que ton explication est très compréhensible, mais je débute et j'ai rien compris xD.... tu pourrais refaire le code mais avec des Commentaires de débutant à côté stp? xD
Avatar de l’utilisateur
Ouaf-Ouaf
Messages : 212
Inscription : dim. 11/juil./2004 9:07

Message par Ouaf-Ouaf »

Dim Select_Tile.b(Map_Height, Map_Width) ; Création du Tableau aux colonnes X et Y...
Select_Tile(1,0) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Select_Tile(1,2) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
nn, faut pas faire comme ça.

Select_Tile(1,0) = 1

Ca voudras dire dans la boucle "affiche le sprite "1" "
Répondre