µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Map Maker
Aller à la page: 1, 2, 3  >
 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Projets
Sujet précédent :: Sujet suivant  
Auteur Message
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Lun 3 Juin 2013 - 21:00    Sujet du message: Map Maker Répondre en citant

Bonjour.
 
 

Voilà un petit programme ressorti de mes archives pleines de poussière, datant du temps où je savais programmer, qui permet plus ou moins de créer une map sur DS :
  • On selectionne le tileset, qui doit être dans le dossier du programme (plantage du programme si ce n'est pas un fichier image), on valide avec A
  • On choisit avec les flèches la hauteur/largeur des tiles en pixel et de la map en nombre de tiles
  • On dessine les tiles au stylet; A et B pour choisir la tile à dessiner
  • On se déplace sur l'écran (si la map est trop grande pour y être affichée) avec les flèches directionnelles.
  • On sauvegarde avec Select (nom : map.map)



Les bugs/problèmes/à améliorer : Lors du chargement du tileset; l'impossibilité de changer de dossier; l'impossibilité de choisir le nom de la sauvegarde; la duplication de la map si elle est plus petite que l'écran; la visualisation du tileset avant le chargement qui manque; l'impossibilité de changer de tileset/préférences après les avoir choisis, sans redémarrer le programme; le fichier mapdefaut.map qui est créé et non supprimé alors qu'il ne sert à rien une fois que la map sur laquelle on dessine soit crée; la mémoire qui n'est pas/mal vidée.


Donc voilà, je le distribue pour que des gens intéressés et plus doués que moi le reprennent et l'améliorent, car je pense que s'il était bien fait il pourrait être utile.



Voila le code, plus ou moins fonctionnel :
Code:
 files = System.listDirectory(System.currentDirectory())
selec = 2
img = ""
img_selected = false
wtile = 16
htile = 16
wmap=16
hmap=12
reg=0
chosen=false
--nombreTiles = ((Image.width(tileset)/wtile)*(Image.height(tileset)/htile))-1
save = false
selectedTile = 0
enregistrement=false
selection=0
dofile "clavier.lua"

function changement_tile()
   ScrollMap.setTile(map, math.floor(Stylus.X/wtile), math.floor(Stylus.Y/htile), selectedTile)
end

function enregistrer()
   fichier = io.open(str..".map", "w+")
   for y=0, hmap-1 do
      for x=0, wmap-1 do
        fichier:write(tostring (ScrollMap.getTile(map, x, y).."|") )
      end
      fichier:write("\n")
   end
   io.close(fichier)
   save=true
   enregistrement=false
end

function ouvrir_image()
   for i, elem in pairs(files) do
      local color=Color.new(31,31,31)
      if elem.isDir then color=Color.new(31,20,0) else color=Color.new(5,31,5) end
      screen.print(SCREEN_DOWN, 0, i*8-reg, elem.name, color)
   end
   screen.drawLine (SCREEN_DOWN, 0, selec*8, string.len(files[selec-1].name)*6, (selec)*8, Color.new(31,31,31))
   if Keys.newPress.Up and selec-reg/8>2 then
      selec=selec-1
   elseif Keys.newPress.Down and selec<=table.getn(files) then
      selec=selec+1
   end
   if Keys.newPress.A then
   if not files[selec-1].isDir then img=files[selec-1].name
   img_selected=true
   selec=2
   tileset = Image.load (img, VRAM)
   map = ScrollMap.new (tileset, "mapdefaut.map", wmap, hmap, wtile, htile)
   nombreTiles = ((Image.width(tileset)/wtile)*(Image.height(tileset)/htile))-1
   end
   end
   if selec>24 and (reg/8)+selec<table.getn(files) then reg=reg+8 selec=24 end
   if selec<2 and selec-(reg/8)>1 then reg=reg-8 selec=2 end
end

while not Keys.held.Start do
   Controls.read()
   if selection~=4 then
      nbr_only=true
       clav_all()
   elseif enregistrement==true then
        clav_all()
       if chosen==true then enregistrer() end
   elseif img_selected==false then
        ouvrir_image()
           screen.print (SCREEN_UP,10,10,selec.."-"..files[selec-1].name)
   else ScrollMap.draw(SCREEN_DOWN, map)
      if Keys.newPress.Down and selectedTile>=1 then
         selectedTile = selectedTile-1
      end
      if Keys.newPress.Up and selectedTile+1<=nombreTiles then
         selectedTile = selectedTile+1
      end
      if Stylus.held then
         changement_tile()
         save=false
       chosen=false
      end
      if Keys.newPress.Select then
         enregistrement=true
       nbr_only=false
      end
      screen.print(SCREEN_UP, 0, 0, "Tile n° "..selectedTile)
      if save then screen.print(SCREEN_UP,110,92,"Saved") end

   end

   render()
end



files = nil
tileset = Image.destroy (tileset)
tileset = nil
image = nil
map=ScrollMap.destroy(map)
map = nil





 Le code du clavier utilisé par le programme pour l'enregistrement:



Code:
 char={"1","2","3","4","5","6","7","8","9","0","dl",
"a","z","e","r","t","y","u","i","o","p","?",
"q","s","d","f","g","h","j","k","l","m","!",
"w","x","c","v","b","n",",",".",":","(",")",
"+","-","*","/"," ","=","<",">","~","%",
"&","'","\"",";","{","}","^","_","#","[","]","no"}
numbers={".","e","1","2","3","4","5","6","7","8","9","0"}
nbr_only=false
str=""
wait=0
op=""
nbr1=""
nbr2=""
nbrp=""
calc=false
calcul=""
txt=""
--11*15+3*1=165+33=198 256-198=58
-- Forme de l'affichage
function StylEntre(v1,v2,v3,v4)
if Stylus.X>=v1 and Stylus.X<=v2 and Stylus.Y>=v3 and Stylus.Y<=v4 then
return true
end
return false
end

function intable(tab,elem)
   for i,el in ipairs(tab) do
      if el==elem then
         return true
      end
   end
   return false
end

function affclav()
   for colonne=1, 11 do
      for ligne=1, 6 do
      x=(colonne*22)-10
      y=(ligne*22)+10
      screen.drawFillRect (SCREEN_DOWN,x,y,x+18,y+18,Color.new (10,10,10))
      screen.drawRect (SCREEN_DOWN,x-1,y-1,x+19,y+19, Color.new (20,20,20))
      screen.print (SCREEN_DOWN,x+2,y+5,char[colonne+(ligne-1)*11] or "BUG")
      end
   end
   screen.drawFillRect (SCREEN_DOWN,2,2,42,11,Color.new (10,10,10))
   screen.print (SCREEN_DOWN,3,3,"calc")
   screen.drawFillRect (SCREEN_DOWN,2,13,42,22,Color.new (10,10,10))
   screen.print (SCREEN_DOWN,3,14,"enter")
end

function anclav()
for colonne=1,11 do
      for ligne=1,6 do
         if StylEntre(colonne*22-10,colonne*22+8,ligne*22+10,ligne*22+28) then
            return char[colonne+(ligne-1)*11]
         end
      end
   end
if StylEntre(2,42,2,11) then return "calc"
elseif StylEntre(2,42,13,22) then return "enter"
end
return "nil"
end

function affcalc()
screen.drawFillRect(SCREEN_UP,1,82,256,112,Color.new(20,20,25))
if not (input=="exit" or input=="calc") then
   if Stylus.newPress then     
      if intable(numbers,input or "nil") then
         if wait==0 and op=="" then
            nbr1=nbr1..input
         elseif wait==0 and op~="" then
            nbr2=nbr2..input
         elseif wait==1 and op=="" then
            nbr1=""
            nbr2=""
            nbrp=""
            calcul=""
            op=""
            nbr1=nbr1..input
            wait=0
         elseif wait==1 and op~="" then
            nbr1=""
            nbr2=""
            nbrp=""
            calcul=""
            op=""
            nbr2=nbr2..input
            wait=0
         end
         calcul=nbr1..op..nbr2
      elseif input=="+" and nbr1~="" then
         op="+"
      elseif input=="-" and nbr1~="" then
         op="-"
      elseif input=="*" and nbr1~="" then
         op="*"
      elseif input=="/" and nbr1~="" then
         op="/"
      elseif (input=="enter" or input=="=") and op~="" then
         if op=="+" then nbrp=tonumber(nbr1)+tonumber(nbr2)
         elseif op=="-" then nbrp=tonumber(nbr1)-tonumber(nbr2)
         elseif op=="*" then nbrp=tonumber(nbr1)*tonumber(nbr2)
         elseif op=="/" then nbrp=tonumber(nbr1)/tonumber(nbr2)
         end
         nbr1, nbr2 ="", ""
         op = ""
         wait=1
      end
   end
   screen.print(SCREEN_UP,250-string.len(calcul)*7,86,calcul)
   screen.print(SCREEN_UP,10,95,nbrp or "")
end
end

function clav_all()
affclav()
   if Stylus.held then
   input=anclav()
      if input~="nil" and Stylus.newPress then
        if nbr_only==true then
         
         if intable(numbers,input or "nil") then
         str=str..input
         elseif input=="dl" then str=string.sub(str,1,-2)
         elseif input=="enter" then
            if selection==0 then wmap=str str="" selection=1
            elseif selection==1 then hmap=str str="" selection=2
            elseif selection==2 then wtile=str str="" selection=3
            elseif selection==3 then htile=str str="" selection=4
         end
       end
         elseif input=="dl" then str=string.sub(str,1,-2)
         elseif input=="calc" then
            calc=not calc
            nbr1=""
            nbr2=""
            nbrp=""
            calcul=""
            op=""
       elseif input=="enter" then
         chosen=true
         elseif not calc and string.len(str)<=15 then str=str..input
         end

      end
   end
if selection==4 then screen.print (SCREEN_UP,1,92,"Nom : "..str)
elseif selection==0 then txt="Largeur map : "
elseif selection==1 then txt="Hauteur map : "
elseif selection==2 then txt="Largeur tile : "
elseif selection==3 then txt="Longueur tile : "
end
screen.print(SCREEN_UP,1,92,txt..str)
if calc then affcalc() end
end



Il faut aussi inclure un tileset dans le dossier.




Cordialement,
StolenSoul.


Dernière édition par StolenSoul le Dim 5 Jan 2014 - 13:25; édité 5 fois
Revenir en haut
Publicité






MessagePosté le: Lun 3 Juin 2013 - 21:00    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Lun 3 Juin 2013 - 21:13    Sujet du message: Map Maker Répondre en citant

perso ça me plairait bien  Okay  ... de l'utiliser  Mr. Green
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Lun 3 Juin 2013 - 21:18    Sujet du message: Map Maker Répondre en citant

Comme je l'ai dit, il est très peu pratique, ce qui diminue grandement son intérêt. Après, j'essaierai de poster tout de même le code, pour ceux qui voudraient s'amuser à tester.

Revenir en haut
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Lun 3 Juin 2013 - 22:56    Sujet du message: Map Maker Répondre en citant

puis ce code pourrait toujours servir de base aux personne qui voudrait le debuger et améliorer. Ce serait un outil non négligeable pour MicroLua selon moi  Wink
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Mar 4 Juin 2013 - 00:42    Sujet du message: Map Maker Répondre en citant

je plussoie. 
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Mar 4 Juin 2013 - 14:00    Sujet du message: Map Maker Répondre en citant

Cela n'a rien de très compliqué; après, il est vrai que vu l'horrible code que j'ai fait, on ne peut que l'améliorer ^^
Disons que c'est pour donner l'idée.
Parce que je trouve que c'est tout de même plus pratique de pouvoir créer ses maps "visuellement", et pas seulement en nombre|nombre|nombre.
Après, si le programme ne prend pas trop de place, il serait peut être même possible d'en faire un accessoire/add-on dans un autre programme.


Revenir en haut
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Mar 4 Juin 2013 - 14:03    Sujet du message: Map Maker Répondre en citant

oui cela est vrai StolenSoul  Wink  bien qu'il existe déja un soft pas mal permettant le coté visuel du codage de la map qui fonctionne sur ordi " tiled " il s'appel le programme, mais je préférerai et de loin les réaliser directement sur DS comme cela on est sur de l'apparence une foi sur hardware  Mr. Green
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Mar 4 Juin 2013 - 14:09    Sujet du message: Map Maker Répondre en citant

 A vrai dire, la majeure partie de ma programmation, bien qu'au total cela ne représente presque rien, se fait directement sur DS. Cela évite de devoir aller sur un ordinateur (surtout si l'on en a pas à disposition), et aussi le transfert depuis l'ordinateur vers la carte SD.
Et tu as raison sur l'apparence, car les impressions sont très différentes selon que l'on regarde l'image sur un écran d'ordinateur ou de DS.
Mais bon, à moins que je ne trouve le temps de l'améliorer, il faudra d'abord que quelqu'un sorte une version utilisable de ce programme pour que cela puisse se faire ^^


Revenir en haut
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Mar 4 Juin 2013 - 14:14    Sujet du message: Map Maker Répondre en citant

j'ai lue ton code et il est facilement compréhensible malheureusement pour moi je ne suis pas encore très ( voir pas du tout ) à l'aise avec la gestion des fichiers, alors un programme de ce genre n'est pour le moment pas à ma porter mais je conserve le code au cas ou !!


pour ce qui est de coder sur DS je confirme que c'est pratique car, bien que codant uniquement sur PC, je galère pas mal à transferer car je suis obliger de mettre ma µsd dans un adaptateur pour carte Sony PSP de la brancher en usb sur mon ordi et après de transféré  Evil or Very Mad  c'est vraiment pas pratique  Laughing
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Mar 4 Juin 2013 - 14:20    Sujet du message: Map Maker Répondre en citant

 Je ne suis pas non plus à l'aise avec les fichiers, mais apparemment je me débrouillais au moment où j'ai fait ceci ^^
C'est d'ailleurs pour  cela que je ne pense pas chercher à l'améliorer, car j'ai oublié comment gérer les fichiers depuis ^^'

Oui, personnellement mon adaptateur µSD/USB ne fonctionne pas, donc je dois passer par mon téléphone ou tablette. Et sachant que je n'ai pas d'ordinateur quand je pars en vacances...
Donc c'est pour cela que je pense que cela pourrait être utile à plusieurs s'il était remis à jour.


Après, c'est vrai que le nombre d'améliorations à faire est assez grand et donc repoussant, rien que pour gérer les paramètres des tiles, il faudrait utiliser un clavier pour rentrer la hauteur/largeur, etc.
J'ai d'ailleurs une version encore plus buggée avec un clavier buggé, et je m'aperçois que je ne serais pas non plus capable de faire tout cela maintenant x)


Revenir en haut
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Mar 4 Juin 2013 - 14:25    Sujet du message: Map Maker Répondre en citant

en tout cas je te félicite pour ton initiative, c'est une super idée et je pense que cela pourrait être utile à pas mal de monde. Donc personnellement je met le code dans mon dossier de prog et de temps en temps j’essaierais de debugger et améliorer tout ça ce serait en même temps l'occasion d'en apprendre d'avantage  Wink
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
StolenSoul


Hors ligne

Inscrit le: 07 Avr 2012
Messages: 47

MessagePosté le: Mar 4 Juin 2013 - 14:30    Sujet du message: Map Maker Répondre en citant

 D'accord, bon courage à toi dans ce cas ^^

Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Mer 5 Juin 2013 - 09:50    Sujet du message: Map Maker Répondre en citant

J'avais déjà essayé un map maker, et c'était pas joli-joli, mais ça marchait Wink
Je vais peut-être reprendre celui-là ...
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Negi


Hors ligne

Inscrit le: 16 Avr 2013
Messages: 103
Localisation: Somewhere around Pluto

MessagePosté le: Mer 5 Juin 2013 - 11:55    Sujet du message: Map Maker Répondre en citant

Y'a d'l'idée, y'a d'l'idée n.n


geeker...T'as déjà repris LED, ça te suffit pas ? x)
_________________
Projet Actif : mkdz

φ

µStore
LLUL
Civi
HS-SRPG
Beaucoup d'autres...Trop T_T



Revenir en haut
Visiter le site web du posteur GTalk/Jabber
thomh@ck


Hors ligne

Inscrit le: 01 Aoû 2011
Messages: 360
Localisation: Notepad++

MessagePosté le: Mer 5 Juin 2013 - 12:12    Sujet du message: Map Maker Répondre en citant

bha,  tant qu'a faire plus il y a de personne qui reprenne le même projet plus il y a de chance d'en voir une version potable  Wink . Moi en tout cas je ne m'y attaque pas de suite car je suis déjà sur un petit projet que j'ai bientôt terminer ensuite je termine mon nouveau Homebrew et après j'essayerais de faire un Map maker en m'inspirant de celui-ci !
_________________
Vous aimez l'Origami ?


Revenir en haut
Visiter le site web du posteur
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:49    Sujet du message: Map Maker

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Projets Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2, 3  >
Page 1 sur 3

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com