Premier jeu last defenders nom provisoire aides en tout genre - By JFT

Author :  JFT

Bonjour,
Je suis en train de porter un jeu que j'avais créé sur TI89 en TI-BASIC.
Jeu un peu typé arcade où le but est de gagner un max de point en protégeant une "machine" attaquée par des ennemis.
Je vous en parlera plus si vous le souhaitez :)

J'ai déjà demandé un peu d'aide dans d'autres topics mais mieux vaut  que je créé le mien désormais.

Author :  JFT

Premièrement,

Je souhaiterais savoir comment avoir une chaîne de caractères contenant une valeur de variable.
Cela me sera sûrement utile pour la gestion de mes sprites.
Par exemple j'ai 3 sprites nommés sp1, sp2 et sp3.
En fonction de la valeur d'une variable i (qui va de 1 Ă  3), je souhaite afficher gb.display.drawImage(x, y, "sp+i"); .
Comment gérer cela ?

Idem si je souhaite avoir plusieurs fichiers .INO avec le même préfixe, par exemple truc1.INO, truc2.INO, truc3.INO.
Puis-je appeler un fichier en fonction de la variable i ? "truc+i"();

Cela m'avait été utile de faire ça sur ma TI89 et j'aimerais bien savoir si c'est possible pour ma Gamebuino car j'aime bien cette méthode.

Merci d'avance

Author :  Codnpix

En fonction de la valeur d'une variable i (qui va de 1 Ă  3), je souhaite afficher gb.display.drawImage(x, y, "sp+i"); .
Comment gérer cela ?

Bonjour, en général je crois que quand tu es dans une situation ou tu voudrais pouvoir fabriquer une chaîne de caractères pour appeler une variable il faut penser : "je devrais plutôt faire un tableau". Par exemple tu fais un tableau dont chaque élément pointe vers chacun de tes sprites et tu le parcours avec ton "i" pour accéder à celui que tu veux.

Pour les fichiers .ino par contre je ne suis pas sûr de comprendre ce que tu veux faire. En tout cas dans l'IDE Arduino tu ne peux pas "réellement" avoir plusieurs fichiers, tu peux juste découper ton fichier en plusieurs morceaux et donner l'impression que tu travailles sur plusieurs fichiers, mais ensuite au moment de compiler, les morceaux sont recollés dans l'ordre alphabétique de leur nom. Du coup il faut bien faire attention à comment tu les nommes pour ne pas avoir d'erreur de compilation. Mais tu ne peux pas faire vraiment une programmation modulaire juste en utilisant des .ino. Pour faire ça il vaut mieux créer des fichiers .h et .cpp puis faire des #include aux bons endroits.

J'espère que ça t'aide un peu :). Bon courage pour le développement de ton jeu !

Author :  JFT

Salut, Merci. Pour le tableau, c'est fait, j'en ai un pour gérer mes ennemis.
Simplement, comme j'ai des boucles d'animation faites manuellement, j'appelle plusieurs images à la suite. Et donc, en fonction de l'avancement de mon anim, je voulais appeler la bonne image. Imaginons que j'ai 3 étapes d'anim, au lieu de faire un "if étape = 1, 2 ou 3" alors afficher image1, image2 ou image3 je souhaite faire tout simplement "afficher 'image'+'variable comprise entre 1 et 3'". Donc juste rassembler la chaîne de caractères "image" et le chiffre correspondant au numéro d'image (variable).
Je vais continuer Ă  faire mes recherches :)

Author :  jicehel

Tu peux mettre tes noms d'images dans des tableaux de chaines.

Si par exemple tu as une animation que tu vas appeler "Marche", tu peux faire

string Marche[3];

Marche[0]="image1";

Marche[1]="image4";

Marche[2]="image7";

Tu peux même le paramétrer de manière plus rapide lors de la création de ton tableau.

Comme ça: string Marche[3]={"image1","image4","image7"};




Author :  JFT

Ah je n’avais pas pensé à ça. Je vais regarder merci.

Author :  makerSquirrel

I am looking forward to your game! Sounds pretty interesting, for help I think our french-speaking friends here will help you much more than I could, so:

bonne chance!

Author :  JFT

Thank you MakerSqirrel ! I should talk only English.

Author :  JFT

I think I’ll release at first a playable version then I’ll try to enhance it with better graphics.

Author :  jicehel

Nice  ;) 


Author :  JFT

Can I use my string element in gb.display ?
I would like to do this for example :
gb.display.drawImage(X,Y, Marche[1]);
But it doesn't work.

Author :  makerSquirrel

Is the string a path/filename like "texture.bmp" that you place on the SD card? if yes, simply do something like that:

gb.display.drawImage(X,Y, Image(Marche[1]));

If you mean something else, sorry I do not understand ;)

(more details in that tutorial: https://gamebuino.com/academy/standalone/add-images-to-your-games , reminder: if you have a tutorial page open, you can switch between english and french explanation by scrolling to the page end and click on the corresponding language button)

Author :  Steph

I think I understood what you were trying to reproduce: -)

You are referring to the notion of a dynamic variable that is found, for example, in PHP :
http://php.net/manual/en/language.variables.variable.php

This notion does not exist in C++. You can imitate it by using tables, as Jicehel told you.

You can also review the documentation suggested by makerSquirrel and orient yourself towards the use of Spritesheets. In particular, the void Image::setFrame(uint16_t frame) function will allow you to easily display the sprite of your choice at the desired time.

Author :  Sorunome

grumbles something about templates and that it should auto-create a temporary image

https://github.com/Gamebuino/Gamebuino-META/blob/master/src/utility/Graphics/Graphics.h#L106-L120

Author :  JFT

@jicehel :
My images are not BMP but created in the code with const uint16_t myimageData[].
If I use string Marche[3]={"image1","image4","image7"}; :
How can I call image4 for example, as gb.display.drawImage(X,Y, Marche[4]); is not working ?

Steph understood what I wanted to do, but he said it's not possible...
I'm not very good for explaning, sorry.
Let's take a simple example to make understand what was I wanted :
I create 2 images defined with const uint16_t img0Data[] and  const uint16_t img1Data[]
short r = random(2);
gb.display.drawImage(X,Y, "img+r");
// "img+r" is not correct, just a way to represent what I wanted
// I wanted to get the string of the r variable and add it at the end of the string "img" to have the name of one of the 2 images (img0 or img1) to call them, so with only 1 line I can display an image among severals thanks to 1 variable

Author :  Alban

Hi JFT,

If you look at the interface of drawImage (https://gamebuino.com/academy/reference/graphics-drawimage), you'll see that it doesn't take a string as its 3rd argument, but an Image. "img12" is a string. "Image foobar" (without quotes) declares a container to an in-memory buffer.

So, if you want to loop over in-memory images for a walk animation, you could probably do something like :


Image img1 = ...
...
Image img4 = ...
Image animation[] = {img1, img2, img3, img4};
#define IMAGE_COUNT 4
uint32_t iteration(0)
[...]
// game loop
{
[...]
gb.display.drawImage(X,Y, animation[iteration%IMAGE_COUNT]);
++iteration;
[...]
}

And if for some reason you need to write an index within a string (which is NOT what you have to do in your case), up to index 9 you can do something like :

char * myString = "foobarX"; // character 'X' is at position 6, 0-based

int index = 4;

myString[6] = '0'+index; // myString holds "foobar4", as we have replaced the 6th character by character '0' offset by 4 units, which is character '4'

Author :  JFT

thank you all, I'll check this later. I'm at work but I wanted to thanks :)
Author :  jicehel

This example is more complete than the solution i gave and more easy to modify.

If you have all your sprite and you want reuse some in the animation you want do then you have to manage the array with the number of the frames in your animation

uint16_t Marche[3]={1,4,8};

After you have to replace in last prog the gestion of the frame by the next frame in this array (can be done with a few modifications)

(With the example given by steph, it's not useful as the frame are a same sequence it's could really only have a sens if you had alot srites to use often in your animations else duplicate pictures with the full animation if you don't have a memory need)



Author :  JFT

I had a computer crash and the code on my main file disapeared, it's now empty...
I uploaded it before the crash on my gamebuino Meta. Is it possible to recover it from the Gamebuino to the PC ?
Thank you

Author :  Steph

Unfortunately, the code uploaded to the META has been compiled. The source code was on your PC.

I encourage you to use GitHub to manage your projects. That way, you'll always have a copy of your projects in the cloud!