• 02 Mai 2024, 07:18:07


Auteur Sujet: Savoir si un nombre est un multiple de xxx  (Lu 1579 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Savoir si un nombre est un multiple de xxx
« le: 19 Avril 2014, 13:43:15 »
Bonjour les enfants !
Dans l'optique de faire un système qui, pour chaque heure jouée, on reçoit un certain nombre de points d'expérience et tout ça... je voulais le faire à une autre manière que d'habitude, d'habitude c'est genre à xxh00 ou quelque chose comme ça, mais là, je voudrais faire pour chaque heure réelle jouée par le joueur, ainsi, j'ai fait ceci...

Code: (pawn) [Sélectionner]
public OnPlayerPlaysAMinute()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
  {
if(IsPlayerConnected(i) && !afk[i])
{
PlayerInfo[i][pGameTime] ++;
}
}
}

Ce code marche parfaitement, mais j'aimerais ajouter une fonctionnalité qui calculerait si le joueur a atteint un nombre qui soit un multiple de 60, donc chaque heure, mais je ne sais pas quelle marche je pourrais suivre pour calculer cela, à part prévoir tous les nombres à l'avance, mais c'est pas un truc de programmeur ça ! C'est pour les noobs !

La solution que j'aurais vu, aurait été de diviser PlayerInfo[playerid][pGameTime] par 60, et de voir s'il en résulte un nombre entier, mais là encore, je ne sais pas comment le savoir :/

Enfin merci à vous de m'aider !  :kiss:
« Modifié: 24 Mai 2014, 08:50:52 par Gzsume »

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Savoir si un nombre est un multiple de xxx
« Réponse #1 le: 19 Avril 2014, 14:28:26 »
Salut,

Tu dois utiliser le symbole mathématique modulo (noté %). Ce symbole mathématique retourne le reste d'une division d'entiers. Puisqu'un exemple est plus rapide qu'une longue explication...


Code: (pawn) [Sélectionner]
new a = 15, b = 7;

new result = a / b;
// result vaut 2, car 7*2 = 14, reste 1

result = a % b;
// result vaut 1, car 15/7 = 2, reste 1

Sur ce principe, tu peux faire le modulo d'une variable par 60 pour obtenir le nombre de minutes à partir du nombre de secondes. Ou pour obtenir le nombre d'heures à partir du nombre de minutes, c'est le même principe. Encore un petit exemple pour illustrer tout ça :

Code: (pawn) [Sélectionner]
new secondes = 88242, minutes = 0, heures = 0;

minutes = secondes / 60;
heures = minutes / 60;
secondes = secondes % minutes;
minutes = minutes % heures;

printf("%dh %dmn %ds", heures, minutes, secondes);

// Affichera 24h 6mn 42sec

En espérant t'avoir été utile,
Bonne journée !

EDIT - Tiens, la même chose (plus ou moins) en PHP. J'ai sans-doute fait une petite erreur dans le code Pawn ci-dessus et je n'ai pas de compilateur sous la main pour tester...


Code: (php) [Sélectionner]
$hours = floor($seconds / 3600);
$mins = floor(($seconds - ($hours*3600)) / 60);
$secs = floor($seconds % 60);
« Modifié: 19 Avril 2014, 14:37:01 par Gzsume »

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : Savoir si un nombre est un multiple de xxx
« Réponse #2 le: 19 Avril 2014, 16:02:31 »
Ah bah oui merci, c'est exactement ce que je cherchais !
Pourquoi en cours on m'a jamais appris ça ?!

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Savoir si un nombre est un multiple de xxx
« Réponse #3 le: 20 Avril 2014, 17:28:45 »
Une petite macro prévu à cette effet:

#define IS_MULTIPLE(%0,%1) (((%0)%(%1))==0)