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.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Casio Tiles
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Casio Tiles

Posté le 17/11/2023 20:36

Programmation du jeu en C
   2%

pour l'instant j'ai fait le menu mais je ne sais pas comment faire clignoter une image comme sur les jeu game boy ou ds ou il y a "marqué press A to start!"
Le jeu se jouera avec les touches f1 a f6 et a l'horizontale car c pas pratique a la verticale même si ce serai mieux jeu sortira d'abord sur prizm puis sur monochrome. C'est mon premier projet voici comment j'ai tente de faire clignoter l'image mais ca n'a pas marché

while (key != KEY_SHIFT)
    {
        dupdate();
        dimage(94,165,&PressShiftToStartImg);
        dupdate();
        key = getkey().key;
        dclear(C_WHITE);
        dimage(125, 25, &MainMenuTitleImg);
        dupdate();
        key = getkey().key;
    }



Slyvtt Hors ligne Maître du Puzzle Points: 2310 Défis: 17 Message

Citer : Posté le 17/11/2023 20:45 | #


tu dois pouvoir faire un truc du genre :

int frame = 0;
while (key != KEY_SHIFT)
    {
        dclear( C_WHITE );

        dimage(94,165,&PressShiftToStartImg);

        if (frame>99 && frame<199)  dimage(125, 25, &MainMenuTitleImg);

        dupdate();

        frame++;
        frame = frame % 200;

        key = getkey().key;
    }

There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 17/11/2023 20:46 | #


Pour que ça clignote en temps réel, il va falloir que tu changes à un moment la façon dont ta boucle est cadencée. Pour clignoter il suffit d'afficher une fois l'image et une fois pas, en alternance. Le problème là tout de suite c'est que quand tu utilises getkey(), le programme attend qu'une touche soit pressée et du coup il ne peut pas pendant ce temps dessiner une nouvelle image à envoyer à l'écran.

La formule pour convertir ça en une boucle plus sympa se fait en deux étapes : (1) remplacer la lecture des entrées par une fonction qui n'attend pas (ie. soit pollevent() soit keydown()), et (2) comme du coup ta boucle ira à fond la caisse, utiliser un timer pour établir un rythme régulier genre 30 tours de boucle par seconde.

Le tutoriel gint aborde ses détails dans cet épisode, à partir de la section "Structure d'une boucle de jeu animée".

Bonne idée de projet sinon, c'est un jeu cool Il y en a une version sur le site je crois mais rien de super poussé.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 20/11/2023 23:37 | #


Connaissez vous un site ou on peu apprendre le C (une documentation)ou il il y a tout pour apprendre le C et aussi quel sont les bibliothèque utilisable comme ca je peu voir tout les spécificité de chaque truc
Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 11/04/2024 02:08 | #


salut
j'ai pas avance depuis le début mais c a cause de la réinitialisation de mon pc et que j'avais la flemme de réinstaller le SDK mais donc je l'ai réinstaller aujourd'hui
mais je ne sais pas pourquoi il ne veut pas sortir de la boucle avec ce code la et donc je me demandais ce que j'avais fait de mauvais j'ai tester de nombreuse chose mais sans succès c un peu aussi a cause de ca que j'avais laisser le projet un peu a l'abandon mais je me sens bien de le continuer de plus j'ai tout tenté ce que je pouvais mais je m'en remet a vous en ce moment car je n'y arrive pas
#include <gint/display.h>
#include <gint/keyboard.h>

extern bopti_image_t PshiftStart;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define DIR_DOWN   "DOWN"
#define DIR_RIGHT  "RIGHT"
#define DIR_UP     "UP"
#define DIR_LEFT   "LEFT"
#define SHIFT      "SHIFT"  

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main(void)
{
    dclear(C_BLACK);
    dtext(1, 1, C_BLACK, "Exemple d'add-in fxSDK.");
    dupdate();
    int frame = 0;
    char key = ' ';
    while (key != 'SHIFT')
    {
        dtext(1, 1, C_BLACK, "work");
        dupdate();
        
       key = get_inputs();
    }
    dclear(C_WHITE);
    dupdate();
    return 1;

}


get_inputs(void)
{
    int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS;

    while(1)
    {
        int key = getkey_opt(opt, NULL).key;

        if(key == KEY_DOWN)  return DIR_DOWN;
        if(key == KEY_RIGHT) return DIR_RIGHT;
        if(key == KEY_UP)    return DIR_UP;
        if(key == KEY_LEFT)  return DIR_LEFT;
        if(key == KEY_SHIFT) return SHIFT;
    }
}

Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 11/04/2024 09:51 | #


Tu mélanges un peu les types de données. Quand tu écris key != 'SHIFT' ça ne fait pas du tout ce que tu penses. La notation apostrophe sert à délimiter un seul caractère, e.g. 'S' ou 'H'. Mettre plusieurs caractères entre des apostrophes n'a pas de sens et tu dois avoir un avertissement du compilateur à ce sujet.

Le cœur de ton problème c'est que tu essaies de représenter tes directions/actions avec du texte. C'est inutilement compliqué ; en C pour ce genre de choses on utilise des entiers. Comme tu peux le voir, la valeur numérique des touches dans gint est définie par <gint/keycodes.h> avec des constantes comme KEY_SHIFT, KEY_F1, KEY_7, etc, donc utiliser un entier ne t'empêche pas d'avoir un joli nom dessus.

Tu pourrais donc numéroter tes actions, disons un nombre entre 1 et 5 :

#define DIR_DOWN   1
#define DIR_RIGHT  2
#define DIR_UP     3
#define DIR_LEFT   4
#define SHIFT      5

Et ensuite tu peux oublier ces numéros et juste utiliser tes jolis nom DIR_DOWN, DIR_RIGHT, etc. à la place. Donc dans la condition de la boucle :

while(key != SHIFT)

Et dans la fonction get_inputs(), return DIR_DOWN etc. ce que tu fais déjà très bien.

Comme key est un entier maintenant, il faut le déclarer comme un int, et comme valeur initiale on peut lui donner 0 qui ne correspond à aucune action :

char key = ' ';
// ->
int key = 0;

Enfin, dans la fonction get_inputs(), n'oublie pas de spécifier le type de retour :

get_inputs(void)
// ->
int get_inputs(void)

Tu noteras qu'avec ton ancienne version des #define, la fonction get_inputs() renvoyait des chaînes de caractères (char *), que tu stockais ensuite dans un char (la variable key), que tu comparais ensuite à 'SHIFT' qui est un int, bref un sacré mélange.

Morale : en C on utilise des entiers, c'est plus facile et ça va plus vite. Autre avertissement : tu ne peux pas comparer des chaînes de caractères avec == donc même si tu avais tout bien fait correctement la condition aurait quand même pas bien marché. Vraiment, les entiers c'est plus simple.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 11/04/2024 23:00 | #


Ok merci beaucoup mais ca veut toujours pas quitter la boucle
en fait nan il n'entre jamais dans la boucle
Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

Citer : Posté le 11/04/2024 23:23 | #


J'ai une petite question, pourquoi fais tu une fonction get_inputs alors que gint t'offre déjà la fonction 'getkey().key' ?
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 11/04/2024 23:44 | #


par ce que getkey peu renvoyer plusieurs fois la touche pressé d'après ce que j'ai lu alors que avec l'autre méthode ca le renvoi que un fois si on apuit longtemps
Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Tuper4 Hors ligne Membre Points: 832 Défis: 19 Message

Citer : Posté le 11/04/2024 23:48 | #


Dualforce a écrit :
par ce que getkey peu renvoyer plusieurs fois la touche pressé d'après ce que j'ai lu alors que avec l'autre méthode ca le renvoi que un fois si on apuit longtemps
je ne suis pas très sûr que c'est le cas je ne suis pas a 100% sûr mais ce que je sais est que getkey().key attend que tu appuie sur une touche pour continuer le code et que keydown(TOUCHE) fais un test instant sur la touche pressée.
Ne vous arrêtez pas quand vous êtes fatigé(e), arrêtez vous quand vous avez terminez.
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 11/04/2024 23:50 | #


voila durant son tuto sur la creatiuon d'un add-in LePhénix e a expique ca :
LePhenixNoir a écrit :
Une des fonctionnalités assurées par getkey() est la répétition des touches. Si vous gardez une touche appuyée, getkey() est susceptible de la renvoyer plusieurs fois. Par défaut, seules les touches fléchées sont répétées (comme GetKey()), ce qui permet par exemple de se déplacer dans des listes ou des menus. Mais ici, comme le jeu est un puzzle nécessitant de bien réfléchir à chaque coup, on veut que chaque pression déplace le joueur exactement une fois (sinon on risque un faux mouvement qui gâcherait le niveau).

Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%


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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 73 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