Page 1 of 9

Jetpack Impossible

Unread postPosted: 15 May 2014, 08:47
by Hayleia
Non, vous ne rêvez pas. Non, vous ne cauchemardez pas non plus. Bon, bref, oui c'est la vraie vie, oui je programme sur Nspire aussi maintenant.

Voici donc mon premier projet sur Nspire (l'inversion de matrice par le pivot de Gauss ne compte pas comme un projet), Jetpack Impossible, du nom du jeu pour smartdevices.

Votre but est d'aider l'astronaute à collecter un maximum de boules vertes avant de se faire tuer par une météorite (pourquoi faire un scénario quand on peut juste faire un jeu ?). Vous avez pour cela votre Jetpack et ses deux boutons qui vous permettent d'aller vers le haut (l'un pousse plus vers la droite, l'autre plus vers la gauche), et vous comptez sur la gravité pour redescendre (logique la gravité dans l'espace quand il n'y a rien en dessous de vous). Notez que vous êtes invincible avant d'attraper votre première boule verte (qui veut jouer au jeu des 7 incohérences physiques ?) et que vous pouvez passer de la droite vers la gauche, du haut vers le bas et inversement.

Un screenshot vaut mieux qu'un long discours donc en voici un.
Image

À faire:
-sauvegarde du highscore
-affichages propres du score (je parle du truc qui vous affiche quelle médaille vous avez quand vous perdez) ?
-menu (pourquoi faire ?) ?

Je remercie en passant pierrotdu18 pour son jeu Flappy Bird dont le code m'a été très utile pour apprendre à me servir de nSDL, ainsi que pour la police d'écriture qu'il utilise dans son programme que j'ai moi aussi utilisée ici.

Lien de téléchargement: http://ti-pla.net/a59790

PS: n'hésitez pas à regarder le code source et à me dire ce qui est ridicule dedans, si vous me laissez faire n'importe quoi je continuerais à faire n'importe quoi.

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:13
by pierrotdu18
Ah ah ça a l'air pas mal! :)
Et de rien pour la police :D Des que j'ai vu le screen je me suis dit "eh mais c'est ma police!" :p Et btw, encore un grand merci à Lepzulnag grâce à qui la création de polices personnalisées est désormais possible et très simplifiée.

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:21
by Hayleia
pierrotdu18 wrote:Ah ah ça a l'air pas mal! :)
Et de rien pour la police :D Des que j'ai vu le screen je me suis dit "eh mais c'est ma police!" :p Et btw, encore un grand merci à Lepzulnag grâce à qui la création de polices personnalisées est désormais possible et très simplifiée.

Merci à vous deux dans ce cas ^^

Et au fait, je n'ai pas testé sur Nspire monochrome (puisque je n'en ai pas) donc je ne sais pas s'il marche et s'il est jouable avec ces couleurs.

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:25
by pierrotdu18
Normalement, oui, car tu as repris la ligne
Code: Select all
screen=SDL_SetVideoMode(320,240,has_colors?16:8,SDL_SWSURFACE);
:)
Sinon, sers toi du petit truc de matref pour essayer en émulation pour la monochrome ;)

Je vais tester sur ma Nspire avec Ndless 3.6, mais il n'y a aucune raison pour que cela ne marche pas... ;)

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:31
by Hayleia
pierrotdu18 wrote:Normalement, oui, car tu as repris la ligne
Code: Select all
screen=SDL_SetVideoMode(320,240,has_colors?16:8,SDL_SWSURFACE);
:)
Sinon, sers toi du petit truc de matref pour essayer en émulation pour la monochrome ;)
Ah oui, j'avais oublié ça. Je viens de tester donc, et ça a l'air de marcher, avec juste trois problèmes:
-beaucoup plus de lag o.o
-le score s'affiche mais ne n'efface pas (donc le 0 est lisible, le 1 est écrit au dessus du 0 et on commence à ne rien comprendre, etc)
-on ne voit pas trop la différence entre les verts et les orange, mais au pire on sait que les verts sont ceux qui ne bougent pas.

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:40
by pierrotdu18
Les lags... Eh bien...
Je sais pas :p

Sinon, pour le score, au lieu de faire SDL_FillRect(screen,NULL,0);, crées une SDL_Surface* background, que tu rempliras de noir au début et que tu n'auras plus qu'à flipper à chaque itération sans la ré-remplir de noir ;) Je pense que ça marchera ensuite.
Sinon, pour que le flip soit plus rapide, fais ce que j'ai fait au début de mon code, des SDL_DisplayFormatAlpha sur chacune de tes surface au début, ça les convertit pour qu'elles soient adaptées au format de ton écran et qu'elles n'aient pas besoin d'être converties à chaque blitt.
Ensuite, pour les couleurs, je te conseille de charger d'autres sprites. Genre, pour le vert, tu fais
Code: Select all
if (has_color) {//charger sprite_cx} else {//charger sprite_monochrome}

Et pour les monochromes, retouches toi des images avec des nuances de gris bien visibles comme ça on verra bien la différence...

Voilà :)

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:47
by Adriweb
Joli :)

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 09:59
by Lepzulnag
Super ;)

Le code est bon, rien ne m'a choqué. Mini-détail d'écriture, je ne sais pas si tu le fais exprès pour que ça soit plus lisible pour toi, mais tu peux remplacer :
Code: Select all
while (K_7||K_9) {}

par :
Code: Select all
while (K_7||K_9);

Et de même tu peux tout simplement enlever les accolades dans les lignes de ce type :
Code: Select all
if (K_ENTER) {score++;}

Si tu ne mets pas d'accolades après un
if
,
while
,
do
, etc... seule la commande suivante sera affectée.

Ensuite je n'ai pas tout à fait compris ton histoire "d'ombres". Je ne vois pas d'ombres quand je lance le jeu.

Et enfin (et cela s'adresse aussi à Pierrotdu18 pour son Flappy Bird :D) cela me faisait trop mal aux yeux de voir chargée une énorme police, alors que tu n'utilises que les dix caractères numériques, alors j'ai créé une fonction
nSDL_LoadNumericFont
(du même genre que
nSDL_LoadCustomFont
), mais qui ne prend en argument qu'un tableau contenant les dix caractères-chiffres. Dans ton
fonts.h
tu pourras ainsi supprimer toutes tes lignes de 0, et gagner beaucoup de kilo-octets de mémoire (27 ko si tu n'utilises que la mini-font) !!

Voici la nouvelle archive contenant la fonction
nSDL_LoadNumericFont
:
http://tiplanet.org/forum/archives_voir.php?id=46058

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 10:31
by Hayleia
pierrotdu18 wrote:Les lags... Eh bien...
Je sais pas :p

Sinon, pour le score, au lieu de faire SDL_FillRect(screen,NULL,0);, crées une SDL_Surface* background, que tu rempliras de noir au début et que tu n'auras plus qu'à flipper à chaque itération sans la ré-remplir de noir ;) Je pense que ça marchera ensuite.

Ça ne règlera pas du tout le problème du score puisque je ne fais jamais DSL_FillRect(screen,NULL,0) dans la boucle principale.

pierrotdu18 wrote:Sinon, pour que le flip soit plus rapide, fais ce que j'ai fait au début de mon code, des SDL_DisplayFormatAlpha sur chacune de tes surface au début, ça les convertit pour qu'elles soient adaptées au format de ton écran et qu'elles n'aient pas besoin d'être converties à chaque blitt.
Ensuite, pour les couleurs, je te conseille de charger d'autres sprites. Genre, pour le vert, tu fais
if (has_color) {//charger sprite_cx} else {//charger sprite_monochrome}
Et pour les monochromes, retouches toi des images avec des nuances de gris bien visibles comme ça on verra bien la différence...

Ok, je vais voir pour ces deux là, merci :)

Lepzulnag wrote:Le code est bon, rien ne m'a choqué. Mini-détail d'écriture, je ne sais pas si tu le fais exprès pour que ça soit plus lisible pour toi, mais tu peux remplacer :
...
Si tu ne mets pas d'accolades après un
if
,
while
,
do
, etc... seule la commande suivante sera affectée.
Pour le if, c'est fait exprès, je trouve ça plus lisible. Par contre pour le while, ça rend quand même beaucoup mieux comme tu le dis, merci pour le conseil :)

Lepzulnag wrote:Ensuite je n'ai pas tout à fait compris ton histoire "d'ombres". Je ne vois pas d'ombres quand je lance le jeu
Non mais j'ai appelé ça "shadow" parce que je ne savais pas comment l'appeler :P
En fait c'est la sprite "blabla_shadow" est la même que la sprite "blabla" mais en tout noir. Je m'en sers pour effacer la sprite (vu que le fond est noir aussi), mais ce n'est effectivement pas vraiment une ombre.

Lepzulnag wrote:Et enfin (et cela s'adresse aussi à Pierrotdu18 pour son Flappy Bird :D) cela me faisait trop mal aux yeux de voir chargée une énorme police, alors que tu n'utilises que les dix caractères numériques, alors j'ai créé une fonction
nSDL_LoadNumericFont
(du même genre que
nSDL_LoadCustomFont
), mais qui ne prend en argument qu'un tableau contenant les dix caractères-chiffres. Dans ton
fonts.h
tu pourras ainsi supprimer toutes tes lignes de 0, et gagner beaucoup de kilo-octets de mémoire (27 ko si tu n'utilises que la mini-font) !!
Super, je verrais ça après avoir réglé les autres problèmes (l'autre méthode gâche de la place mais fonctionne donc ce n'est pas prioritaire de la changer ;)).

Lepzulnag wrote:Super ;)
Adriweb wrote:Joli :)

Merci ^^

Re: Jetpack Impossible

Unread postPosted: 15 May 2014, 11:08
by pierrotdu18
Moi comme j'ai une image de fond, je ne peux pas faire de "shadow" comme toi mais si tu tiens à faire comme ça, peut être que tu devrais créer une shadow pour le texte, de 60*30 par exemple que tu pourrais blitter à chaque itération de la boucle principale pour effacer le texte....