Plane - Créer votre propre compagnie aérienne !
Posté le 21/02/2022 12:44
Hello les amigos !
Tout est dans le titre
J'essaye de concevoir un programme dans lequel le joueur pourrait créer une compagnie aérienne en achetant des avions, en planifiant les trajets, en recrutant des pilotes, etc...
Le tout...
en BASIC CASIO.
Autant vous dire que la tâche est ardue
Les difficultés
La mémoire
La mémoire est très limitée (64ko) : pour pallier ce problème, j'essaye d'optimiser le programme un maximum. Pour ça :
> J'utilise du Multi Drawstat plutôt que des pictures. Tout le Multi Drawstat est écrit à la mano pour gratter quelques octets.
> Les conditions sont ultra simplifiées.
Ex :
O + 1 - 2(G = 28) -> O plutôt que :
If G=28 :Then
Dsz O
Else Isz 0
IfEnd
# Ou même :
G=28 => Dsz O
G=37 => Isz O
Le temps de traçage
Le dessin est assez lent : beaucoup moins avec le Multi Drawstat en réalité donc c'est pas vraaaiment un soucis.
La gestion des ticks (horloge)
Le plus gros problème réside dans la gestion du
temps. Pour l'immersion, je souhaiterais que les vols (et d'autres mécaniques du jeu) ne soient pas instantanés. Ça permet d'éviter que le joueur balance toute sa flotte en un coup et que les rentrées d'argent soient trop rapides.
Il n'y a, à ma connaissance, aucun moyen de gérer
efficacement le temps en Basic. Il y a quelques années, j'avais conçu un petit programme (une grosse boucle de jeu) qui laissait à chaque tour la main à un sous programme se chargeant d'incrémenter le temps, puis qui retournait au programme appelant pour que le joueur fasse des actions. C'était codé à l'arrache mais ça marchait plus ou moins. Inconvénient : fallait laisser tourner le programme
Avez vous une autre solution ? I'm desperate
J'ai besoin de vous !
Je serais ravi d'écouter vos conseils d'optimisation, vos idées et vos suggestions pour le jeu
Je posterai les avancées du projet en
commentaire ou en
édit de ce post.
Merci beaucoup d'avoir pris le temps de tout lire et à la prochaine
Citer : Posté le 21/02/2022 13:00 | #
Hey !
Joli projet !
Tu peux regarder du côté de CBasic cette version améliorée du BASIC Casio permet entre autre : une bien meilleure rapidité, des fonctionnalités supplémentaire dont une gestion du temps. De même CBasic permet d'exploiter la mémoire de stockage de la calculatrice, soit 1.5 Mo (3 Mo pour les derniers modèles) de mémoire en plus.
Citer : Posté le 21/02/2022 13:25 | #
Hello, merci pour le soutien !
Effectivement j'en ai déjà entendu parler Mais j'aimerais, dans la mesure du possible, rester sur les fonctionnalités built-in de la calculatrice. C'est le défi haha Rassure toi je ne suis pas borné ! À terme, je ferai sûrement une version améliorée du programme en C mais pour l'instant je préfère faire du "vanilla" complet
Citer : Posté le 21/02/2022 13:32 | #
Je vois, pour mesurer du temps juste avec le Basic de base, c'est sûr que ce n'est pas nativement prévu, après, c'est peut-être possible de ruser, en faisant avancer le jeu d'un "jour" ou autre unité élémentaire de temps tous les n tour de boucle. À voir si ça ne ralenti pas trop l'exécution du reste…
Après, je pense que le problème de la place ne se pose pas trop, c'est grand 64ko. Niveau graphisme, l'affichage d'image pré-enregistrée est instantanée, mais niveau taille c'est vrai que ça coûte cher…
En résumé, le seul "gros" problème c'est surtout la gestion du temps réel quoi.
Citer : Posté le 21/02/2022 13:38 | #
Après moi j'ai utilisé une boucle pour le timing dans mon jeu et ça marche très bien, après il ne faut pas exécuter trop de choses dedans, sinon ça devient très très lent (lorsque j'ai commencé à le coder il tournait à ~1fps).
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 21/02/2022 14:41 | #
Je vois, pour mesurer du temps juste avec le Basic de base, c'est sûr que ce n'est pas nativement prévu, après, c'est peut-être possible de ruser, en faisant avancer le jeu d'un "jour" ou autre unité élémentaire de temps tous les n tour de boucle. À voir si ça ne ralenti pas trop l'exécution du reste…
Yep je vais tester. À la limite, si je vois que c'est pas viable au niveau de l'exécution, je peux toujours augmenter la difficulté du jeu d'une autre manière. Si tu as des pistes qui vont dans ce sens je suis preneur
Après moi j'ai utilisé une boucle pour le timing dans mon jeu et ça marche très bien, après il ne faut pas exécuter trop de choses dedans, sinon ça devient très très lent (lorsque j'ai commencé à le coder il tournait à ~1fps).
Ouep c'était mon idée de départ. Est-ce que tu as réussi à arriver à quelque chose d'efficace ? Je suis curieux de voir ton code si ça ne te dérange pas
Citer : Posté le 21/02/2022 15:27 | #
C'est le jeu NEON : https://www.planet-casio.com/Fr/programmes/programme4220-1-neon-mb88-jeux-directiontir.html#63421. Pour que mon jeu fonctionne correctement, j'avais tout modifié pour le faire fonctionner en mode texte. Je l'avoue, je suis débutant en Casio Basic.
EDIT :
Après je l'ai codé sur une calculette récente (Graph 35+e II), donc je ne sais pas ce que ça donne sur les anciennes calculettes (je ne sais pas sur quoi tu codes).
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 22/02/2022 01:09 | #
Ouep, j'ai pu regarder et ça reste assez casse gueule. Je pense que le mieux serait d'oublier cette mécanique. Il faut que je réfléchisse à d'autres moyens pour élever un peu la difficulté
Citer : Posté le 22/02/2022 05:31 | #
Are you able to give us your code?
(can use FA-124)
you can remove the last bracket )
O + 1 - 2(G = 28 -> O
you can remove all end brackets (except for string commands)
Mat A[List1[A]+X,List2[B]+Y]=5->T
5=Mat A[X+List1[A,Y+List2[B->T
Citer : Posté le 22/02/2022 11:03 | #
you can remove the last bracket )
I already removed the bracket in this condition indeed but thanks for pointing it out
Are you able to give us your code?
I haven't done anything yet But maybe I'll push it in a git repo