N.F.I. 3ième année

Objets   graphiques   Matlab

octobre 2004

Rêgle du jeu

Première version
Au centre un cercle, sur un coté une barre; quand on clique sur la barre, elle se déplace vers le centre d'une distance aléatoire; si elle touche le cercle, la partie est terminée. Le but est de rapprocher le plus possible la barre du cercle, sans qu'elle le coupe.
Le joueur perd si la barre coupe le cercle.
Sur chaque coup, le gain du joueur augmente si elle ne le coupe pas; dans le cas contraire la partie s'arrête et le gain est nul.

Pour appâter le joueur, le gain augmente d'autant plus que la barre est proche du cercle, et on peut même envisager que, sur un coup, la barre s'éloigne du cercle

Deuxième version
Toujours un cercle au centre, mais on place quatre barres tout autour de lui; le but est d'enserrer le cercle au plus proche sans le couper. Deux joueurs choisissent, alternativement, une barre à rapprocher du cercle.
cercles et barres
cercles et barres

Programmation

Première version
On place le centre du cercle à l'origine O du repère; on note A B les extrémités du segment représentant la barre et I son milieu.
On peut prendre:
le rayon du cercle égal à 12.5
les longueurs OI et IA égales toutes les deux à 50
un déplacement de la barre d'une distance pseudo aléatoire entre 0 et 14
cercles et barres
Remarques:   1.   le segment OI est sur l'axe des abscisses, et la barre se déplace parallèlement à cet axe
    2.   la barre touche le cercle <==> distance OI inférieure au rayon du cercle.

Ecrire la fonction initjeu qui trace le cercle, la barre (objet line), puis:
1.   place sur l'attribut 'ButtonDownFcn' de cet objet, l'appel à la fonction deplaceBarre
2.   mémorise sur l'attribut 'UserData' de cet objet l'état de la partie :
le gain du joueur
le rayon du cercle
éventuellement: un booléen indiquant que la partie n'est pas finie
la valeur 14 servant au déplacement aléatoire de la barre et la direction de déplacement

Ecrire ensuite la fonction deplaceBarre qui récupère l'identité de la barre et les informations attachées (attribut 'UserData'), pour déplacer la barre d'une distance aléatoire, tester si elle coupe le cercle, afficher éventuellement le nouveau gain du joueur. et mémoriser le nouvel état de la partie.

Pour la deuxième version, on prendra quatre barres situées à gauche, à droite, au dessus et en dessous du cercle. La fonction deplaceBarre change peu, mais il faut remarquer que le gain du joueur, qui ne dépend pas d'une des barres, doit rester; on peut donc le mémoriser sur l'attribut 'UserData du graphe. Par contre la direction de déplacement, dépendant de la barre, doit être mémorisée sur son attribut 'UserData'.

Jeu sur plusieurs parties

On précise maintenant, que deux joueurs, disons J1 et J2, interviennent, qu'on dispose de quatre barres, et que le jeu se déroule sur cinq parties. Pendant chaque partie une cagnotte, qui représente le gain potentiel de chaque joueur, augmente à chaque coup, si la barre ne coupe pas le cercle.
Compléter la programmation précédente en créant une interface pour les joueurs, qui comprend:
• un bouton permettant de rejouer;
• une zone permettant de saisir le nom de chaque joueur en début de jeu;
• un bouton permettant à un joueur d'abandonner une partie, et d'en commencer une nouvelle;
• deux listes affichant respectivement pour chaque joueur: le gain par partie déjà jouée, ainsi que son gain total.
Indication: pendant une partie, il faut connaître:
• les barres
• le rayon du cercle
• le déplacement maximum de la barre
• le numéro de la partie en cours
• qui doit jouer (1 ou 2)
• l'état de la cagnotte
• les gains aux parties précédentes