Bonjour a tous,
J'ai un projet a réaliser qui consiste a recoder le celebre jeu Snake en C++, avec pour GUI Qt.
Le 'core' de mon programme est deja code, il me transmet en parametre un tableau en deux dimensions d'entiers contenant des entiers (oh really?) allant de 0 a 7, chaque entier correspondant a un element du jeu (0 = vide, 1 = mur, 2 = queue du serpent, 3 = corps, 4 = tete et 7 = pomme).
Le tableau de depart est celui ci :
Mon problème est le suivant :
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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 3 3 4 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
je souhaite pouvoir parcourir ce tableau d'entiers en affichant a chaque valeur rencontrée (0,1,2,3 ...) l'image qui lui correspond. J'ai déjà essaye et réussi a le faire en utilisant QGraphicsScenem QGraphicsView et QGraphicsItem.
L'affichage est le suivant :
Voila le code d’implémentation des images :
Je parcours mon tableau de case en case en checkant quel entier est contenu dans la case, et en y placant l'item (et donc l'image) correspondant, a la largeur (width) et la hauteur (heigth) donnée. Puis je décale la largeur de 20, les images faisant elles mêmes 20 pixels.
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 QGraphicsItem *item; QPixmap image; int width = 0; int heigth = 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (tab[i][j] == 1) { image.load("./res/mur.png", 0, Qt::AutoColor); item = scene->addPixmap(image); item->setPos(width, heigth); width += 20; } if (tab[i][j] == 4) { image.load("./res/tete.png", 0, Qt::AutoColor); item = scene->addPixmap(image); item->setPos(width, heigth); width += 20; } if (tab[i][j] == 2) { image.load("./res/queue.png", 0, Qt::AutoColor); item = scene->addPixmap(image); item->setPos(width, heigth); width += 20; } if (tab[i][j] == 3) { image.load("./res/corps.png", 0, Qt::AutoColor); item = scene->addPixmap(image); item->setPos(width, heigth); width += 20; } if (tab[i][j] == 7) { image.load("./res/apple.jpg", 0, Qt::AutoColor); item = scene->addPixmap(image); item->setPos(width, heigth); width += 20; } if (tab[i][j] == 0) width += 20; } heigth += 20; width = 0; } }
Si la case contient un 0, elle est donc vide, il n'y a rien a afficher, je decale la largeur de 20 et passe a la case suivante.
Mais lorsque je modifie la position de mon serpent, c'est a dire en modifiant la position des 2, 3 et 4 dans mon tableau, l'affichage dans ma fenetre lui ne bouge pas. Il reste tel qu'il est sur le screen ci dessus. En clair ma fenêtre n'est pas animée, elle reste a la position initiale du tableau.
Je pense que les items une fois positionnés dans ma scène, ne peuvent pas être chevauchés par de nouveaux items, et ainsi l'image reste fixe. Mais étant un débutant total en Qt, je ne suis pas du tout sur de ce raisonnement et surtout je n'ai aucune idée de comment résoudre mon problème.
Merci d'avance pour les réponses que vous pourrez m'apporter![]()
Partager