Chronométrer vos jeux

3.0

By chris-scientist, 2 weeks ago

Voici une application que vous pouvez réutiliser dans vos jeux !

Elle permet de mesurer le temps, oui c'est un chronomètre.

Attention cependant se n'est pas aussi fiable qu'un vrai chronomètre : ne mesurez donc pas un marathon ou une course quelconque !

Voici deux visuels possibles :

  • Mode "CHRONO" en cours (visuel par défaut) :
  • Mode "BASIQUE" en pause (plus utile pour débugguer) :

Commandes

Bouton A

  • Pour démarrer le chronomètre.
  • Quand le chronomètre est lancé : mettre en pause / reprendre

Bouton B

  • Quand le chronomètre est en cours ou en pause : réinitialiser le chronomètre (demande confirmation)

Limite

Comme dit dans le code : l'application a une limite, qui est je pense acceptable.

En effet, on peut mesurer "seulement" une durée de : 49710 jours, 6 heures, 28 minutes et 15 secondes, ou approximativement 136 années *, 70 jours, 6 heures, 28 minutes et 15 secondes.

* Pour cette approximation on considère qu'une année est égale 365 jours.

Historique des mises à jour

Plus d'info sur mon GitHub.

v3.0.0

Le chronomètre utilise désormais le système RTC.

Merci à deeph, Aurélien Rodot et jicehel : pour avoir soumis l'idée du RTC et proposer un exemple d'application.

Bugs connus de la version :

  • Le chronomètre se remet à zéro dès lors que la limite est atteinte.

v2.0.0

Le chronomètre est désormais plus fiable. Et l'interface est traduite en anglais.

Bugs connus de la version :

  • Le chronomètre se remet à zéro dès lors que la limite est atteinte.

v1.0.0

Le chronomètre est peu fiable.


PS : mon prochain jeu, les tours de Hanoï, est en cours, mais j'ai envie de mesurer le temps des parties pour faire un tableau des meilleurs scores, ce qui explique la création de cette application.

Last comments

jicehel

NEW 6 days ago

Je me suis encore fait avoir par le Serial au lieu de mettre le SerialUSB ...

Ce programme fonctionne:

/*   Demonstrates the use of the RTC library */

#include <Gamebuino-Meta.h>
#include <RTCZero.h>

/* Create an rtc object */
RTCZero rtc;

/* Change these values to set the current initial time */
const byte seconds = 00;
const byte minutes = 11;
const byte hours = 22;

/* Change these values to set the current initial date */
const byte day = 11;
const byte month = 10;
const byte year = 18;


// Procédure de setup où pour le moment, on initialise juste la META
void setup() {
  gb.begin();
  SerialUSB.begin(9600);
  rtc.begin(); // initialize RTC

  // Set the time
  rtc.setHours(hours);
  rtc.setMinutes(minutes);
  rtc.setSeconds(seconds);

  // Set the date
  rtc.setDay(day);
  rtc.setMonth(month);
  rtc.setYear(year);

  // you can use also
  //rtc.setTime(hours, minutes, seconds);
  //rtc.setDate(day, month, year);
}


void SerialUSBprint2digits(int number) {
  if (number < 10) {
    SerialUSB.print("0"); // print a 0 before if the number is < than 10
  }
  SerialUSB.print(number);
}

void Print2digits(int number) {
  if (number < 10) {
    gb.display.print("0"); // print a 0 before if the number is < than 10
  }
  gb.display.print(number);
}

// Boucle principale, dans laquelle on affiche l'heure toutes les secondes
void loop() {
  while (!gb.update());
  gb.display.clear(); 
  // Print date...
  gb.display.cursorX = 5;
  gb.display.cursorY = 5;
  SerialUSBprint2digits(rtc.getDay());
  Print2digits(rtc.getDay());
  SerialUSB.print("/");
  gb.display.print("/");
  SerialUSBprint2digits(rtc.getMonth());
  Print2digits(rtc.getMonth());
  SerialUSB.print("/");
  gb.display.print("/");
  SerialUSBprint2digits(rtc.getYear());
  Print2digits(rtc.getYear());
  SerialUSB.print(" ");
  gb.display.print(" ");

  // ...and time
  SerialUSBprint2digits(rtc.getHours());
  Print2digits(rtc.getHours());
  SerialUSB.print(":");
  gb.display.print(":");
  SerialUSBprint2digits(rtc.getMinutes());
  Print2digits(rtc.getMinutes());
  SerialUSB.print(":");
  gb.display.print(":");
  SerialUSBprint2digits(rtc.getSeconds());
  Print2digits(rtc.getSeconds());
  SerialUSB.println();
  gb.display.println();
  delay(1000);
}

jicehel

NEW 1 week ago

J'ai essayé comme ça:

/*   Demonstrates the use of the RTC library */

#include <RTCZero.h>
#include <Gamebuino-Meta.h>

/* Create an rtc object */
RTCZero rtc;

/* Change these values to set the current initial time */
const byte seconds = 00;
const byte minutes = 15;
const byte hours = 23;

/* Change these values to set the current initial date */
const byte day = 9;
const byte month = 10;
const byte year = 18;


// Procédure de setup où pour le moment, on initialise juste la META
void setup() {
  gb.begin();
  Serial.begin(9600);

  rtc.begin(); // initialize RTC

  // Set the time
  rtc.setHours(hours);
  rtc.setMinutes(minutes);
  rtc.setSeconds(seconds);

  // Set the date
  rtc.setDay(day);
  rtc.setMonth(month);
  rtc.setYear(year);

  // you can use also
  //rtc.setTime(hours, minutes, seconds);
  //rtc.setDate(day, month, year);
}


void Serialprint2digits(int number) {
  if (number < 10) {
    Serial.print("0"); // print a 0 before if the number is < than 10
  }
  Serial.print(number);
}

void Print2digits(int number) {
  if (number < 10) {
    gb.display.print("0"); // print a 0 before if the number is < than 10
  }
  gb.display.print(number);
}

// Boucle principale, dans laquelle on va déplacer rect1 avec les touches et vérifier s'il rentre en collision avec rect
void loop() {
  while (!gb.update());
  gb.display.clear(); 
  // Print date...
  gb.display.cursorX = 15;
  gb.display.cursorY = 5;
  Serialprint2digits(rtc.getDay());
  Print2digits(rtc.getDay());
  Serial.print("/");
  gb.display.print("/");
  Serialprint2digits(rtc.getMonth());
  Print2digits(rtc.getMonth());
  Serial.print("/");
  gb.display.print("/");
  Serialprint2digits(rtc.getYear());
  Print2digits(rtc.getYear());
  Serial.print(" ");
  gb.display.print(" ");

  // ...and time
  Serialprint2digits(rtc.getHours());
  Print2digits(rtc.getHours());
  Serial.print(":");
  gb.display.print(":");
  Serialprint2digits(rtc.getMinutes());
  Print2digits(rtc.getMinutes());
  Serial.print(":");
  gb.display.print(":");
  Serialprint2digits(rtc.getSeconds());
  Print2digits(rtc.getSeconds());
  Serial.println();
  gb.display.println();
  delay(1000);
}


Mais j'obtient un écran blanc su la META, j'ai merdé quelque part mais pas assez callé pour voir où...


Aurélien Rodot

NEW 1 week ago

chris-scientist chris-scientist

Après ça reste quand même précis et c'est super simple à utiliser, les deux sont valables :)