Giovanni Isaac
Giovanni Isaac

Reputation: 11

Load a json map into pygame (using Tiled)

I'm coming here to see if I could get some help with my project. I'm trying to map a dungeon crawler like game, and I want to create a map using Tiled. I managed to print the map using processing code, however, my project has to be in pytho, and I don't know how to translate my code. Even without trying to translate, I don't know how could I print a json map in pygame.

Does someone have some clues please? Thank you !

Firstly I tried to export my map into a csv file, but the import was.. weird and didn't created what I expected. The elements weren't at the right place for some reason. With the json export, I tried to translate the processing code into python but I didn't managed to do something which was working.

PS: by the way, I'm not very familiar with Stack Overlow, and so I don't really know how to properly ask for help, don't hesitate to tell me what you eventually need !

Here is my processing code to print the map :

JSONObject map;
PImage tilset;
PImage[] tile_BG;
PImage[] tile_sBG;
PImage[] tile_O;
PImage[] tile_Start;
int nb_tuile_x, nb_tuile_y, taille_tuile_x, taille_tuile_y;
int[] BG_layer;
int[] sBG_layer;
int[] O_layer;
int[] Start_layer;

void setup()
{
  size(320, 320);
  map = loadJSONObject("carte.json");
  taille_tuile_x= map.getInt("tileheight");
  taille_tuile_y= map.getInt("tilewidth");
  nb_tuile_x = map.getInt("width");
  nb_tuile_y = map.getInt("height");
  println("Les tuiles sont de dimmensions : "+taille_tuile_x+"px par "+taille_tuile_y+"px");
  println("La carte a pour dimension : "+nb_tuile_x+" tuiles de long sur "+nb_tuile_y+" tuiles de haut");
  println("Soit un total de : "+nb_tuile_x*nb_tuile_y+" tuiles");
  JSONArray layers = map.getJSONArray("layers");
  println("La carte est composée de "+layers.size()+" couches");
  JSONObject layer0 = layers.getJSONObject(0);
  JSONArray data0 = layer0.getJSONArray("data");
  JSONObject layer1 = layers.getJSONObject(1);
  JSONArray data1 = layer1.getJSONArray("data");
  JSONObject layer2 = layers.getJSONObject(2);
  JSONArray data2 = layer2.getJSONArray("data");
  JSONObject layer3 = layers.getJSONObject(3);
  JSONArray data3 = layer3.getJSONArray("data");
  BG_layer = data0.getIntArray();
  sBG_layer = data1.getIntArray();
  O_layer = data2.getIntArray();
  Start_layer = data3.getIntArray();
  tilset=loadImage("tiles.png");
  tile_BG = new PImage[BG_layer.length];
  tile_sBG = new PImage[sBG_layer.length];
  tile_O = new PImage[O_layer.length];
  tile_Start = new PImage[Start_layer.length];
  for (int i=0; i<BG_layer.length; i++)
  {
  int coordX_tuile=(BG_layer[i]%25)*16-16;
  int coordY_tuile=BG_layer[i]/25*16;
  tile_BG[i]=tilset.get(coordX_tuile, coordY_tuile, 16, 16);
  }
  for (int i=0; i<tile_BG.length; i++)
  {
  if (BG_layer[i]!=0) image(tile_BG[i], (i%20)*16, (i/20)*16);
  }
  
  for (int i=0; i<sBG_layer.length; i++)
  {
  int coordX_tuile=(sBG_layer[i]%25)*16-16;
  int coordY_tuile=sBG_layer[i]/25*16;
  tile_sBG[i]=tilset.get(coordX_tuile, coordY_tuile, 16, 16);
  }
  for (int i=0; i<tile_sBG.length; i++)
  {
  if (sBG_layer[i]!=0) image(tile_sBG[i], (i%20)*16, (i/20)*16);
  }
  
  for (int i=0; i<O_layer.length; i++)
  {
  int coordX_tuile=(O_layer[i]%25)*16-16;
  int coordY_tuile=O_layer[i]/25*16;
  tile_O[i]=tilset.get(coordX_tuile, coordY_tuile, 16, 16);
  }
  for (int i=0; i<tile_O.length; i++)
  {
  if (O_layer[i]!=0) image(tile_O[i], (i%20)*16, (i/20)*16);
  }
  
  for (int i=0; i<Start_layer.length; i++)
  {
  int coordX_tuile=(Start_layer[i]%25)*16-16;
  int coordY_tuile=Start_layer[i]/25*16;
  tile_Start[i]=tilset.get(coordX_tuile, coordY_tuile, 16, 16);
  }
  for (int i=0; i<tile_Start.length; i++)
  {
  if (Start_layer[i]!=0) image(tile_Start[i], (i%20)*16, (i/20)*16);
  }
  }
void draw(){}

Upvotes: 0

Views: 106

Answers (0)

Related Questions