TP : le jeu du plus et moins
Nous avons fini cette premiére partie du livre, consacrée aux bases fondementales de la programmation en R. Félicitation ! Pour fêter cela, nous vous proposons un petit TP qui va vous permettre de mettre en pratique vos nouvelles compétences. Il portera en particulier sur les nouvelles notions des 5 derniéres leçons. Bien entendu, un corrigé vous est proposé à la fin du chapitre, si jamais vous êtes bloqué.
Instructions :
Nous vous proposons d'écrire un petit jeu en R à l'aide des conaissances que vous avez appris pendant cette premiére partie. Le jeu est le suivant :
Un nombre mystére est déterminé aléatoirement entre 1 et 100. L'utilisateur doit alors essayer de deviner ce nombre en proposant une valeur dans la console. Vérifier que l'utilisateur entre bien un nombre entre 1 et 100, et lui redemander une entrée dans le cas contraire. Si le nombre proposé est plus petit que le nombre mystére, la console affiche "plus grand !", et "Plus petit !" dans le cas contraire. Quand l'utilisateur à trouvé le bon nombre, la console affiche alors "Vous avez gagné !", et indique le nombre de tentatives.
Ce TD ne devrait pas être trop compliqué, mais il devrait vous faire réfléchir quelques instant ! Vous devrez pour réussir utiliser différentes notions que nous avons vu tout au long de cette premiére partie du cours.
Astuces et conseils :
Voici quelques astuces et conseils pour vous aider à réussir cet exercice :
- Vous pouvez récupérer ce que l'utilisateur entre dans la console avec la fonction
readline()
vu au chapitre précédent. - Vous pouvez générer un nombre
double
aléatoire entre 1 et 100 avec la fonctionrunif(n =1, min = 1, max = 100)
. - Faites attention au type des données que vous manipuler, et n'oublier que que vous pouvez changer de type via les fonctions de conversion.
- Réfléchissez bien à comment vérifier que l'entrée de l'utilisateur est correcte ! C'est sans doute la partie la plus difficile.
- Il existe plusieurs façons de faire. Assurez vous de bien comprendre comment fonctionnent les différentes boucles et les instructions
break
etnext
.
Aller plus loin :
Si vous avez réussit ce TP, bravo à vous ! Si vous voulez allez plus loin, voici quelques pistes d'améliorations que vous pouvez essayer de mettre en place :
Proposer différents niveaux de difficulté, par exemple de choisir entre un nombre entre 1 et 100, 1 et 500, 1 et 1000. L'utilisateur choisit son niveau en entrant un nombre entre 1 et 3.
Proposer un nombre d'essais maximum. Si l'utilisateur ne trouve pas le nombre mystére en un nombre minimum de tentatives, il a perdu.
Retenir et afficher le meilleur score de l'utisateur.
Proposer un mode à deux joueurs, qui jouent chacun leur tour en entrant leur proposition.
Vous pouvez combiner toutes ces pistes ensembles !
Correction détaillée :
Voici une solution possible pour répondre à l'exercice de base demandé. Ce n'est pas la seule et unique façon de faire, il existe souvent différentes façon de résoudre un même probléme en programmation.
#Ecrivons notre jeu dans une fonction new_game :
new_game = function(){
#on détermine le nombre mystére :
nombre_mystere = runif(n =1, min = 1, max = 100)
#ce nombre est un réel, on doit l'arrondir :
nombre_mystere = round(nombre_mystere)
#on créer le boucle du jeu :
repeat{
nombre_propose = NA #On initialise le nombre proposé a NA
#On créer une boucle qui demande un nombre à l'utilisateur
#On continue tant que l'utilisateur ne donne pas un nombre entre 1 et 100
while(is.na(nombre_propose) || (nombre_propose < 0) || (nombre_propose > 100)){
#on demande d'entrer un nombre dans la console :
nombre_propose = readline("Entrez un nombre entre 1 et 100 : ")
#readline retourne une chaine que l'on doit convertir :
nombre_propose = as.integer(nombre_propose)
}
#On a un nombre valide, on le compare alors au nombre mystére
if(nombre_propose > nombre_mystere) {
print("Plus petit ! ")
next
} else if(nombre_propose < nombre_mystere){
print("Plus grand ! ")
next
} else {
print("Vous avez gagné !")
break
}
}
}
#Lançons une partie du jeu :
new_game()