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 » Tamagotchi ou la gestion du temps en C
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 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


Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 Suivante
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 21/08/2018 10:35 | #


@Bzh : Je plussoie. C'est tout l'intérêt des Tamagotchis.
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 10:36 | #


mais vous allez me tuer. je ne souhaite pas sa mort je disais juste que si 'ton ne peut s'en occuper tu ne joue pas avec Tamagotchi et du coup encore moins un vrai chat en plus chuis allergique
"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

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

Citer : Posté le 21/08/2018 10:38 | #


Moi je trouve ton système pas mal, mais comment fais-tu quand on change les piles ? L'heure va prendre une valeur aléatoire, tu ne pourras pas savoir combien de temps il s'est écoulé...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 10:39 | #


il faut remettre l'horloge à jour via un add-in horloge comme le tien ou omg clocks il n'y a pas d'autre moyen...

Ajouté le 21/08/2018 à 10:42 :
Rhââââârrggg il va me tuer ce code à la c**
eq=(points[0]/100,0)*106,0;
                en=(points[1]/100,0)*106,0;
                f=(points[2]/100,0)*106,0;
                hy=(points[4]/100,0)*106,0;
                hu=(points[3]/100,0)*50,0;

toutes les variables (eq, en, f, hy, hu et le tableau) sont déclarée en double avec des nombres décimaux...
Quel que soit soir la valeurs du tableau il me renvoie 0...
"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

Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 21/08/2018 10:48 | #


Il faut des points, pas des virgules. Encore une bonne raison pour coder en anglais, ça évite ce genre d'erreur.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 10:51 | #


Breizh m'a mis au jus... à sa manière mais c'est ok
"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

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

Citer : Posté le 21/08/2018 11:01 | #


Pour info, "x, y" se lit comme « calcule x, jette le résultat, renvoie y ». Ainsi eq=(points[0]/100,0)*106,0 se comprend :

eq = ((points[0]/100, 0) * 106, 0)

Autrement dit :
- On calcule points[0]/100, on jette le résultat, on renvoie 0.
- On multiple par 106, on jette le résultat, on renvoie 0.

Donc effectivement ça faisait 0.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 11:03 | #


d'ou l'importance de conserver la partie décimale ce que le code fait à merveille à présent mes jauges fonctionnent !
"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

Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 11:09 | # | Fichier joint


Mesdames et messieurs je vous met en pièce jointe le premier jet !
F1 pour manger,
F2 pour aller au toilettes
F3 pour jouer (pas encore codé)
F4 pour dormir
F5 pour le laver
OPTN pour voir les Stats ( pour quitter les stats n'importe quel touche)
EXIT pour quitter

Ajouté le 21/08/2018 à 13:23 :
Je suis passé de l'émulateur au on calc avec une mauvaise surprise dès le début : une jolie System Error
ADDRESS (R)
TARGET = E6FF2136
PC = 0810010C
merci d'avance si vous avez une solution
"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

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

Citer : Posté le 21/08/2018 13:29 | #


La solution se trouve dans ton code, comme d'habitude !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 13:30 | #


Oui je m'en doute... l'ordi ne fait que ce qu'on lui demande... mais je ne comprend pas d'où elle vient : l'émulateur fonctionne parfaitement alors que la calto 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

Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 21/08/2018 13:35 | #


J'ai passé le message de Lephe dans le traducteur universel des forums d'aide :

Lephenixnoir a écrit :
Si on a a pas le code, on peut pas t'aider

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 13:36 | # | Fichier joint


Ah ben oui forcément ça aide pas...
je vous le met pièce jointe
"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

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

Citer : Posté le 21/08/2018 13:50 | #


Il est plus que temps de couper ton fichier en morceaux là...

J'ai dit que les int prenaient 4 octets mais sais-tu combien de place prend un double ?

Tu ne devrais pas supprimer les fichiers de sauvegarde au chargement parce que si je quitte au milieu ou je RESET toute la partie est perdue. Fais-le juste avant de sauvegarder. Pense aussi à sauvergarder immédiatement quand on crée une partie, sinon tu te retrouves avec des fichiers de sauvegardes plein de valeurs (quasi-) infinies.

for(i==0;i<3;i++)

D'habitude c'est plutôt dans l'autre sens qu'on fait l'erreur...


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 13:53 | #


Je fais les deux t'inquiètes pas
pour les fichiers de sauvegardes je ne suis pas très à l'aise avec pour les double l'idée ne m'as même pas effleurée : je n'en sais rien...
Alors du coup pour les double ça fait combien d'octet ?
Pour les fichiers tu m'avais dit que je devais les supprimer pour les modifier... Or au début je supprime le fichier puis je met à jour l'heure, je le recrée et je remet l'heure à l'intérieur...
"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

Massena En ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 21/08/2018 14:09 | #


J'ai peur de commencer à jouer à Tamagotchi, et de négliger mon chat et puis qu'il meure
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 21/08/2018 14:11 | #


J'ai failli mettre le code ici, mais wow, comment tu t'y retrouves ? oO

1. Déjà t'as un #include vide, je savais pas que ça pouvait passer la compilation.
2. Ensuite, la liste de #define KEY_ t'as le droit de la mettre dans un fichier keycodes.h et de l'inclure dans le main, ça fera de la place.
3. Pour toutes les fonctions copiées/collées de je-ne-sais-où (l. 66 à l. 173), mets les aussi dans un autre fichier .c, fais un header propre et inclus-le dans le main. Pareil, refais moi cette indentation, c'est illisible en l'état.
4. Pour les sprites, rebelote. Tu fais un sprites.c dans lequel tu mets les tableaux, et ensuite dans le main tu les déclare en extern const char *Pmanger; par exemple.
5. Pour les sprites tu peux optimiser la taille; Je pense aux chats par exemple, ils sont remplis de lignes blanches qui servent à rien et prennent de la place en mémoire inutilement.
6. Pour l'affichage, fais des fonctions bordel ><. Les animations ça se fait pas à coup de code comme ça. Si vraiment tu peux pas optimiser, tu fais un array genre positions[] = {60, 58, 52, 60, 63, 52}; for(i = 0; i < 6; i++) {ML_cv(); ML_bmp_or(positions[i], y, a, b); ML_dv(); Sleep(50); }. En trois lignes je t'en remplace 55.
7. Ligne 1066. Le type qui a inventé la boucle for doit se retourner dans sa tombe.
8. Ligne 1090. Les tableaux de pointeurs, ça sert à ça. (ML_bmp_or(sprites_chats[animal], 39, 7, 50, 50); remplace les lignes 1090 à 1110. Idem pour le switch suivant)
9. for(i==0;... Lephe a déjà expliqué
10. Ah, les matrices, heureusement qu'on les a inventées. for(i = 0; i < 5; i++) points[i] += evolution[numero][i]; pour remplacer les lignes 1146 à 1191.

Je continue pas plus loin, mais concrètement :
I. Découpe ton projet en plusieurs fichiers, surtout pour les sprites.
II. Pour ces derniers, mets les sur une ligne. Pas besoin de "voir" leur contenu.
III. Le moteur du jeu pourrait tenir sur 300 lignes si tu utilisais des tableaux et des boucles.
IV. Pourquoi utiliser des bouts de codes externes (cf 3.) alors que t'en as pas besoin ?
V. Soigne ton indentation/nommage. Ça sera plus clair pour toi et ceux qui t'aideront à débugguer.

Ajouté le 21/08/2018 à 14:13 :
Ah, et une petite citation pour conclure sur la taille du projet :
Un inconnu a écrit :
Les lignes de code, c'est comme les heures de jeu. Tout le monde dit qu'il en a beaucoup, mais le mieux c'est d'en avoir le moins.

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 21/08/2018 14:19 | #


Je précise que la citation est de Louloux (AFAIK).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

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


Pour ce qui est de s'y retrouver je pense que cela doit être l'habitude... (jette un œil à mes programmes en BASIC) Non sincèrement c'est surtout que je ne sais pas faire tout cela
1. Corrigé !
2. A voir
3. A voir
4. Corrigé !
5.Je ne sais pas faire
6.Ce sont des fonctions que je ne connais pas...
7. Corrigé !
8.Corrigè !
9. Corrigé !
10.Les matrices... Je ne sais pas m'en servir ni les déclarer...

Bon en grandes parts c'est juste mon ignorance ça un côté rassurant c'est facilement rattrapables... mais j'ai besoins de votre aide là 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

Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

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


Je suis au taf, donc je répondrais plus en détail sur ces points ce soir, si personne ne l'a fait d'ici là.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 21/08/2018 14:31 | # | Fichier joint


Pendant ce temps je "nettoie" mon code
Je mettrait à jour mon commentaire ci-dessus au fur et à mesure de mes avancées
Le dossier des sources est en PJ
"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

Précédente 1, 2, 3, 4, 5, 6, 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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 146 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