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 » Calculator the Game Casio Edition
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Calculator the Game Casio Edition

Posté le 02/09/2018 15:19

Calculator the Game, disponible sur Android et iOS, est un jeu de "casse-tête"/calcul fort sympathique, et je me suis dit :
"Un jeu sur les calculatrices jouable sur calculatrice ? "
Le jeu est toujours en développement, je suis en train de faire le moteur de jeu (en Basic) FAIT, je m'attaquerai ensuite à la recopie ou création de niveaux. Par préférence et aussi parce que Text rend trop petit je le ferai en mode texte à coups de Locates.
Voici un aperçu du jeu actuellement :



.old
.old
Le jeu n'est vraiment pas jouable pour le moment, je me servirai de ce topic comme d'un suivi de progression (c'est plus propre que ce que j'avais fait pour Useless).
Je crée le topic maintenant pour demander votre avis sur l'interface et ce qui est à changer, pour fixer ça et passer à la suite.
Merci d'avance


Je précise que ce jeu est une ADAPTATION du jeu original sous Android, ce qui signifie que j'essaie de rester le plus fidèle possible par rapport au jeu original.

J'y irai petit à petit pour le développement, rien ne m'énerve plus qu'un jeu buggé.
(Un niveau par demi-heure c'est beau mais c'est long)

EDIT : mis à jour


Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 05/09/2018 15:18 | #


Lephenixnoir a écrit :
Tu peux les mettre dans une Str. Ici je mets des # chaque fois qu'il faut revenir à la ligne et des @ chaque fois qu'il faut attendre que l'utilisateur appuie.

"HI!@My name is#Clicky@Want to#play a game#?@etc"

Après tu peux encoder aussi les textes sur les touches. Le texte est ce qu'il existe de plus compact. Tu peux aussi gagner des octets en ayant { 1,2,3 }→List 1 dans ton programme (11 octets) comparé à fournir la liste dans le g1m (36 octets).

Mais pour lire ça il faut un sous-programme non ?
ouais ouais
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 05/09/2018 15:21 | #


Bien sûr mais le code de ce sous-programme sera utilisé pour tous les niveaux à la fois. Compte tenu du nombre de niveaux c'est supposé être rentable.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 05/09/2018 15:30 | #


Je vais essayer merci
ouais ouais
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 05/09/2018 15:51 | #


Le code pour lire ça ne devrait pas te prendre plus de 100 octets, ça va être surement rentable.
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 !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 12:17 | #


Bon j'ai un problème
Je ne comprends vraiment pas les fonctions pour les Strings, j'ai donc essayé quelque chose qui pour moi est correct mais ne fonctionne définitivement pas...
Je mets le code, merci d'avance
#Program name: D
#Password: <no password>
10->X
1->Y
"TEST@ARGENT=@POWER"->Str 20
For 1 -> A To StrLen(Str 20)
        StrMid(Str 1, A, 1)->Str 19
        If Not StrCmp(Str 19,"@"
        Then Isz Y
        10->X
        Else If Not StrCmp(Str 19,"#"
        Then A
        Else Isz X
        Locate X,Y,Str 19
        IfEnd
        IfEnd
        While GetKey
        WhileEnd
        While Not GetKey
        WhileEnd
Next

Ici je n'ai pas encore défini le # (il faudrait déjà que le reste fonctionne ) et les @ représentent le retour à la ligne.
EDIT : L'erreur est se trouve au Locate après le X.
ouais ouais
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 08/09/2018 12:24 | #


Salut Kikoodx !

Dans la ligne "StrMid(Str 1, A, 1)->Str 19", que vaut Str 1 ?

Connais tu la fonction StrSrc( ? Je pense que ça te serait utile pour faire une version alternative à ce que tu cherches à faire, en plus rapide.

L'idée est de chercher le premier "@" de ta chaîne 20, de récupérer son index, et de directement récupérer et afficher tous les caractères entre le premier et cet index. Puis tu décale ou supprime ces caractères et tu réitères jusqu'à arriver à la fin de la chaîne.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 12:32 | #


Ne0tux a écrit :
Salut Kikoodx !

Dans la ligne "StrMid(Str 1, A, 1)->Str 19", que vaut Str 1 ?

Connais tu la fonction StrSrc( ? Je pense que ça te serait utile pour faire une version alternative à ce que tu cherches à faire, en plus rapide.

L'idée est de chercher le premier "@" de ta chaîne 20, de récupérer son index, et de directement récupérer et afficher tous les caractères entre le premier et cet index. Puis tu décale ou supprime ces caractères et tu réitères jusqu'à arriver à la fin de la chaîne.
Oui effectivement ce serait plus rapide !
Si j'ai bien compris je découperai ma chaîne en quatres parties (avec @ comme séparateur), j'affiche les trois premières et je me sert de la dernière pour l'input ?
ouais ouais
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 08/09/2018 12:38 | #


Voilà un exemple que je viens de tester on calc :

"1234@567@89@0"->Str 1
0->A~B
While StrSrc(Str 1, "@")
Isz B
StrSrc(Str 1, "@")
StrLeft(Str 1, Ans-1)->Str 2
/* Tu peux mettre ici un algo qui gère "#" en utilisant Str 2*/
Locate A, B, Str 2
StrRight(Str 1, StrLen(Str 1)-Ans)->Str 1
WhileEnd

Je n'ai pas compris ce dont tu parles en écrivant "input".
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 12:47 | #


Ne0tux a écrit :
Voilà un exemple que je viens de tester on calc :

"1234@567@89@0"->Str 1
0->A~B
While StrSrc(Str 1, "@")
Isz B
StrSrc(Str 1, "@")
StrLeft(Str 1, Ans-1)->Str 2
/* Tu peux mettre ici un algo qui gère "#" en utilisant Str 2 */
Locate A, B, Str 2
StrRight(Str 1, StrLen(Str 1)-Ans)->Str 1
WhileEnd

Je n'ai pas compris ce dont tu parles en écrivant "input".

Pour être franc je n'ai pas trop compris
Input c'est un réflexe du Python, j'attend une entrée.
J'ai testé mon code, il fonctionne c'est juste que comme tu l'as signalé le Str 1 n'existait pas
Du coup je ne sais pas si je le conserve où j'en recode un du style de celui que tu as fait, au risque de ne pas comprendre
En tout cas merci beaucoup Ne0tux
EDIT : tu as modifié ton code pendant que j'écrivais ma réponse
ouais ouais
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 08/09/2018 12:53 | #


Si ton code actuel fonctionne et que le seul soucis était la Str 1, tu peux le garder ! Après je pense que tu n'as rien à perdre (si ce n'est un peu de temps) à essayer de comprendre ma version qui, je pense, s'exécutera plus vite.

Quelle ligne de mon code te pose problème ?

J'ai fait ce que je décrivais en toute lettre plus haut :

Tant qu'il existe un "@" dans la chaîne Str 1
On augmente le numéro de ligne pour l'affichage
On cherche l'indice du premier "@" dans la chaîne Str 1
On enregistre dans la Str 2 tous les caractères de la Str 1 entre le premier et l'indice obtenu précédemment
On fait ce qu'on veut avec Str 2, pour détecter des "#" ou l'afficher via Locate
On met à jour Str 1 en ne gardant que les caractères à droite du "@" qu'on vient de traiter
Fin du tant que
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 12:57 | #


Ne0tux a écrit :
Si ton code actuel fonctionne et que le seul soucis était la Str 1, tu peux le garder ! Après je pense que tu n'as rien à perdre (si ce n'est un peu de temps) à essayer de comprendre ma version qui, je pense, s'exécutera plus vite.

Quelle ligne de mon code te pose problème ?

J'ai fait ce que je décrivais en toute lettre plus haut :

Tant qu'il existe un "@" dans la chaîne Str 1
On augmente le numéro de ligne pour l'affichage
On cherche l'indice du premier "@" dans la chaîne Str 1
On enregistre dans la Str 2 tous les caractères de la Str 1 entre le premier et l'indice obtenu précédemment
On fait ce qu'on veut avec Str 2, pour détecter des "#" ou l'afficher via Locate
On met à jour Str 1 en ne gardant que les caractères à droite du "@" qu'on vient de traiter
Fin du tant que

Avant que tu édites il y avait des "x" à la place d'arobases, et je ne vois pas trop comment gérer le "#" après
Refaire la même opération ?
De toute façon je place les "#" de cette façon pour délimiter la fin de la chaine :
"Bonjour@Comment@va ?#Bien"
Après plus rien
Je vois que mon code est lent mais ça fait un petit effet d'affichage stylé je trouve

Ajouté le 08/09/2018 à 13:05 :
OK j'ai modifié mon code ça fonctionne très bien
#Program name: D
#Password: <no password>
10->X
1->Y
Locate 11,1,Str 1
Locate 11,2,Str 1
Locate 11,3,Str 1
For 1 -> A To StrLen(Str 20)
        StrMid(Str 20, A, 1)->Str 19
        If Not StrCmp(Str 19,"@"
        Then Isz Y
        10->X
        Else If Not StrCmp(Str 19,"#"
        Then Locate 9,6,StrRight(Str 20,StrLen(Str 20)-A)
        255->A
        Else Isz X
        Locate X,Y,Str 19
        IfEnd
        IfEnd
Next

Merci encore Ne0tux, je me suis servi de StrRight( grâce à toi
ouais ouais
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 08/09/2018 13:07 | #


Oui j'avais mis des "x" quand j'ai programmé sur ma Casio, la flemme d'aller chercher le "@" on calc ! Enfin pas exactement la flemme : j'ai pu tout coder sans regarder l'écran, je sais où sont les fonctions et les touches. Mais je ne sais pas de mémoire où est le "@" dans le menu "CHAR".

Donc oui j'ai modifié a posteriori mes messages pour que ce soit des "@" pour que ça colle à ton utilisation, mais je suis sûr que tu avais saisi que "x" ou "@" c'est pareil.

A quoi te sert le "#" exactement ? Décaler le Locate de vers la droite ? Si c'est juste ça il te suffit de faire comme suit :

"Bonjour@Comment@va ?@#Bien@->Str 1
0->B
While StrSrc(Str 1, "@")
Isz B
StrSrc(Str 1, "@")->L
StrLeft(Str 1, L-1)->Str 2
Locate 1+StrSrc(Str 2, "#"), B, Str 2
StrRight(Str 1, StrLen(Str 1)-L)->Str 1
While GetKey
WhileEnd
While Not GetKey
WhileEnd
WhileEnd

Dans cet exemple le "Bien" est décalé de 1 vers la droite et j'ai ajouté "l'input".
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 13:11 | #


Ne0tux a écrit :
Oui j'avais mis des "x" quand j'ai programmé sur ma Casio, la flemme d'aller chercher le "@" on calc ! Enfin pas exactement la flemme : j'ai pu tout coder sans regarder l'écran, je sais où sont les fonctions et les touches. Mais je ne sais pas de mémoire où est le "@" dans le menu "CHAR".

Donc oui j'ai modifié a posteriori mes messages pour que ce soit des "@" pour que ça colle à ton utilisation, mais je suis sûr que tu avais saisi que "x" ou "@" c'est pareil.

A quoi te sert le "#" exactement ? Décaler le Locate de vers la droite ? Si c'est juste ça il te suffit de faire comme suit :

"Bonjour@Comment@va ?@#Bien@->Str 1
0->B
While StrSrc(Str 1, "@")
Isz B
StrSrc(Str 1, "@")->L
StrLeft(Str 1, L-1)->Str 2
Locate 1+StrSrc(Str 2, "#"), B, Str 2
StrRight(Str 1, StrLen(Str 1)-L)->Str 1
While GetKey
WhileEnd
While Not GetKey
WhileEnd
WhileEnd

Dans cet exemple le "Bien" est décalé de 1 vers la droite et j'ai ajouté "l'input".

Non non je vais bientôt poster le programme mis à jour pour que tu puisses voir
ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 08/09/2018 14:39 | # | Fichier joint


Voilà j'ai fini d'implanter le sous programme !
Il fait gagner un peu plus de 300 octets.
Et l'affichage du texte a changé.
Cf. fichier joint
ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 09/09/2018 16:51 | # | Fichier joint


Salut, 2 niveaux en plus (avec les dialogues qui vont avec), j'ai corrigé quelques problèmes d'affichages et j'ai fait ce que LePhénixNoir m'a conseillé grâce à l'aide de Ne0tux : un sous-programme
Maintenant le texte s'affiche à la façon de certains RPG lettre par lettre (c'est volontaire bien sûr )
Le jeu comporte déjà 5 niveaux, je ne sais pas combien je compte en faire, mais ça avance plutôt bien je trouve
La Démo est en fichier joint

Si quelqu'un la teste, merci de me donner votre avis sur l'affichage du texte, le laisser comme ça où le traiter plus rapidement (comme Ne0tux l'avait proposé) et me signaler les bugs éventuels (hormis le NON du tuto déjà connu)
Merci d'avance
KikooDX

Ajouté le 09/09/2018 à 18:30 :
Je viens de voir que le jeu comporte 200 niveaux, je doute que cela puisse tenir en 10Ko
ouais ouais
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 09/09/2018 18:34 | #


Tu te poseras la question quand tu arriveras là. À mon avis ça passe avec un peu de compression bien placée. À toi de voir ensuite.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 15/09/2018 14:09 | #


Tu aurais pu agrandir l'écran de l'émulateur pour faire la vidéo !
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 !
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 15/09/2018 14:56 | #


Drak a écrit :
Tu aurais pu agrandir l'écran de l'émulateur pour faire la vidéo !

Ah je ne savais pas que c'était possible... Je vais en refaire une alors

Ajouté le 15/09/2018 à 15:08 :
Voici une vidéo propre de la dernière version :
Vidéo du jeu à ce jour, ne pas regarder si vous souhaitez tester
Ben ouais c'est un jeu de puzzle, ce serait un peu bête de voir les réponses

ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 03/10/2018 16:19 | # | Fichier joint


Je retourne sur le projet !
J'ai ajouté un niveau (le 6) mais c'est surtout prétexte pour parler de deux choses.

1. Les 3 boutons gauches
Les trois boutons se trouvant à gauche de l'interface du jeu
Aperçu
Aperçu
[ EUX ][     ][     ]
[ EUX ][     ][     ]
[ EUX ][     ][     ]

sont dans le jeu original assignés à trois touches inutiles sur Calc :
La première servait à payer pour voir la solution.
La seconde à voir une pub pour voir la solution (c'est un jeu mobile que voulez-vous )
Le troisième à accéder aux options.

Je n'ai rien assigné à ces trois touches. Ce n'est pas gênant mais bon, si vous avez quelque chose à proposer je pourrais peut-être combler ce vide

2. Niveaux custom
Les niveaux du jeu deviennent assez répétitifs au bout du 15ème, voilà pourquoi je vous demande si vous avez des idées de niveaux à proposer (style chiffre et des lettres), avec 7 commandes max. de disponibles.
Voir mon exemple sur le troisième post.
Bien sûr le nom serait indiqué (haut à droite de l'écran)

Voilà, merci d'avance

Fichier joint : dernière version.

Ajouté le 03/11/2018 à 10:55 :
Bonjour, je pense que je vais recoder le projet entier, utiliser un code tel que l'avait proposé @Ne0tux pour rendre le programme plus rapide (à terme c'est trop long d'attendre que les lettres s'affichent une par une) et un autre sous-programme étant la partie "jeu".

Je l'imagine comme ceci :
Dialogues : prend en paramètre une liste.
Moteur de jeu : prend un tas de paramètres.

Parce que la façon dont je l'ai conçu ça fait 200/300 octets par niveau, c'est trop pour un jeu de 200 niveaux.
Et à l'occasion je me pose toujours la question de ce que je devrais faire de ces zones inutiles...
ouais ouais
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 03/11/2018 11:43 | #


Il faut que tu trouves une méthode pour contenir les données / paramètres nécessaires à chaque niveaux de manière efficace. Pour une telle situation, j'aurais utilisé les Str. À voir.
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 !
Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 Message

Citer : Posté le 03/11/2018 11:45 | #


Je pense qu'il faut demander à Ne0tux dans ce cas

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