Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Discussions


Index du Forum » Discussions » Comment faire un jeu en C pour Graph 75 et 35+ ?
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Comment faire un jeu en C pour Graph 75 et 35+ ?

Posté le 27/11/2019 15:12

Bonjour à tous,
Récemment j'ai voulu commencé à faire un jeux en C mais le souci c'est que je ne parvient pas à trouver les alternatives de certaines fonction présente en BASIC comme par exemple:
-Pxlon
-F-Line
-Getkey
-Text

Tout ce qui relève à des fonction spécifique de la calculatrice, dont ces fonctions (celles que je viens d’énoncé au dessus) qui me semble indispensable.

Merci d'avance pour votre aide


1, 2, 3, 4, 5, 6 Suivante
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 27/11/2019 15:13 | #


Si tu utilises le SDK, il faut que tu lises le fichier PDF de fxlib. Il est dans les manuels du SDK (fx-9860G Libraries.pdf). Tu as ça ?
Yatis En ligne Membre Points: 560 Défis: 0 Message

Citer : Posté le 27/11/2019 15:16 | #


Je t'invite à te renseigner sur MonochromeLib une librairie graphique permettant de faire à peu près ce que tu demandes. Sinon regarde la documentation de fxlib, la librairie fournie de base par le SDK de Casio.
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 27/11/2019 15:17 | #


Oui je crois c'est bien ceux du SDK Graph 75 85 95 mais je ne suis parvenu à comprendre quelles fonctions est associer à quoi.

Ajouté le 27/11/2019 à 15:21 :
Ho merci ta documentation de fxlib, elle est d'une précieuse aide !

Ajouté le 27/11/2019 à 22:58 :
j'essaye d'afficher un int mais le programme plante à chaque fois, si quelqu'un peut m'aider s'il vous plait
locate(3,5); Print((unsigned char *)VariableInt);
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 28/11/2019 09:10 | #


Erreur classique. Les données dont tu disposes dans VariableInt c'est un entier. Tu veux "convertir" en chaîne de caractères (le mot approprié est représenter par une chaîne de caractères).

Contrairement aux apparences, le cast (unsigned char *) ne fait pas ça du tout. Ce n'est pas une conversion car ça ne change pas les données. Il faut appeler une vraie fonction pour ça, en l'occurrence sprintf() :

#include <stdio.h> // Ne l'oublie pas, sinon ça SysERROR

char str[30];
locate(3,5);
sprintf(str, "%d", VariableInt);
Print((unsigned char *)str);
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 28/11/2019 18:28 | #


Merci beaucoup !
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 29/11/2019 22:27 | #


         Bdisp_AllClr_DDVRAM();
        GetKey(&key);

Très mauvais plan. D'abord tu effaces tout, ensuite tu attends que le joueur fasse quelque chose.

Deux choses :
• Tu dois d'abord effacer l'écran, puis tout dessiner, puis traiter les entrées, dans cet ordre.
• Efface l'écran avec Bdisp_AllClr_VRAM() pour éviter les effets de clignotement. Tu n'as jamais besoin des fonctions en _DD() à part Bdisp_PutDisp_DD().

Au passage, sache que GetKey() appelle Bdisp_PutDisp_DD(). Donc si tu l'utilises, tu n'as pas besoin d'afficher explicitement.

Enfin, je détaille pas, mais GetKey() attend que l'utilisateur appuie sur une touche, et contrôle la vitesse des répétitions. Le Sleep(500) est donc à la fois inutile et plutôt malvenu, je te conseille vraiment de l'enlever.
Zezombye En ligne Rédacteur Points: 1743 Défis: 13 Message

Citer : Posté le 30/11/2019 00:34 | #


https://www.planet-casio.com/Fr/forums/lecture_sujet.php?id=14992 pour info
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/11/2019 12:37 | #


En vérité j'ai retirer mon message car j'avais trouvé la réponse au bout d'un certain temps de réflexion.
j'avais du mal à comprendre d'où venais l'erreur. Je remercie votre aide
Ca fonctionne, après je sais pas si c'est optimisé...
while(1){
        Bdisp_AllClr_VRAM();
        locate(7,3); Print((unsigned char*)"MY GAME");
        PrintMini(50,30,(const unsigned char *)"JOUER",0);
        PrintMini(50,40,(const unsigned char *)"OPTION",0);
        PrintMini(50,50,(const unsigned char *)"QUITTER",0);
        PrintMini(40,y,(const unsigned char *)"->",0);
        Bdisp_PutDisp_DD();
        while(1){
            GetKey(&key);
            if(key==30018)   { y-=10; break; }
            if(key==30023) { y+=10; break; }
            if(key==30004){
                if(y==30) Game();
                break;
            }
        }
        if(y<30)y=30;
        if(y>50)y=50;
    }


"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 30/11/2019 12:41 | #


C'est très bien comme ça, bien joué !
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/11/2019 12:43 | #


Merci !
Mais actuellement je suis coincé car je ne sais pas comment afficher une image en fonction de X et Y comme par exemple pour faire un RPG. Je sais pas ce que je dis est clair
En résumer, quelque chose qui ressemble à ça : Dungeon-add-in

(Et je sais pas non plus comment convertir une image pour le C)
je crois qu'il faut utiliser Sprite Coder mais il fonctionne pas, enfin je crois; je me retrouve avec une page vide

Ajouté le 30/11/2019 à 12:45 :
j'utise Bdisp_SetPoint_DDVRAM() ( mais je sais pas si c'est le plus optimiser)
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 30/11/2019 12:56 | #


Donc, deux choses. D'abord renseigne-toi sur le double buffering pour comprendre l'utilisé des fonctions _VRAM(). Comme je l'ai dit, tu n'as besoin (et crois-moi, pas envie) d'utiliser les fontions en DD (sauf Bdisp_PutDisp_DD() qui transfère ce que tu as fait dans la VRAM à l'écran).

Pour le reste, afficher une image à une position dépendant d'une variable est un problème d'algorithmique bien plus que de langage. Ça se fait pareil qu'en Basic.

Quant à afficher une image, c'est un peu le même problème, mais tu te tapes les structures de données en plus. Oui il faudrait utiliser Sprite Coder, mais il ne marche plus depuis un bon moment. Je crois que Ninestars avait codé un remplacement en Java qui doit se trouver sur le topic de Sprite Coder. Personnellement ça fait longtemps que je fais autrement donc j'ai pas trop suivi sur le plan des outils de conversion...
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 30/11/2019 13:03 | #


Ok, merci pour ton aide, je vais faire de mon mieux
"La créativité est contagieuse faites la tourner"
Albert Einstein
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 02/11/2020 14:17 | # | Fichier joint


Bonjour, j'ai essayer d'importer un BMP et l'afficher avec LibBMP, mais ça n'a pas fonctionné.
Voici une partie de mon code :

int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;
    Bitmap* monBitmap = BMP_Load("\\\\crd0\\3.bmp", NULL);

    Bdisp_AllClr_DDVRAM();

    BMP_Draw(monBitmap, 10, 20, BMP_OR);


    while(1){
        GetKey(&key);
    }

    return 1;
}


le code d'erreur que je reçois est en pièce jointe
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 02/11/2020 14:43 | #


Wouah, je pensais pas que j'entendrais reparler un jour de cette antiquité. T'es fort pour avoir retrouvé ça. xD

À vue de nez je dirai que le chargement de l'image a échoué, tu peux vérifier si monBitmap == NULL (auquel cas ça a échoué).
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 02/11/2020 14:49 | #


Oui en effet monBitmap == NULL mais je sais pas pourquoi car l'image est bien un .bmp et elle est bien dans SDcard.
j'ai pas fait gaffe à la date LibBMP
En fait je cherche à importer une image .bmp facilement, et j'ai fait des recherche que se soit sur planet-casio ou dans le manuel du SDK et j'ai rien trouver de concluant à part LibBMP
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 02/11/2020 14:50 | #


À l'origine on utilisait SpriteCoder et les fonctions de dessin de MonochromeLib (infiniment plus performant). Et les add-ins sous fxlib le font toujours d'ailleurs.
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 02/11/2020 14:56 | #


Oui mais on est obligé de "convertir" l'images pour pouvoir l'afficher avec MonochromeLib. Mon objectif était de garder l'image en bmp intacte et la load comme fait LibBMP
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 02/11/2020 15:16 | #


Ultimement si tu gardes l'image dans la mémoire de stockage tu t'exposes à de nombreux problèmes sur les limitations et la lenteur du système de fichiers (deux paramètres que je ne connaissais pas bien voire pas du tout quand j'ai écrit LibBMP).

Le fxSDK contourne ça en convertissant à la compilation les images en "variables", ce qui fait que tu peux avoir tes PNG d'un côté et des variables de l'autre de façon transparente. Mais les images sont toujours dans l'add-in et pas dans la mémoire de stockage.
Farhi Hors ligne Membre Points: 694 Défis: 0 Message

Citer : Posté le 02/11/2020 15:20 | #


D'accord mais alors je fais face à un autre problème.
Mon but est de convertir tout les sprite généré par particule et les importer donc comment je fais dans ce cas ?
Parce que je vais pas faire un à un dans SpriteCoder car le but de particule est de rendre tout automatique.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir En ligne Administrateur Points: 21005 Défis: 143 Message

Citer : Posté le 02/11/2020 15:21 | #


Particule peut intégrer un convertisseur, c'est pas un programme compliqué.
1, 2, 3, 4, 5, 6 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 83 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