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: 927 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


Précédente 1, 2, 3 ··· 7, 8, 9, 10, 11 Suivante
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 10/04/2022 19:07 | #


Ah oui c'est que le typage est un peu chiant pour ça.

Pas de souci, tu peux juste forcer le cast :

bopti_image_t *img = (bopti_image_t *)gint_world_switch(...)

En C++ on pourrait faire mieux et éviter tous les casts, il faudra que je supporte ça un jour.
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 10/04/2022 19:31 | #


Alors la sauvegarde fonctionne bien mais du coup c'est le Load qui lui ne fait pas planté la casio mais la softlock, c'est à dire que le cercle en haut à gauche ne tourne même plus, je peux rien faire à part appuyer sur le bouton reset.

bopti_image_t* Load_Image(unsigned char* path)
{
    FILE* fp = fopen((const char*)path, "r");
    int size;
    fread(&size, sizeof size, 1, fp);
    bopti_image_t* img = (bopti_image_t*)malloc(size);
    fread(&img, size,1, fp);
    fclose(fp);
    return img;
};

bopti_image_t* img = (bopti_image_t*)gint_world_switch(GINT_CALL(Load_Image, (unsigned char*)"testImg.bin"));

"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 10/04/2022 19:44 | #


Tu t'es trompé à la fois dans le fread() et le fwrite(), l'opérande c'est img et pas &img, puisque tu veux lire/écrire les données pointées par img et pas le pointeur de 4 octets lui-même.

Edit : cette fois j'ai testé donc je suis sûr qu'il n'y a pas d'autre arnaque :-)
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 10/04/2022 19:50 | #


Ho ça marche !
Merci beaucoup !

Ajouté le 13/04/2022 à 17:51 :
J'aimerai utiliser gint_world_switch(GINT_CALL mais pour une fonction qui n'a pas de paramètre et ça me mets cette erreur :

error: invalid use of member function ‘void GameManager::InitGameParty()’ (did you forget the ‘()’ ?)
   34 |     gint_world_switch(GINT_CALL(gameManager->InitGameParty));

"La créativité est contagieuse faites la tourner"
Albert Einstein
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 13/04/2022 18:03 | #


A mon avis (a confirmer par Lephe), il faut que tu passes par un pointeur sur fonction.

il faut créer un


void(*functionptr)( void ) = nullptr;   // Pointeur sur fonction (je pars sur hypothese sans parametre)
functionptr = gameManager->InitGameParty;  // onfait pointer le pointeur vers la bonne fonction
gint_world_switch(GINT_CALL(functionptr));  // on appelle gint_world_switch en donnant ce pointeur vers fonction


Je pense que ça passe comme ça.
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 13/04/2022 18:23 | #


Ça ne passerait pas non plus. GINT_CALL() n'accepte que des fonctions, or tu es en train de passer une méthode. La différence c'est que c'est essentiellement une clôture qui lie l'instance. C'est donc un objet différent, et donc tu peux pas tricher sur le typage.

Par contre tu peux passer l'information additionnelle (l'instance) à côté :

void call_InitGameParty(GameManager *gameManager)
{
    gameManager->InitGameParty();
}

gint_world_switch(GINT_CALL(call_InitGameParty, (void *)gameManager));

Voire peut-être avec une lambda :

gint_world_switch(GINT_CALL(
    [](GameManager *gameManager){ gameManager->InitGameParty(); },
    (void *)gameManager);
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 13/04/2022 18:36 | #


Oh la vache on est dans la subtilité là
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 13/04/2022 18:55 | #


Ok merci

Ajouté le 13/04/2022 à 18:57 :
ça fait une semaine que je suis sur la sérialisation des données de RPG Maker j'en peux plus .
Je viens à l'instant de sérialiser toutes les données

Ajouté le 19/04/2022 à 18:13 :
Je voulais savoir s'il existe un moyen de faire un truc comme ça :

#ifndef Gint
//Code pour casio
#endif
#ifndef WindowsEtLinux
//Code pour Windows et Linux
#endif

Si oui qu'elle est la syntaxe
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 19/04/2022 18:14 | #


Tu peux faire :

#if defined(TARGET_FX9860G) || defined(TARGET_FXCG50)
// gint
#else
// pas gint
#endif
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 19/04/2022 21:35 | #


Est-ce qu'il y a moyen que le PC puisse lire un fichier en big-endian comme le fait la casio ou l'inverse c'est à dire en little-endian ?
Car j'aimerai normaliser les données, j'ai cherché sur internet, j'ai rien trouvé de vraiment concluant
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 19/04/2022 21:38 | #


Il suffit de bien définir ton format et d'inverser l'endianness après la lecture. Il n'y a pas de fonction standard pour faire ça en C, mais sous Linux tu peux faire :

#define _DEFAULT_SOURCE
#include <endian.h>

void load(char const *file)
{
    // ...
    int n;
    fread(&n, sizeof n, 1, fp);
    // Big-Endian (32 bits) TO Host
    // = convertit big-endian au format natif
    // = rien sur la calto, inversion de l'endianness sur le PC
    n = be32toh(n);
}
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 20/04/2022 17:43 | #


Je suis retourner voir ce message pour pouvoir afficher mes propres couleurs avec cette fonction :

((R & 0xf8) << 8) | ((G & 0xfc) << 3) | ((R & 0xf8) >> 3)

Sauf que quand je fait avec ces valeurs : (255,0,0)
ça me fait pas du rouge mais du rose
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 20/04/2022 17:44 | #


Relis juste un petit coup les noms des variables, vois si tu peux apercevoir la typo.
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 20/04/2022 17:46 | #


Ho mince désolé j'ai copier collé bêtement le message sans relire, j'ai cru que c'était un problème de valeur. oops

Ajouté le 20/04/2022 à 18:19 :
C'est quelle police (le nom) d'écriture par défaut de Gint ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 20/04/2022 18:52 | #


Pas de nom. Surtout sur Graph 90+E, où c'est une police originale.
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 21/04/2022 20:50 | #


J'ai encore un soucis : j'ai une variable static qui se trouve dans une librairie compilé (exemple : lib.c), donc je ne peux pas modifier ce fichier
variable en question :
static v16 g_depth = 0;

Problème : je veux accéder a cette variable depuis un autre fichier et j'y parviens pas
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 21/04/2022 20:58 | #


Ce n'est pas possible.
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 28/08/2022 22:26 | #


Hello les gens !
Je voulais savoir s'il y avait moyen d'utiliser le port 3-pin avec Gint ? et si oui comment ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 22585 Défis: 149 Message

Citer : Posté le 28/08/2022 22:30 | #


Pour l'instant il n'y a pas de driver donc il faut faire un world switch et utiliser des syscalls, voir https://gitea.planet-casio.com/Slyvtt/libSerial .
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 28/08/2022 22:47 | #


Ok, j'ai jeter regarder aussi ce topic j'ai les même erreur, et j'ai toujours pas compris comment on installe libSerial, ni quelle lib il faut inclure
"La créativité est contagieuse faites la tourner"
Albert Einstein
Farhi Hors ligne Membre Points: 927 Défis: 0 Message

Citer : Posté le 29/08/2022 17:10 | #


J'ai fait un make de libSerial mais je doit mettre où le "libserial.a" après ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Précédente 1, 2, 3 ··· 7, 8, 9, 10, 11 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 - 2022 | Il y a 40 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