Ce programme a participé à l'édition n°19 des Casio Programming Contest. Pour plus d'informations sur cet événement, cliquez ici.
Votre calculatrice doit posséder les chaines de caractères (Str) et Menu pour utiliser ce programme. Si vous avez une Graph 85 (SD), mettez-la à jour.Description :
- Premier fichier : la version 1.0 ayant participé au concours, faite par moi-même ;
- Second fichier : la version 1.0 arrangée par Kirafi.
Synopsis
Vous êtes un enfant qui s'amuse dans une ruelle et tout à coup, vous voyez une fourmi qui essaie d'atteindre un bonbon un peu plus loin. Seulement, sur le sol, vous voyez une substance que vous savez toxique pour les fourmis, et vous voulez aider celle-ci. Quand tout à coup, vous voyez des cailloux à côté : voilà comment vous allez aider votre petite protégée.
Contrôles
Bien que le tutoriel présent in-game résume assez bien le synopsis ci-dessus, on m'a rapporté qu'il était un peu confus concernant les contrôles. Voici donc une clarification :
- Vous ne contrôlez PAS la fourmi. Tout ce que vous pouvez faire, c'est poser des caillous.
- Vous pouvez poser un caillou à droite, en haut à droite et en bas à droite de la fourmi (la flèche).
- La fourmi ne change de rang que s'il y a un caillou en face d'elle. Au début, elle va tout le temps en bas, puis si elle rencontre un caillou également en bas, elle va en haut jusqu'à ce qu'elle croise un obstacle en haut.
- Si la dernière fois qu'il a fallu qu'elle contourne un obstacle en face d'elle, elle est allée en haut, elle ira en haut par défaut la prochaine fois qu'il y aura un obstacle en face. Idem pour en bas. Un obstacle peut être un caillou ou les bords de l'écran, considérés comme des murs.
- Il n'y a pas moyen de reculer (aller vers la gauche). Une fois que vous avez dépassé le bonbon, vous devez retenter (en appuyant sur EXIT puis en relancant ou en attendant que l'écran de défaite s'affiche pour appuyer sur EXE/EXIT).
Pour poser un caillou :
- en haut à droite de la fourmi : flèche du haut, 7, 8 ou 9
- à droite de la fourmi : flèche de droite, 4, 5 ou 6
- en bas à droite de la fourmi : flèche du bas, 1, 2 ou 3
Trouvez la configuration qui vous convient (celle conseillée dans le tutoriel est la 9/6/3).
De plus, comme l'ensemble des jeux que je fais, il est possible de quitter de n'importe où dans les menus/le jeu en appuyant sur EXIT plusieurs fois. Par exemple, appuyer sur EXIT depuis le jeu ramène au menu de sélection de niveau qui quand on appuie sur EXIT ramène au menu principale qui quand on appuie sur EXIT quitte le jeu (et affiche un écran osef où n'importe quelle touche, y compris EXIT du coup, permet de revenir à la liste des programmes).
Notes
Les reproches que je puis faire à ce jeu sont les suivants :
- Le concept est trop simple et à moins d'ajouter des blocs, il devient rapidement limitant, la difficulté se jouant sur le fait de berner le joueur sur le chemin à emprunter (une conséquence importante est d'ailleurs le nombre de niveaux) ;
- Le tutoriel est assez confus et n'explique pas un certain nombre de choses (comme la configuration des touches etc), que j'ai dû expliciter plus haut ;
- C'est du CASIO Basic utilisant des Locate (des caractères dans un tableau de 21*7), donc l'aspect graphique est pas ouf' ;
- La taille et la vitesse du programme peuvent largement être optimisées, j'ai juste dû faire du straight-forward en utilisant des techniques ;
- J'aurais pu rajouter d'autres modes de jeu/d'autres blocs/quelques trucs utilisant le concept de base en s'en écartant, mais j'ai préféré faire une version finale pour passer à autre chose
Beh en fait, c'est simplement que je refuse de faire des sous-programmes pour que si l'utilisateur veuille intégrer le jeu dans ses programmes en le renommant, il puisse le faire librement. Les "sous-programmes" dans l'ensemble de mes programmes, on navigue dedans via la variable G (par exemple, le menu correspond à G=0, le menu de sélection à G=1, le tuto à G=9, le jeu principal à G=10, l'annonceur de victoire/perte à G=11, le loader de niveaux à G=21 histoire de l'avoir tout en bas pour y accéder facilement). Un gamemode ("sous-programme") est constitué d'un "If G=<numéro>", de l'initialisation, de la boucle principale "While G=<numéro>: ... :WhileEnd" [qui est facultative, comme pour le loader], et de choses à faire à la fin du gamemode. Pour quitter, il faut mettre le G à une valeur négative (généralement -1).
Les variables sont initialisées au début de chaque gamemode. Peu de variables circulent entre les gamemodes (comme le L qui est réglé par le sélecteur de niveaux, utilisé par le loader mais gardé pour la prochaine instance du sélecteur de niveaux, donc initialisé avant la boucle principale "While G >= 0").
Ce qui est bien avec cette décomposition, c'est que l'intégration d'un nouveau gamemode peut être différée. Par exemple, je peux très bien faire un gamemode dans un programme différent (en mettant <numéro à tester>->G) pour le tester lui seul. (c'est ce que j'ai fait pour le tutoriel et c'est ce que j'avais commencé à faire pour le mode infini)
Après, les boucles principales des gamemodes sont plus ou moins faites de la même façon : affichage, récupération de touche et réaction à cette touche, puis gestion éventuelle de l'animation (passage du temps avec une boucle for et la variable T, puis incrémentation éventuelle d'une variable A comme Animation). La récupération de touche, parfois, on attend un input, parfois, on voit juste quelle touche est appuyée. Pour la première technique, on utilisera juste :
'On attend que la touche précédente soit relâchée
Do:LpWhile GetKey≠0
'On récupère la prochaine touche
Do:GetKey->D
LpWhile GetKey=0
(à noter que j'utilise tout le temps D pour les GetKey)
Pour la seconde, une subtilité vient se mettre en place : on veut avoir la même condition de "une touche est considérée comme venant juste d'être appuyée si aucune n'était appuyée avant". Pour ça, on va utiliser une variable P (comme Pressed) : si elle est à 1, c'est qu'au tour précédant, une touche était appuyée, sinon, non. À noter qu'on n'a pas besoin de cette variable avec la première technique. Donc au niveau de la gestion des keys, faudra juste vérifier que P=0, et faut faire un "GetKey≠0->P" après, tout simplement.
Tout ça pour dire que je suis fatigué et que mon code est facilement navigable. (bon, faut connaître les détails, mais ils se devinent, et de toute façon, j'ai tout consigné ici maintenant )
Tu regarderas j'ai enlevé les While, pour les remplacer par des Do, parce que j'avais des erreurs syntaxe je sais pas où et qu'avec des Do ça marchais mieux .
Puis ton système de GetKey est bien, mais j'ai optimisé pour gratter des octets, un p'tit exempl avec la variable P :
Plutôt que de faire GetKey≠0→P
J'ai fais Not GetKey→P
Comme ça j'inverse la condition et le
If Not P And D devient If PD
Et tu gagnes 2 octets !
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