Bonjour, il se trouve que j'ai un problème assez génant. Bien que le programme soit loin d'être fini je vous donne le code afin que vous puissiez me dire d'ou provient l'erreur (du moins j'espere). Le code est très long à lire donc je vous conseille de lire que les parties "importantes". Merci de votre aide.
Voici mon main
Voici ma classe rectangle (je vous la donne mais je ne pense pas que se soit le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include "Menu.h" int main() { initialisations(); Rectangle tmp(0,0,SCREEN_W/2,SCREEN_H/2, makecol(100,100,100)); Rectangle fond_rect(0,0,SCREEN_W-1,SCREEN_H-1,makecol(255,255,0)); Menu_Object img(2,0,tmp,true); Menu_Object fond(2,1,fond_rect); std::vector<Menu_Object> vect; vect.push_back(fond); vect.push_back(img); Menu menu(vect); menu.get_menu_object(1).set_visible(false); if(menu.get_menu_object(1).get_visible()) allegro_message("error"); show_mouse(screen); boucle(menu,NULL); return 0; }
Voici ma classe Menu_Object
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #ifndef DEF_RECTANGLE #define DEF_RECTANGLE #include <allegro.h> #include <string> #include "Structures_menu.h" class Rectangle { private : struct Emplacement position; BITMAP*fond; int col_fond; bool redim; int col_bordure; public : Rectangle(double,double,double,double,int, BITMAP*, int=-1); Rectangle(double,double,double,double, BITMAP*, int=-1); Rectangle(double,double,double,double,int, char*, int=-1); Rectangle(double,double,double,double, char*, int=-1); Rectangle(double,double,double,double,int, std::string, int=-1); Rectangle(double,double,double,double, std::string, int=-1); Rectangle(double,double,double,double, int=makecol(0,0,0), int=-1); Rectangle(); bool is_in_rectangle(double,double); bool is_in_rectangle(int,int); BITMAP*get_bitmap_de_fond(); bool set_bitmap_de_fond(BITMAP*,bool); bool set_bitmap_de_fond(char*,bool); bool set_bitmap_de_fond(std::string, bool); int get_col_fond(); bool set_col_fond(int); bool get_redim(); bool set_bordure_col(int); int get_bordure_col(); bool move_rectangle(int nb, std::string ); bool move_rectangle(int nb, char* ); bool set_rectangle(struct Emplacement); Emplacement get_pos(); }; #endif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #ifndef DEF_MENU_OBJECT #define DEF_MENU_OBJECT #include <vector> using std::vector; #include <allegro.h> #include "Rectangle.h" class Menu_Object { protected : int type; bool selection; int ordre; bool visible; Rectangle zone; public : Menu_Object(int,int,Rectangle&,bool=true); int get_ordre(); int get_type(); void set_ordre(int); bool get_selection(); void set_selection(bool); bool get_visible(); void set_visible(bool); Rectangle get_rectangle(); virtual void dessiner(); }; #endif
Je vous donne aussi son .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 #include "Menu_Object.h" #include "Rectangle.h" #include <algorithm> Menu_Object::Menu_Object(int type, int ordre, Rectangle& rect, bool visib) { this->type=type; this->ordre=ordre; zone=rect; visible=visib; } int Menu_Object::get_ordre() { return ordre; } int Menu_Object::get_type() { return type; } void Menu_Object::set_ordre(int ordre) { this->ordre=ordre; } bool Menu_Object::get_selection() { return selection; } void Menu_Object::set_selection(bool setting) { selection=setting; } bool Menu_Object::get_visible() { return visible; } void Menu_Object::set_visible(bool visible) { this->visible=visible; } Rectangle Menu_Object::get_rectangle() { return zone; } void Menu_Object::dessiner() { if(visible==false) return ; if(zone.get_bitmap_de_fond()==NULL) rectfill(screen,zone.get_pos().x1,zone.get_pos().y1, zone.get_pos().x2,zone.get_pos().y2,zone.get_col_fond()); else { if((zone.get_redim()==false)||(zone.get_col_fond()<0)) { masked_stretch_blit(zone.get_bitmap_de_fond(),screen,0,0, zone.get_bitmap_de_fond()->w,zone.get_bitmap_de_fond()->h, zone.get_pos().x1,zone.get_pos().y1, zone.get_pos().x2-zone.get_pos().x1, zone.get_pos().y2-zone.get_pos().y1); } } }
Et pour finir je vous donne la classe Menu
Je rajoute get_menu_object :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #ifndef DEF_MENU #define DEF_MENU #include <allegro.h> #include "Menu_Object.h" class Menu { private : vector<Menu_Object> MyMenu; bool(*fc_to_exit)(Menu&, void*); void(*exit_function)(Menu,void*); public : Menu(vector<Menu_Object>, void(*exit_function)(Menu,void*)=NULL); Menu(Menu_Object, void(*exit_function)(Menu,void*)=NULL); void set_fc_to_exit(bool(*)(Menu&,void*)); bool do_fc_to_exit(void*); void add_object(Menu_Object); int get_num_objects(); Menu_Object& get_menu_object(int); void exit_fc(void*param); bool is_on_object(int,double, double); void dessiner(); }; #endif
Et voila.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Menu_Object& Menu::get_menu_object(int object) { if((object>=MyMenu.size())||(object<0)) { allegro_message("error get_menu_object"); return MyMenu[0]; } Menu_Object reference=MyMenu[object]; return reference; }
Et le problème s'est qu'il m'affiche le message error (voir ligne rouge dans le main).
Merci pour votre aide.
Partager