Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Tamagotchi ou la gestion du temps en C
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Tamagotchi ou la gestion du temps en C

Posté le 17/08/2018 14:37

Bonjour à tous !!
Oui oui je sais je ferais mieux d'arrêter les conneries et de terminer mes anciens projets... Mais je le avance petit à petit dans l'ombre et le silence (mais si c'est vrai !)
Désireux de progresser en C j'ai eu l'idée de me familiariser avec le système de tics inclus dans la calto et qui permet de mesurer le temps (comme vous en savez plus que moi sur le sujet je demanderais sans doute un peu d'aide ) oui oui c'est bon : j'ai déjà vu, lu signé et approuvé le tuto qui en parle.
Passons au cœur du projet : vous connaissez tous les Tamagotchi : ces petites consoles vendu au Japon vers la moitié des années 90 (1996 au Japon et 97 en Europe pour être précis). Le but et de chouchouter, pouponner et nourrir un petit animal virtuel dans le but de le faire... vivre... oui oui c'est ça le but ultime par le tuer en un minimum de temps... je vois votre déception d'ici.
Bon pour mon premier jet je vais essayer de faire un truc le plus basique possible (mais je le fait en C) J'ai déjà mis sur pied mon systèmes de points et tout je fais mes sprites prochaines étape : le code.

J'ai hiérarchisé mes idées en plusieurs catégories :
les Actions
On fait des actions grâce au touche F1~F5
F1 : lui donner à manger
F2 : aller au Wc (j'invente rien c'est dans le jeu original...)
F3 : le laver
F4 : jouer
F5 : le faire dormir
Voila pour les Actions disponibles

les Points
Je les ai subdivisé en 5 catégories :
-Pts d'équilibre (eq) correspond à l'équilibre de son alimentation
-Pts d'énergie (en) rien d'extraordinaire vous savez à quoi ça sert l'énergie...
-Pts de faim (f) correspond à la satiété : plus on a de Pts de faim moins il a faim...
-Pts d'humeur (hu) Si il en a beaucoup il est sympa sinon il te fait la gueule
-Pts d'hygiène (hy) Comprenez la propreté.

gestion du temps
Avec les temps les points évolue.
Les points :
-d'énergie
-de faim
-d'humeur
-d'hygiène
perdent 2 par heures

Le temps intervient également dans les envies du moment attention : ces envies relèvent non pas des besoins de l'animal mais de sa "volonté" ainsi il aura envie :
-de manger toutes les heures
-de jouer toutes les deux heures
-d'aller au Wc toutes les 2h30
-de se laver toutes les 4 heures
-et de dormir toutes les 5 heures

les Stats
Elles seront composées de jauges aves un petit logo devant qui indiques quel points la jauge représente.
Un petit éclair pour l'énergie, un savon avec des bulles pour l'hygiène, une fourchette pour la faim, et une balance pour l'équilibre.
Les stats pourrons être appelées via [OPTN]

Manger
Cette action m'étant fort sympathique j'ai décider d'étayer les choix...
Le joueur pourra choisir entre plusieurs mets ayant chacun leurs bon et les mauvais points...
-Le bol de riz : eq+2 / en+80 / f+100 / hu-5 / hy-30
-le burger : eq-10 / en+80 / f+80 / hu+10 / hy-30
-le gâteau : eq-5 / en+50 / f+100 / hu+10 / hy-30
-la soupe : eq+10 / en+50 / f+80 / hu-5 / hy-30
-le lait : eq+5 / en+20 / f+20 / hu+5 / hy-30
-le soda : eq-2 / en+10 / f+10 / hu+5 / hy-30
Voila
Lorsque la touche F1 est pressée, le bord droit de l'image se décale vers la gauche ménageant ainsi un espace dans lequel vous aurez deux flèches de part et d'autre du logo de la nourriture place au milieu. En dessous le nom de la nourriture apparaitra et en haut un indication : "[F1]⇒Ok [F6]⇒Non"


les autre Actions et les Points
Toutes action interagissent avec les points :
-manger (déjà fait)
-aller au Wc : en-5 / hy+20
-jouer : eq+5 / en-20 / f-20 / hu+20 / hy-20
-dormir : en au max / f-80 / hu+60 / hy-60
-le laver : en-20 / f-20 / hu+20 / hy+80

les Jeux
Le menu des jeux se présente de la même manière que celui pour manger sauf que le logo est celui du jeu en question et le nom de la nourriture est remplacer par une règle succincte du jeu.
Exemple : le logo est une balle qui tombe et la règle est "Attrapez les balles".
Les points pourrait varier d'un jeu à l'autre mais je n'en suis pas là.
J'ajouterais surement "faire une balade" et "caresser" et pis après je m'en remet à vous

Dans les améliorations à venir noter que j'ai l'intention de mettre sur pied un système qui permet de faire communiquer les Tamagotchi entre eux comme les vrais...

Je pense que j'ai fait le tour de l'état du projet théorique actuel.



Etat du projet...
...en ruines

Le code de compatibilité SH4 doit être nettoyé
la créations de fonctions pour l'affichages des animations fait !
utilisation des matrices Inutile


Fichier joint


Pages : Précédente1, 2, 3, 4, 5, 6, 7, ... 11Suivante
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 13:28 | #


je fait cela de suite

Ajouté le 18/08/2018 à 14:12 :
J'ai trouvé cette fonction :
"void RTC_GetTime (uint *hours, uint *mins, uint *secs, uint *msecs);"
Je ne sais pas m'en servir je pense qu'il va falloir que je créer un dossier externe puis que je stocke toutes les variables qui ont rapport à l'heur dedans comme l'a suggérer Ninestars... (ça je ne sais pas le faire... )
Ensuite j'appelle cette fonction lors de la naissance de l'animal et je met les valeurs dans des variable ans le même dossier externe...
lorsque que je désire savoir l'heure je fait la différence entre les valeurs de la naissance et les valeurs actuelles...
C'est cela ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 15734 Défis: 136 Message

Citer : Posté le 18/08/2018 14:16 | #


Oui, essentiellement, c'est ça. Tu crées un petit fichier dans la mémoire de stockage pour enregistrer le temps de vie de ton Tamagotchi.

Quand l'add-in démarre tu mesures l'heure. Quand il s'arrête tu recommences et tu calcules combien de temps l'add-in a tourné. Puis tu ajoutes ça au total dans le fichier.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:24 | #


ok... Bon question suivante pour 1 000€ : "Comment créer un fichier dans la mémoire de stockage ?"
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 18/08/2018 14:31 | #


C'est dans la doc
https://wiki.planet-casio.com/fr/Fxlib.h#Bfile_CreateFile
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:34 | #


bien vu... désolé de la question mais c'est pas grave j'en ai une autre...
Dans ton tuto tu as mis le code hexadécimal de RTC_getTicks mais je vais utiliser RTC_getTime... comment récupérer le code hexa qui s'y rapporte ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
NinestarsHors ligneMembrePoints: 2253 Défis: 22 Message

Citer : Posté le 18/08/2018 14:37 | #


lephenixnoir a écrit :
En deux mots : tu ne peux pas mesurer le temps qui s'est écoulé dans le monde réel entre le jour où ton Tamagotchi a été créé et celui où il est mort.

Par contre tu peux facilement mesurer le temps pendant lequel ton add-in s'est exécuté entre le jour où ton Tamagotchi a été créé et celui où il est mort.
Je ne comprends pas pourquoi il n'est pas possible de le faire. Si on peut récupérer la date ça suffit.
Le fait que appuyer sur reset ou la modification par un autre add-in puisse changer la date, ok. Mais sinon ça fonctionne non ?!
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:41 | #


merci pour le lien de la doc... mais je ne comprend pas trop comment faire...
mon code devrait être ça :

int main() {
int Bfile_CreateFile(const FONTCHARACTER *temps,1000);

Ou y-a-t-il d'autre choses à mettre ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 18/08/2018 14:42 | #


Shadow15510 a écrit :
Dans ton tuto tu as mis le code hexadécimal de RTC_getTicks mais je vais utiliser RTC_getTime... comment récupérer le code hexa qui s'y rapporte ?


Tout est dans la doc :https://bible.planet-casio.com/simlo/chm/v20/fx_legacy_RTC.htm
Je reconnais qu'il faut savoir où chercher par contre

Mais sinon ça fonctionne non ?!

Oui, Fourmizzz en est un exemple concret.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15734 Défis: 136 Message

Citer : Posté le 18/08/2018 14:43 | #


Le fait que appuyer sur reset ou la modification par un autre add-in puisse changer la date, ok. Mais sinon ça fonctionne non ?!

Si aucun add-in ne change la date, si tu n'appuies pas sur le bouton RESET, si tu ne changes pas les piles, si la calculatrice ne redémarre pas sur un crash, alors oui, sur le principe ça marche.

Mais honnêtement, même sans vouloir être béton armé je ne ferais pas confiance à la date au démarrage de l'add-in si j'étais vous.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:46 | #


pour la date au début que mettre alors ? Je suis obligé d'avoir un point de repère même si il n'est pas fiable... De toute façons je ne suis pas encore là... j'essaye déjà de créer un dossier dans la mémoire de stockage
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 18/08/2018 14:46 | #


Shadow15510 a écrit :
merci pour le lien de la doc... mais je ne comprend pas trop comment faire...
mon code devrait être ça :

int main() {
int Bfile_CreateFile(const FONTCHARACTER *temps,1000);

Ou y-a-t-il d'autre choses à mettre ?

Fait gaffe, là t'as copié le prototype, c'est pas comme ça qu'on appelle une fonction :

int main() {
    FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','f','i','l','e','n','a','m','e','.','e','x','t',0};
    BFile_CreateFile(PathName, 1000);
}


Le problème des BFile, c'est que ça marche avec le FONTCHARACTER de Casio, à savoir des tableaux où chaque caractère est codé sur deux octets et non un seul. Donc on peut pas faire FileName = "\\\\fls0\\file.ext";
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:48 | #


donc le code que tu as mis fonctionne ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 18/08/2018 14:48 | #


Quoi que sinon, y'a la bibliothèque (outdated mais fonctionnelle) de Lephe : https://www.planet-casio.com/Fr/programmes/programme2435-1-memory-LePhenixNoir-add-in.html
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 14:50 | #


Je vais essayer le Bfile_createFile...

Ajouté le 18/08/2018 à 14:57 :
Je pense que j'ai compris voice le code (il et censé appeler RTC_getTime et créer un dossier du nom de "temps.ext" de 1000 octets...
Je n'y comprends plus grand-choses
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    static int SysCallCode[] = { 0xD201422B, 0x60F20000, 0x80010070 };
    static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void *)&SysCallCode;
    void RTC_GetTime (uint *hours, uint *mins, uint *secs, uint *msecs);
    {
        
        return (*SysCall)(0, 0, 0, 0, 0x03a);
    }
    FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','t','e','m','p','s','.','e','x','t',' ',' ',' ',0};
    BFile_CreateFile(PathName, 1000);
    return 1;
}


Ajouté le 18/08/2018 à 15:16 :
Il me reste quelques questions... merci d'avance ceux qui auront la patience de s'y pencher
Faut-il appeler le RTC en global ou dans le main ?
Comment faire pour mettre des variables dans le dossier créé ? (laisser moi deviner la doc ?)
La doc est bien gentille mais je ne comprend pas c'est bourré de mots techniques...
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 15734 Défis: 136 Message

Citer : Posté le 18/08/2018 15:19 | #


J'ai pas le temps de détailler pour l'instant, mais démarre avec ça déjà...

static int SysCallCode[] = { 0xD201422B, 0x60F20000, 0x80010070 };
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void *)&SysCallCode;
void RTC_GetTime (uint *hours, uint *mins, uint *secs, uint *msecs);
{
    return (*SysCall)(0, 0, 0, 0, 0x03a);
}

int AddIn_main(int isAppli, unsigned short OptionNum)
{
    FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','t','e','m','p','s','.','e','x','t',0};
    BFile_CreateFile(PathName, 1000);

    /* T un type, n'importe lequel (hint: structure) */
    T heure;

    /* Pour sauvegarder les contenus de "heure" dans le fichier */
    int fd = Bfile_OpenFile(PathName, _OPENMODE_WRITE);
    Bfile_WriteFile(fd, &heure, sizeof(heure));
    Bfile_CloseFile(fd);

    return 1;
}
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 15:21 | #


merci beaucoup
J'aimerais comprendre : je déclare au début que je vais utiliser le syscall RTC_GetTime.
Ensuite dans le main je créé un dossier. J'ouvre le dossier j'enregistre l'heure dedans et je ferme le dossier...
Jusque là je te suis...
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 18/08/2018 15:26 | #


Heu, attention avec ça, je précise que les BFiles fonctionnent avec des tailles uniquement multiples de 4 octets. Attention donc à ce que la structure ait une taille correcte pour que ça foire pas.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15734 Défis: 136 Message

Citer : Posté le 18/08/2018 15:29 | #


De 2 octets. Bfile_WriteFile() a des bugs quand on écrit un nombre impair d'octets.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 15:35 | #


c'est ok : 1000/4=250 et 1000/2=500
Donc à présent le code créer un dossier et y enregistre la valeur de "heure".
J'aurais besoins de récupérer les valeurs des heures et des minutes afin d'avoir un repère lorsque que l'animal nait.
Il faut donc utiliser RTC_GetTime et le problème est comment faire pour récupérer et les stocker dans une variable vu que RTC est un void ?


Ajouté le 18/08/2018 à 15:53 :
J'ai mis ton code Lephe mais le compilateur l'aime pas... Le rapport de compilation est juste dessous.


"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
LephenixnoirEn ligneAdministrateurPoints: 15734 Défis: 136 Message

Citer : Posté le 18/08/2018 16:49 | #


À vue de nez le point-virgule à la fin de RTC_getTime(...) est en trop. C'était dans ton code d'origine. Il y a peut-être autre chose.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 18/08/2018 16:57 | #


Effectivement le point-virgule était de trop
La compilation ne veut toujours pas à cause du return dans le void... je vire le return tout simplement ou c'est plus compliquer que cela

Ajouté le 18/08/2018 à 17:08 :
Le rapport me note une erreur ici :
void RTC_GetTime (uint *hours, uint *mins, uint *secs, uint *msecs)
a priori ce sont les * qui lui pose problème...
J'ai jeter un œil aux Sources de Fourmizzz pour constater que la fonction que Fourmizzz utilise colle plus à ce que je voudrais avoir... à savoir une heure qui tourne en permanence... Je sais que cela implique des risque comme un dérèglement dus à une reset ou a un autre add-in...

Ajouté le 18/08/2018 à 17:12 :
j'ai trouvé un bout de code issu de Fourmizzz dans le quel il créer un dossier et enregistre vraisemblablement le temps à l'intérieur :
// TEMPS        5
        if(!memory_exists("\\\\fls0\\FOURMIZ\\TEMPS.txt")){
            creation[5] = 1;
            memory_createfile("\\\\fls0\\FOURMIZ\\TEMPS.txt",datal[5]*sizeof(int));
            // ponte - chasse - convoi - constru - labo - ressources+
            for(i=0; i<datal[5]; i++)
                data[5][i] = 0;
            data[5][5] = temps_min()+30;
            memory_save("\\\\fls0\\FOURMIZ\\TEMPS.txt",data[5],datal[5]*sizeof(int));
        }

Ne pourrais-t-on pas faire comme cela aussi ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   95%
Pages : Précédente1, 2, 3, 4, 5, 6, 7, ... 11Suivante

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