countag
Nombre de messages : 57 Date d'inscription : 10/02/2006
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: editeur map Ven 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. | |
|
le_duche
![le_duche](https://2img.net/u/1612/42/45/74/avatars/5-56.jpg)
Nombre de messages : 60 Age : 39 Localisation : Bruxelles Date d'inscription : 07/12/2005
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Sam 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 ! | |
|
countag
Nombre de messages : 57 Date d'inscription : 10/02/2006
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Sam 11 Fév à 7:53 | |
| c est bon j ai reussi, je poste les nouvelles sources des que je peux ![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif) , mon editeur avance bien je pense :p. Vous me dirai ce que vous en pensez ![Very Happy](https://2img.net/i/fa/i/smiles/icon_biggrin.png) | |
|
countag
Nombre de messages : 57 Date d'inscription : 10/02/2006
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Sam 11 Fév à 9:56 | |
| Voila : http://perso.wanadoo.fr/countag/editeurcarte.zip je vais continuer l editeur n hesite pas a commenter ![Smile](https://2img.net/i/fa/i/smiles/icon_smile.gif) | |
|
countag
Nombre de messages : 57 Date d'inscription : 10/02/2006
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Dim 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 :/ | |
|
le_duche
![le_duche](https://2img.net/u/1612/42/45/74/avatars/5-56.jpg)
Nombre de messages : 60 Age : 39 Localisation : Bruxelles Date d'inscription : 07/12/2005
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Dim 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... | |
|
countag
Nombre de messages : 57 Date d'inscription : 10/02/2006
![editeur map Empty](https://2img.net/i/empty.gif) | Sujet: Re: editeur map Mer 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 | |
|