Virtual FMAN forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Virtual FMAN forum

Virtual FMAN forum
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-15%
Le deal à ne pas rater :
-15% Apple MacBook Air 13” 16Go RAM / 256Go SSD Puce M3(+200€ ...
1299 € 1529 €
Voir le deal

 

 editeur map

Aller en bas 
2 participants
AuteurMessage
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

editeur map Empty
MessageSujet: editeur map   editeur map EmptyVen 10 Fév à 13:12

Bonjour,

voila je coince un peu, enfin je voudrais des conseils, j ai commencer un editeur de map 2D mais j ai coder un peu a la barbare et tous dans un meme fichier mais j ai peur de tout confondre en faisant plusieur fichier et je crois que je dois faire des struct enfin je suis un peu perdu, voici mon code :

Code:

#include <SDL/SDL.h>
#include <iostream>
#include "main.h"

#define TILE 32

SDL_Surface *screen;
SDL_Surface *image;
SDL_Surface *selection;
SDL_Surface *Separation;
SDL_Surface *text;
SDL_Event event; 

SDL_Rect Rimage1=Rect(32,0,32,32);        //Cree un rectangle nomme "Rimage1"
SDL_Rect Rimage2=Rect(32,0,32,32);

bool mousepressed;

using namespace std;

int main(int argc, char **argv)
{
    /*DECLARATION DE X ET Y DE LA SOURIS*/
    int x;
    int y;
    /*******FIN DECLARATION**************/
    Init();
    image=SDL_LoadBMP("mchip1.bmp");        //Charge une image sur la Surface "image" 
    selection=SDL_LoadBMP("selection.bmp"); 
    SDL_SetColorKey(selection,SDL_SRCCOLORKEY ,SDL_MapRGBA(selection->format,255,255,255,0));
    Separation=SDL_LoadBMP("separation.bmp");
    menu_tile();
    separation();                              //Initialisation de la fenetre
    SDL_BlitSurface(image,&Rimage2,screen,&Rimage1);    //Copie l image sur l ecran, on ne prend que la taille de Rimage2 de l image pour la mettre sur l' ecran
    while(1)   //Boucle d evenement
   {   
      while(SDL_PollEvent(&event))   
      {                                         
         if (event.type == SDL_KEYDOWN)  //appuie sur une touche
         {
            if (event.key.keysym.sym == SDLK_ESCAPE) return 0;  //Ferme le programme
            if (event.key.keysym.sym == SDLK_s)
                {
/******************************REMPLI L ECRAN********************************
****************************DU TILE SELECTIONNE******************************/
                   int i;
                   int j;
                   Rimage1.y = 0;
                   for(j=0; j<=18; j++)
                   {
                         Rimage1.x = 128;           
                         for(i=0; i<=19; i++)
                         {
                             Rimage1.x = Rimage1.x + 32;   
                             SDL_BlitSurface(image,&Rimage2,screen,&Rimage1);
                         }
                     Rimage1.y = Rimage1.y + 32; 
                   }
/******************************FIN REMPLISSAGE*******************************
*****************************************************************************/
                }
            }
            if (event.type == SDL_MOUSEBUTTONDOWN)  //appuie sur un boutton de la souris
            {                             
                if(event.button.button == SDL_BUTTON_MIDDLE) return 0;  //si boutton du milieu alors on ferme le programme
                  if(event.button.button == SDL_BUTTON_LEFT)
                  {               
/*************************REMPLI LE CARREAU OU LA SOURIS A*******************************
**************************CLIQUE AVEC LE TILE SELECTIONNE********************************/
                      mousepressed = true;
                      x = event.button.x;
                      y = event.button.y;
                      if(x>=160)
                      {   
                          Rimage2.w = 32;
                          Rimage1.x = (24-((800-x)/TILE))*TILE ;
                          Rimage2.w = Rimage2.w;
                          Rimage1.y = (18-((600-y)/TILE))*TILE ;
                          SDL_BlitSurface(image,&Rimage2,screen,&Rimage1);
                      }
                      if(x<=128 & y<=160)    //Selectionne un TILE dans le menu
                      { 
                           menu_tile();
                          separation();   
                          Rimage2.x = (24-((800-x)/TILE))*TILE;
                          Rimage2.y = (18-((600-y)/TILE))*TILE;
                          Rimage1.x = 0;
                          Rimage1.y = 0;
                          SDL_BlitSurface(selection,&Rimage1,screen,&Rimage2);   
                      }                                                                         
/******************************FIN REMPLISSAGE*******************************
*****************************************************************************/                           
                  }
                  if(event.button.button == SDL_BUTTON_RIGHT) //Efface tous l ecran
                  {
                      SDL_FillRect(screen,NULL,0);
                       menu_tile();
                       separation();
                  }             
              }
              if (event.type == SDL_MOUSEBUTTONUP) mousepressed = false;
              if (event.type == SDL_MOUSEMOTION)
              {
                  if(mousepressed == true)
                  {
                      x = event.button.x;
                      y = event.button.y;
                      if(x>=160)
                      {   
                          Rimage2.w = 32;
                          Rimage1.x = (24-((800-x)/TILE))*TILE ;
                          Rimage2.w = Rimage2.w;
                          Rimage1.y = (18-((600-y)/TILE))*TILE ;
                          SDL_BlitSurface(image,&Rimage2,screen,&Rimage1);
                      }
                      if(x<=128 & y<=160)    //Selectionne un TILE dans le menu
                      { 
                           menu_tile();
                          separation();   
                          Rimage2.x = (24-((800-x)/TILE))*TILE;
                          Rimage2.y = (18-((600-y)/TILE))*TILE;
                          Rimage1.x = 0;
                          Rimage1.y = 0;                 
                          SDL_BlitSurface(selection,&Rimage1,screen,&Rimage2);   
                      }                   
                  }                           
              }
      } 
        Rimage2.w = 32;
       Rimage2.h = 32;
         SDL_Flip(screen);       
   }
   SDL_Quit();
   return 0;
}

/************************    Image de separation entre le menu et la carte            ************************************/
void separation()
{
    Rimage2.x = 128;
    Rimage2.y = 0;
    SDL_BlitSurface(Separation,NULL,screen,&Rimage2);           
}   
/************************      FIN          ************************************/
   
/************************      AFFICHAGE DU MENU DES TILE          ************************************/
void menu_tile()
{
    int y;
    int z;
    Rimage1.x = 0;
    Rimage1.y = 0;
    Rimage2.w = 31;
    Rimage2.h = 31;
    Rimage2.x = 0;
    Rimage2.y = 0;
     for(y=0; y<=4; y++)
     {   
        Rimage1.x = 0; 
        Rimage2.x = Rimage1.x;             
         for(z=0; z<=3; z++)
         {
             SDL_BlitSurface(image,&Rimage2,screen,&Rimage1);
             Rimage1.x = Rimage1.x +32;
             Rimage2.x = Rimage1.x;
         }
         Rimage1.y = Rimage1.y + 32;
        Rimage2.y = Rimage1.y; 
     }
}
/************************      FIN          ************************************/


void Init()
{
    SDL_Init(SDL_INIT_VIDEO);                      //initialise la video
    screen = SDL_SetVideoMode(800, 600, 16, SDL_HWSURFACE|SDL_DOUBLEBUF);  //cree la fenetre
    SDL_WM_SetCaption("RPG 2D","TEAM THORN");        //donne un nom a la fenetre
}

SDL_Rect Rect(int x,int y,int w,int h)      //pour creer des rectangles plus vite :p
{
   SDL_Rect r;
   r.x=x;
   r.y=y;
   r.w=w;
   r.h=h;
   return r;
}
       

je sais pas par ou commencer pour refaire tous mon code en faisant un fichier : main.cpp main.h map.cpp et map.h je pense que c est bon avec ca.
Revenir en haut Aller en bas
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptySam 11 Fév à 5:09

Je ne suis pas chez moi là, je posterai lundi (si je n'oublie pas) une code avec les structures et ce que j'utilise pour la gestion de la souris et du clavier. C'est assez simple !

De facon générale, ton code est assez flou et tes commentaires ne servent à rien, tu ne fais que traduire l'effet des fonctions que tu appelles mais pas l'idée que tu as derière la tête... et c'est ca qui est important pour comprendre la code !
Revenir en haut Aller en bas
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptySam 11 Fév à 7:53

c est bon j ai reussi, je poste les nouvelles sources des que je peux Smile, mon editeur avance bien je pense :p.

Vous me dirai ce que vous en pensez Very Happy
Revenir en haut Aller en bas
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptySam 11 Fév à 9:56

Voila :

http://perso.wanadoo.fr/countag/editeurcarte.zip

je vais continuer l editeur n hesite pas a commenter Smile
Revenir en haut Aller en bas
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptyDim 12 Fév à 9:01

vous pouvez me dire tous ce qui a modifier pour l instant ? merci :p car pour la suite j ai des truc qui vont pas etre possible je pense :/
Revenir en haut Aller en bas
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptyDim 12 Fév à 9:23

Ha zut j'ai oublié...
Mais je suis en train de retoucher ca, j'ai eu une idée de génie, et je refait ma gestion clvier/souris...
Revenir en haut Aller en bas
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

editeur map Empty
MessageSujet: Re: editeur map   editeur map EmptyMer 22 Fév à 1:41

bon la j ai un petit probleme de logique plutot pour mes tableaux, je voudrais stocker le Tile0 avec ses coordonne x et y, et quand je l apel il me renvoi ses coordonne aussi.

par exemple je stock ca :

tile0 32,0
tile1 64,0
tile2 128,0
tile3 32,32
tile4 64,32

etc

et quand je veux le tile2 il me renvoie 128 et 0

mais je vois pas trop comment faire avec les stuct c etait un tableau mais le tableau etait le stuct lol mais sur les classes on peut pas aparament
Revenir en haut Aller en bas
Contenu sponsorisé





editeur map Empty
MessageSujet: Re: editeur map   editeur map Empty

Revenir en haut Aller en bas
 
editeur map
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Editeur de carte

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Virtual FMAN forum :: Tutorial C++ :: SDL-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser