Files
web_2025/R4.01_R4.A.10/td_tp/tp3
2026-02-06 13:50:53 +01:00
..
tp3
2026-02-06 13:50:53 +01:00
tp3
2026-02-06 13:50:53 +01:00
tp3
2026-02-06 13:50:53 +01:00

Ex1 : modele MVC et pattern strategy

Stratégie est un patron de conception comportemental qui permet de définir une famille dalgorithmes, de les mettre dans des classes séparées et de rendre leurs objets interchangeables. (source wikipédia)

Le but est de réaliser ce pattern de conception dans le jeu très simple du chifoumi.

Pour l'instant, le jeu utilise le pattern MVC. Le modèle, qui calcule le coup de l'ordinateur utilise un tirage aléatoire. On veut pouvoir utilisé d'autres méthodes, qui utilisent l'historique des coups joués par le joueur.

  1. Modifiez le modèle et la vue pour que le jeu affiche le pourcentage de victoires, matchs nuls et défaites du joueur depuis le début de la partie.

On veut maintenant séparer la façon dont l'ordinateur choisit son coup de la logique du jeu. Le modèle utilisera une stratégie donnée.

  1. Créez un sous-répétoires stratégies dans lequel on stokera les différentes stratégies disponibles.

Les différentes stratégies réaliseront l'interface

getChoice(playerHistory)

qui calcule le coup de l'ordinateur, en fonction de l'historique des différents coups du joueur.

  1. Ecrivez 3 stratégies simples RandomStrategy.js (stratégie initiale), CopyPlayerStrategy.js (joue le même coup que le joueur) CounterMostUsedStrategy.js (joue le coup le plus joué par le joueur) :

    Chaque fichier implémente la stratégie correspondante sous la forme :

    export default class RandomStrategy {
     getChoice(playerHistory) {
     ....
     }
    }
    
  2. Mettez à jour le modèle pour qu'il puisse utiliser une stratégie donnée.

  3. testez dans le main.

Ajout d'une stratégie

On va ajouter une stratégie markovienne d'ordre 1. On fait l'hyptohése que le coup du joueur dépend de son coup précedent (ordre 1). On met à jour au fur et à mesure la matrice de transitions entre les coups joué par le joueur. Par exemple,

{
  rock:   { rock: 2, paper: 5, scissors: 1 },
  paper:  { rock: 1, paper: 3, scissors: 4 },
  scissors:  { rock: 6, paper: 1, scissors: 2 }
}

signifie qu'après paper, le joueur a joué 1 fois rock, 3 fois paper, et 4 fois scissors.

On se sert de la matrice pour contrer la prédiction.

  1. Écrivezz cette stratégie, et testez la.

Stratégie mixte

Le but est d'implanter une stratégie mixte. On se donne une probabilité p.

  • la stratégie markovienne est jouée avec la probabilité p.
  • la stratégie aléatoire est jouée avec la probabilité 1-p

Écrivez la stratégie mixte, et testez.

Stratégie adaptative

La probabilité p dépend du score. On l'adapte au fur et à mesure. Si on gagne beaucoup (trop), on joue au hasard, sinon avec Markov.