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 ... , 4, 5, 6, 7, 8, 9, 10, 11Suivante
LephenixnoirEn ligneAdministrateurPoints: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 13:58 | #


Je ne dis pas que tu devrais utiliser gint, plutôt le contraire. Je répondais juste à Zezombye.

Je reste persuadé que le syscall marche très bien sous SH4 et je t'invite à essayer la version assembleur de l'appel, que Zezombye a posté dans le tuto GCC il y tout juste plus d'un quart d'heure, en ajustant les valeurs.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 23/08/2018 13:59 | #


je vais essayé le code de Zz mais j'ai pas tout compris :
En gros je créer un fichier source genre syscall.c et dedans je met :

.export _monSyscall

_monSyscall:
    mov.l    syscall_table, r2
    mov.l    monSyscall_code, r0
    jmp    @r2
    nop
monSyscall_code:
    .data.l    H'03A

syscall_table:
    .data.l    H'80010070

    .end

"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: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 14:04 | #


C'est ça, tu remplaces _monSyscall par le nom de ta fonction avec un _, par exemple _RTC_GetTime. Il faut le faire à deux (trois) endroits. Le numéro du syscall (H'03A) est déjà juste.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 23/08/2018 14:06 | #


Je sais que le numéro est juste : je l'ai modifié
et ensuite j'inclus le *.c comme un *.h dans mon projet ?
Il faut que je vire la déclaration de RTC_GetTime qui l'appelle du coup , non ?
"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 23/08/2018 14:13 | #


syscall.src de préférence.
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 23/08/2018 14:14 | #


J'obtient donc ce code :

.export _RTC_GetTime

_RTC_GetTime:
mov.l    syscall_table, r2
mov.l    monSyscall_code, r0
jmp    @r2
nop
_RTC_GetTime_code:
.data.l    H'03A

syscall_table:
.data.l    H'80010070

.end

Ok il est en *.src
"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 23/08/2018 14:15 | #


et ensuite j'inclus le *.c comme un *.h dans mon projet ?

Non, non, et non ! Non. Juste non. On n'inclue JAMAIS au grand jamais un .c ! Tu ajoutes le .src à la liste des fichiers sources (comme MonochromeLib par exemple), tu définis un prototype dans un .h, et tu inclue le .h.
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 23/08/2018 14:16 | #


Ah ok... et comment je fais le prototype de ce *.src ?
"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: 15732 Défis: 136 Message

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


My bad, c'était deux (quatre) occurrences. Tu as laissé un monSyscall_code qui devrait être identique au _RTC_GetTime_code plus bas.

Le code assembleur va dans des fichiers .src (ou .s sous Linux) et se comporte comme un fichier .c. Tu ne l'inclus pas... !
Dark stormEn ligneMembre d'honneurPoints: 10825 Défis: 176 Message

Citer : Posté le 23/08/2018 14:17 | #


Comme un .h normal.
// syscall.h

void RTC_GetTime(int* a, int* b, int* c, int*d);

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 23/08/2018 14:18 | #


Celui en face mov.1 ....,r0 ?
"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: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 14:20 | #


Oui, celui en face de mov.l ..., r0.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 23/08/2018 14:20 | #


Fait !!

Ajouté le 23/08/2018 à 14:34 :
Donc j'ai un fichier syscall.src qui contient

.export _RTC_GetTime

_RTC_GetTime:
mov.l    syscall_table, r2
mov.l    RTC_GetTime_code, r0
jmp    @r2
nop
_RTC_GetTime_code:
.data.l    H'03A

syscall_table:
.data.l    H'80010070

.end

(mon fichier .src ne contient rien d'autre que ce qui est là, rien du tout c'est bon ?)

Et mon fichier syscall.h qui ne contient que :

#ifndef syscall_h
#define syscall_h
void RTC_GetTime(unsigned int*hours,unsigned int*mins,unsigned int*secs,unsigned int*msecs);
#endif


J'ajoute le *.src comme un .c et le .h comme les autres en l'incluant en haut de mon code mère... Et c'est tout ?
"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: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 14:44 | #


C'est tout. Il manque un underscore à mov.l RTC_GetTime_code, r0 toutefois.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

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


Ah c'est pour cela que cela ne marche... merci

Ajouté le 23/08/2018 à 14:57 :
Ah non ça ne vient pas que de là : la compilation ne fonctionne pas à cause d'erreurs dans le fichier syscall.src... Le rapport me dit que j'en ai une à chaque ligne...
"ILLEGAL SYMBAL OR SECTION NAME" sur les lignes 1, 4, 5, 9, 12 et 14
"ILLEGAL MNEMONIC" sur les lignes 1, 4, 5, 6, 9, et 12
".END NOT FOUND" sur la 14

"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: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 15:00 | #


Toutes les lignes qui ne comportent pas un : doivent commencer par une espace ou une tabulation.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 23/08/2018 15:02 | #


soit l'un soir l'autre ?
"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: 15732 Défis: 136 Message

Citer : Posté le 23/08/2018 15:02 | #


Yup, ou plusieurs même.
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 23/08/2018 15:04 | #


Nickel c'est bon : la compilation marche...
maintenant voyons le on calc...

Ajouté le 24/08/2018 à 11:00 :
Je viens de me rendre compte qu'il faudrait que le programme connaisse le jour : imaginons que le joueur éteigne le Tamagotchi à 18h00 le samedi et le reprenne à 17h00 le dimanche... le code va penser qu'il s'est écoulé -1 heures... alors qu'il y en eu 25 il faudrait donc prendre la fonction RTC_GetDateTime
Ce qui implique deux problèmes : le BCD Lephe m'avait filé un code pour décoder :

int bcd = 0x47;
int dec = 10 * ((bcd >> 4) & 0xf) + (bcd & 0xf);
/* dec = 47 */

Comment fonctionne-t-il et cela suffit-il pour tout décoder ou faudra-t-il que je pense à le mettre plusieurs fois pour chaque données ?

Et l'autre problème RTC_GetDateTime est un void et le tableau n'est pas un pointeur... Donc comment puis-je faire pour récupérer mes données ?
"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: 15732 Défis: 136 Message

Citer : Posté le 24/08/2018 11:35 | #


Je viens de me rendre compte qu'il faudrait que le programme connaisse le jour : imaginons que le joueur éteigne le Tamagotchi à 18h00 le samedi et le reprenne à 17h00 le dimanche... le code va penser qu'il s'est écoulé -1 heures... alors qu'il y en eu 25 il faudrait donc prendre la fonction RTC_GetDateTime

Ce serait bien mais il n'y a pas de syscall de ce genre d'après SimLo. Ce qui te laisse effectivement comme seule possibilité d'utiliser directement la RTC.

Pour ça tu peux récupérer directement le code approprié dans gint, ce sera plus simple... il y a des fonctions toutes faites qui te renvoient des structures. Par contre tu es sur le SDK si je ne me trompe pas ?
Shadow15510Hors ligneAdministrateurPoints: 3782 Défis: 15 Message

Citer : Posté le 24/08/2018 11:39 | #


C'est cela : je suis sur le SDK Et si le syscall RTC_GetDateTime existe : ici
"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 ... , 4, 5, 6, 7, 8, 9, 10, 11Suivante

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