Journal Portage de TapTempo en GOTO++

Posté par (page perso) . Licence CC by-sa.
Tags :
35
6
mar.
2018

Puisque tout le monde y va de sa petite version de TapTempo, je me suis dit hein, quoi, y'a pas de raison. Alors voici un portage en GOTO++, ce magnifique langage qui, il fut un temps, était chroniqué régulièrement sur ce site par son auteur en personne, et fit même l'objet de news.

Dans la version ci-dessous, j'ai voulu rester sobre, aussi me suis-je inspiré de l'algorithme simple de la version javascript de TapTempo pour en reproduire le fonctionnement à l'aide des fonctions de base du GOTO++. Bien qu'exempt, donc, d'utilisation des concepts avancés du GOTO++, tels que le branchement aléatoire ou les troupeaux de machines à pingouins, j'estime que ce code respecte néanmoins assez bien l'identité unique du langage.

niveaugourou 0
GOTOPRINTDUTEXTE() ; «Appuyer sur la touche entrée en cadence (q pour quitter).»
J==BOITEAPINGOUINS()
§Debut
  c=TapeUneTouche()
  GOTOMULTIPLE &c
    ?*`Q' enentier?
    ?*`q' enentier?
        GOTOPASMALIN %Fin
  FINGOTOMULTIPLE
  Pousse(J Quelleheureestil())
  AUTOGOTOZ } J tailleenlongueur sup *(1) {
    bpm=60000 : &J<J tailleenlongueur - *(1)> - &J<*(0)> MULTIPLICATION } J tailleenlongueur - *(1) {
    GOTOPRINTDUTEXTE() ; « bpm» &bpm «Tempo : »
  AC
  AUTOGOTOZ } J tailleenlongueur sup *(4) {
    EnleveDessous(J)
  AC
  GOTOPASMALIN %Debut
§Fin
GOTOPRINTDUTEXTE() ; «Au revoir 

Bien que le texte d'invite parle de la touche Entrée comme dans le programme d'origine, on peut utiliser n'importe quelle touche, sauf le Q qui permet de quitter.
Aussi, vous noterez au passage dans la partie qui effectue le calcul des bpm, que la gestion optimisée des priorités des opérateurs en GOTO++ permet une écriture bien plus élégante que dans les autres langages, qui imposeraient une accumulation de parenthèses.

NB: Je place ce code sous licence LPCLWTFPLMEPP.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.