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: 596 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, 4, 5
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 12/01/2021 18:35 | #


Si tu veux des fps constants, utilise des timers, et Gint (parce qu’apparemment ce n'est pas le cas )
C'est possible avec fxlib mais c'est nettement plus chiant
In Arch, I trust ! And you ?
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 18:42 | #


Ok je vais voir ce que je peu faire
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 18:45 | #


Euh pas si vite. Ça te prendrait un (long) moment et c'est pas le jour parfait pour installer le fxSDK (grosse mise à jour dans les cartons). En plus il faut Linux...
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 18:48 | #


Ok pas de souci j'attendrai de tout manière il faut que je termine la version actuelle de toute manière

Ajouté le 26/07/2021 à 15:01 :
Bonjour, j'aimerai afficher un nombre avec PrintMini(...) sauf que je dois convertir ce nombre en unsigned char* et faire (unsigned char*)3.8f ne marche pas.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 26/07/2021 15:02 | #


Utilise sprintf :

#include <stdio.h> // Important sinon ça crashe (lol)

char str[20];
sprintf(str, "%f", 3.8f);
PrintMini(x, y, (const unsigned char *)str, 0);
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 26/07/2021 15:27 | #


Merci !
Et juste pour savoir, est-ce qu'il est possible d'afficher un pixel avec une certaine opacité mais que les autres pixel n'ont pas tous la même opacité, et si oui comment svp.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 26/07/2021 15:28 | #


L'écran est noir et blanc, il n'y a que deux couleurs. Je ne vois pas ce que tu souhaites obtenir.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 26/07/2021 15:31 | #


je veux faire un dégradé, je sais qu'on peut modifier l'opacité de l'écran et je voulais savoir s'il était possible de modifié l'opacité d'un pixel en particulier et non pas de l'écran entier
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 26/07/2021 15:33 | #


Ah, le contraste tu veux dire ? Non, on ne peut pas (... sinon ce serait pas un écran noir et blanc :P). Et d'ailleurs même si tu peux changer le contraste dans le programme (je me souviens qu'un jeu d'Aragorn faisait un fondu au blanc comme ça) il est impossible de connaître la valeur initiale donc de le restaurer à la fin.

Tu peux faire des niveaux de gris (de préférence avec gint là, côté SDK c'est très château branlant les niveaux de gris) mais ça ne te donne que 4 couleurs et le rendu laisse parfois à désirer (encore que Redcmd a beaucoup étudié le trucs et trouvé des bonnes pistes d'amélioration).
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 26/07/2021 15:36 | #


D'accord merci les explications, c'est dommage qu'on puisse pas faire ça facilement

Ajouté le 26/07/2021 à 17:51 :
Mais du coup est-ce qu'il existe l'inverse du sprintf c'est à dire d'avoir ça :

unsigned char* numb = "15";
int nb = ToInt(numb);
nb==15
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 26/07/2021 17:53 | #


Oui, c'est sscanf.

unsigned char *numb = "15";
int nb;
sscanf(numb, "%d", &nb);

Oui sinon atoi, plus simplement : nb = atoi("15").
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 31/07/2021 16:00 | #


Bonjour,
j'ai un problème que je parviens pas à résoudre.
En gros j'aimerai initialisé une class avec un array comme ça
(cette partie là fonctionne)

class Map {
public:
    int* data;
    int length;
    Map(int* data,int length) {
        this->length = length;
        this->data = data;
    }

    ~Map() {
        delete data;
    }
};

Donc jusque là ça fonctionne mais, j'aimerai créé plusieurs maps et les initialiser de cette manière :

class AllMaps
{
public:
    int IndexMapActu;
    Map* MapActu;
    Texture** LstTextures;
    Camera* camera;
    Player* player;

    AllMaps() {
        IndexMapActu = -1;
        LstTextures = LoadTextures();
        camera = new Camera;
        player = new Player(camera);
    }
    ~AllMaps() {
        delete MapActu;
        delete LstTextures;
        delete camera;
        delete player;
    }

    void LoadMap(int index) {
        if (IndexMapActu != -1) {
            delete MapActu;
        }
        IndexMapActu == index;

        switch (IndexMapActu)
        {
        default:
            int data[] = { 0, 0, 0, 1, 0, 16, 1, 0, 32, 2, 0, 48, 3, 16, 48, 3, 32, 48, 3, 48, 48, 3, 64, 48, 3, 80, 48, 3, 96, 48, 4, 16, 0, 4, 32, 0, 4, 48, 0, 4, 64, 0, 4, 80, 0, 4, 96, 0, 5, 112, 48, 6, 112, 32, 6, 112, 16, 7, 112, 0 };
            MapActu = new Map(data,20);
            break;
        }
    }

private:

};

Avec la fonction LoadMap mais le soucis c'est qu'il y a un problème de mémoire et je pense que c'est à cause de la variable data[] dans LoadMap qui est détruit une fois l'appel terminé et mon objectif c'est de conserver la variable et je ne parviens pas à le faire.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 31/07/2021 16:03 | #


IndexMapActu == index;

Cette ligne ne fait probablement pas ce que tu veux

int data[] = { 0, 0, 0, 1, 0, 16, 1, 0, 32, 2, 0, 48, 3, 16, 48, 3, 32, 48, 3, 48, 48, 3, 64, 48, 3, 80, 48, 3, 96, 48, 4, 16, 0, 4, 32, 0, 4, 48, 0, 4, 64, 0, 4, 80, 0, 4, 96, 0, 5, 112, 48, 6, 112, 32, 6, 112, 16, 7, 112, 0 };
MapActu = new Map(data,20);

Tu ne peux pas faire ça parce que data est une variable locale, donc allouée sur la pile, donc elle n'existe que jusqu'à la fin de l'appel de fonction (au mieux).

Tu dois soit en faire une variable globale soit mettre static devrant, ce qui revient à en faire une variable globale sauf qu'elle n'est pas visible par tout le monde.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 31/07/2021 16:09 | #


IndexMapActu == index;

Je suis trop bête j'avais pas fait attention merci

Et pour le static ça fonctionne en effet merci beaucoup

Ajouté le 31/07/2021 à 17:33 :
Est-ce qu'il y a moyen de faire un split pour un unsigned char* ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 31/07/2021 17:41 | #


Pas directement, il faut allouer, copier... c'est un peu chiant (mais obligatoire). Le standard C a très peu de fonctions sur les chaînes de caractères.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 31/07/2021 19:23 | #


D'accord mais du coup c'est quoi en gros la commande car, on peut pas avoir la longueur de la chaine de caractère ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 31/07/2021 20:12 | #


La fonction strlen() te donne la taille.

Voilà quelques étapes pour couper une chaîne en deux :
  • Tu as une chaîne str de longueur n, que tu veux couper à la position 0 < m < n (histoire que les deux morceaux soit non vides tous les deux).
  • Tu alloues une chaîne left de m+1 octets (sur la pile ou avec malloc, selon les besoins).
  • Tu alloues une chaîne right de m-n+1 octets (idem).
  • Tu copies m octets de str vers left (puis tu ajoutes le 0 final).
  • Tu copies n-m octets de str+m vers right (puis tu ajoutes les 0 final).

Exemple pour un cas où on alloue sur la pile :

#include <string.h>

const char *str = "HelloWorld";
int n = strlen(str); // = 10
int m = 5; // On coupe après "Hello"

char left[6]; // m+1
char right[6]; // n-m+1

strncpy(left, str, m);
left[m] = 0;

strncpy(right, str+m, n-m);
right[m] = 0;

(On peut faire un poil plus simple pour right mais je préfère montrer le même système deux fois : strncpy() pour copier une sous-chaîne de str, puis un ajoute le NUL à la fin.)
Précédente 1, 2, 3, 4, 5

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