Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Jeux >> Graph 35+USB/75(+E)/85/95 SD >> Add-ins >> Essai
Essai
Version : 0 Taille : 23000 octets Ajouté le : 2018-08-03 14:07 Modifié le : 2018-09-09 17:51
Auteur et posteur :
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Planète Casio - Add-in Casio - Essai - shadow15510 - Calculatrices
Nombre de visites sur cette page : 5571
Score au progrank : 32
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
751 téléchargements | Soumettre un test


A cause du changement de processeur des nouvelles Graph 35+ USB, 75 et 95 SD, de nombreux addins sont incompatibles avec ces calculatrices.
Rendre un addin compatible - Plus d'informations sur ce problème - Liste des addins compatibles

Description :

Mon premier jet en C... Ce n'est pas brillant mais faut ben commencer...
On peut juste bouger le personnage à l'aide des flèches. Les collisions sont gérée et je travaille sur "comment rentrer dans la petite maisons ??"
L'arbre est issu d'une banque de sprite que j'ai trouvé sur ce site. Et la maisons est constituées de tileset que j'ai faite grâce à un tuto (sur ce site également)
Le premier fichier (*.g1a) est le "jeu" le deuxième correspond au sources.

Mon personnage est animé lors des déplacements

Améliorations à venir
peut-être...

-Possibilité d'entrer dans le bâtiment.⇒Fait
-Gestion de la course par la pression d'une touche du Replay et de Shift.
-gestion de l'intérieur du bâtiment
-nouveau style de maisons en brique
-système d'énigme, interrupteur, histoire,...
-armes, et système de combat
-map plus évoluées : herbes, cailloux, d'autres arbres et artéfacts


Commentaires :

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

LephenixnoirHors ligneAdministrateurPoints: 24218 Défis: 170 Message
Posté le 16-08-2018 à 19:27 | #
Pose toutes les questions que tu veux !
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 17-08-2018 à 11:30 | #
merci
J'aimerais savoir si j'ai bien compris le raisonnement :
d'abord je déclare tous mes tableau de sprite en "const char".
Ensuite je vire mes "While" dans les case et les IsKeyDown.
Les ML_clear_screen⇒poubelle les ML_clear_vram sont à garder... jusque là c'est bon ?

Admettons que c'est ok après ;
Ensuite pour les déplacements de mon sprite j'ai pas tout suivi avec Getkey et IsKeyDown :
je presse une flèche hop : je rentre dans mon switch : case Key_crtrl_onsenfout
voila maintenant je checke la map j'affiche mon perso, et baisse (j'ai failli oublier un "s" ) les coordonnées. Je remet à jour mon perso et quitte le switch...
C'est ça ?
LephenixnoirHors ligneAdministrateurPoints: 24218 Défis: 170 Message
Posté le 17-08-2018 à 11:36 | #
d'abord je déclare tous mes tableau de sprite en "const char".

Oui, ça ça libère de la RAM.

Ensuite je vire mes "While" dans les case et les IsKeyDown.

Voilà, désormais un tour de boucle représentera un frame du jeu.

Les ML_clear_screen⇒poubelle les ML_clear_vram sont à garder... jusque là c'est bon ?

Oui. Je reviendrai sur les ML_clear_vram() dans la boucle plus tard, ils sont pas tout à fait bien là, mais pour l'instant tu peux les laisser.

je presse une flèche hop : je rentre dans mon switch : case Key_crtrl_onsenfout

Précisément.

voila maintenant je checke la map j'affiche mon perso, et baisse (j'ai failli oublier un "s" ) les coordonnées. Je remet à jour mon perso et quitte le switch...

Oui, tu quittes le switch après avoir bougé ton personnage une seule fois vers le bas. Et puis tu remontes au début de la boucle while, au niveau du GetKey().

Ensuite, ce qui se passe de magique c'est que si tu restes appuyé sur la touche BAS, ce deuxième appel à GetKey() va renvoyer de nouveau la touche bas après un petit délai. On dit qu'il « répète » la touche.

C'est exactement ce qu'il se passe quand tu navigues dans le menu principal. Je te dirai après comment faire pour que la première répétition arrive aussi vite que les suivantes.

Seules les touches directionnelles sont répétées. Si tu avais choisi la touche [2], le deuxième appel à GetKey() attendrait que tu relâches [2] pour réappuyer plus tard. Il faudrait appuyer plusieurs fois pour descendre plus longtemps.
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 17-08-2018 à 11:40 | #
j'essaierais de mettre mon code à jour en attendant j'ai remis le programme à jour dans le doute : on peut entrer dans le bâtiment via la touche [alpha] mais les sources ne sont pas à jour je mettrait tout cela à jour le plus vite possible
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 18-08-2018 à 13:23 | #
@Lephe : je n'ai pas compris comment tu veux que j'enlève les Sleep...
Il faut au mois que j'en garde 1 entre les deux sprites de déplacements du perso... non ?
LephenixnoirHors ligneAdministrateurPoints: 24218 Défis: 170 Message
Posté le 18-08-2018 à 13:26 | #
Eh bien non, parce que GetKey() va s'en charger : il va attendre 625 ms avant de te re-renvoyer le numéro de touche la première fois, et 125 ms les fois suivantes.

Il y a une fonction de fxlib qui te permet de contrôler le délai, tu as envie de mettre le même délai pour la première fois que pour le reste du temps. Tu peux mettre n'importe quel multiple de 25 ms, également.
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 18-08-2018 à 13:28 | #
je te montre le haut de ma boucle principale :

ML_clear_vram();
    ML_bmp_or(joueurDo1,54,22,20,20);
    map_draw(x,y);
    ML_display_vram;
    while(key!=KEY_CTRL_EXIT){
        key=0;
        GetKey(&key);
        switch(key){
            case KEY_CTRL_UP:
                test=map_test(x,y,1);
                if (test==0){
                    ML_clear_vram();
                    ML_bmp_or(joueurDo1,54,22,20,20);
                    map_draw(x,y);
                    ML_display_vram();
                    y=y-8;
                    Sleep(200);
                    ML_clear_vram();
                    ML_bmp_or(joueurDo2,54,22,20,20);
                    map_draw(x,y);
                    ML_display_vram();
                };
                break;


si test ==0 ça veut dire qu'il n'y a pas d'obstacle
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 18-08-2018 à 14:05 | #
J'ai mis à jour les sources et le *.g1a
J'ai tenu comptes conseils mais je ne suis pas sur d'avoir tous bien fait Merci de me redire
LephenixnoirHors ligneAdministrateurPoints: 24218 Défis: 170 Message
Posté le 18-08-2018 à 21:11 | #
On progresse ! Ce n'est pas fini, mais c'est déjà bien mieux.

case KEY_CTRL_UP:
    test=map_test(x,y,1);
    if (test==0){
        ML_clear_vram();
        ML_bmp_or(joueurDo1,54,22,20,20);
        map_draw(x,y);
        ML_display_vram();
        y=y+8;
        Sleep(150);
        ML_clear_vram();
        ML_bmp_or(joueurDo2,54,22,20,20);
        map_draw(x,y);
        ML_display_vram();
    };
    break;

Alors bon, c'est un peu triste de mettre tout le code dans un if. Ce que tu peux faire, c'est quitter direct le case quand le test ne vaut pas 0. Comme ceci :

case KEY_CTRL_UP:
    if(map_test(x,y,1) != 0) break;
    ML_clear_vram();
    /* ... */
    break;

Ensuite, on doit pousser encore plus loin l'idée de « un tour de boucle pour chaque frame du jeu ». Là, quand tu descends, on voit bien que tu as deux frames, puisque tu as deux sprites différents...

Qu'à cela ne tienne, tu n'as qu'à faire un tour de boucle pour chacun de ces frames ! Et puis tu as une variable qui te dit si tu es sur joueurDo1 ou joueurDo2, autrement dit si tu es au frame d'animation 1 ou 2 de ton sprite.

Comme ça, tu peux enfin retirer le dernier Sleep() dans ta boucle. Tu devrais laisser toute l'attente au même endroit (pour l'instant c'est ton GetKey()), si tu veux plus de détails je pourrai te raconter.

En gros moi j'obtiens quelque chose comme ça :

case KEY_CTRL_UP:
    if(map_test(x,y,1) != 0) break;
    ML_clear_vram();

    /* Changer le frame d'animation */
    animation = (animation + 1) % 2;

    /* Afficher le bon sprite */
    if(animation == 0) ML_bmp_or(joueurDo1,54,22,20,20);
    else ML_bmp_or(joueurDo2,54,22,20,20);

    map_draw(x,y);
    ML_display_vram();
    break;

Tu as toujours un ML_display_vram; qui ne fait rien au début de ton code, n'oublie pas d'ajouter les parenthèses sinon la fonction n'est pas appelée : ML_display_vram().

Ensuite, tu dois à tout prix retirer le Sleep(150) devant le GetKey() : comme je l'ai expliqué, pour l'instant GetKey() se charge de mettre des temps d'attente. Quand ton programme sera bien rodé, ce sera ensuite toi qui le feras, mais avec un timer, et de l'extérieur !
Shadow15510Hors ligneAdministrateurPoints: 5499 Défis: 18 Message
Posté le 19-08-2018 à 10:47 | #
je ferais tout cela demain ou après demain merci beaucoup de ton aide

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8 | Suivante

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 87 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd