Projet de programmation Java Puissance 4



Documents pareils
Poker. A rendre pour le 25 avril

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Les clients puissance cube

Exe Livret Animateur_Exe Livret Animateur 01/02/11 11:10 Page1

Ce rêve est devenu réalité.

Jeux mathématiques en maternelle. Activités clés. Jeu des maisons et des jardins (Yvette Denny PEMF)

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Vous incarnez un surdoué en informatique qui utilise son ordinateur afin de pirater des comptes bancaires un peu partout dans le monde et s en mettre

Site Web de paris sportifs

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Guide d utilisation du client STHS (V1.1)

Les nombres entiers. Durée suggérée: 3 semaines

Fiche pédagogique : ma famille et moi

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Créer son questionnaire en ligne avec Google Documents

Dossier projet isn 2015 par Victor Gregoire

GROOBAX. cliquer sur le «G» Cliquer sur «options» Sélectionner le dossier qui contiendra les paramètres => Cliquer A chercher le dossier créé en 2/

TUTORIEL Qualit Eval. Introduction :

Mesurer les performances (CPU) sous Linux

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Initiation au binaire

COURS WINDEV NUMERO 3

Comment insérer une image de fond?

Nom : Groupe : Date : 1. Quels sont les deux types de dessins les plus utilisés en technologie?

LES DECIMALES DE π BERNARD EGGER

ANICOTTE Guillaume GUFFROY Matthieu LIMA Juliette SALLOUH Chamsseddine CAHIER DES CHARGES SI 28

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

HELPDESK IMAGINLAB GUIDE UTILISATION POUR IMAGINEURS. : Guide HelpDesk pour les Imagineurs-v1.2.docx. Date :

1 Recherche en table par balayage

Canevas théoriques du projet sur le poker Partie A

Feuille d exercices 2 : Espaces probabilisés

Recherche dans un tableau

TP1. Outils Java Eléments de correction

Probabilités. Une urne contient 3 billes vertes et 5 billes rouges toutes indiscernables au toucher.

Fiche n 25 01/03/2002. Power Archiver

TP 1. Prise en main du langage Python

COMMENT TROUVER VOS FUTURS CLIENTS À L INTERNATIONAL? 05/03/2015 Creditsafe France

Architecture des Systèmes d Information Architecture des Systèmes d Information

La classification automatique de données quantitatives

TP1 : Initiation à Java et Eclipse

TP, première séquence d exercices.

Créer un tableau avec LibreOffice / Calc

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

Espaces probabilisés

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Assistant d e tablissement de Tableaux

Administration de Parc Informatique TP02 : Utilisation du logiciel Marionnet

Trépier avec règle, ressort à boudin, chronomètre, 5 masses de 50 g.

Utilisation d objets : String et ArrayList

Casse-têtes sur des jouets

FAIRE SES COMPTES AVEC GRISBI

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Théorie des Jeux Et ses Applications

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Master Poly Trader. Manuel d utilisateur. Group IV Benoît Perroud Marius Erni Lionel Matthey David Wenger Lotfi Hussami

ELEC2753 Electrotechnique examen du 11/06/2012

MATÉRIEL. 30 tuiles Édifice à la couleur des joueurs (6 par couleur) 1 plateau de jeu Bruxelles

CREG : versailles.fr/spip.php?article803

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

ASR1 TD7 : Un microprocesseur RISC 16 bits

Table des matières. Pour commencer... 1

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Fabriquer son TBI avec une manette de jeu WII

L alternative, c est malin 1. Comment faire plein de choses pour pas cher sur MacIntosh

La question est : dans 450 combien de fois 23. L opération est donc la division. Le diviseur. Le quotient

Bases de programmation. Cours 5. Structurer les données

Guide : Répondre par voie électronique aux Marchés Publics - Version Janvier Répondre aux marchés publics par voie électronique

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Matériel. . 9 cartes Personnage

Quelques algorithmes simples dont l analyse n est pas si simple

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

Maîtriser les fonctionnalités d un traitement de texte (Word OpenOffice)

UTILITAIRE BRM BACKING UP, RESTORING AND MOVING CONTENT

Plus courts chemins, programmation dynamique

Encadré par : Michel SIMATIC

PREMIERE UTILISATION D IS-LOG

- Livret de Règles -

MANUEL INTÉGRÉ EA SPORTS GRAND CHELEM TENNIS 2

COACH LIGUE 1 SAISON 2014/2015

Définition des Webservices Ordre de paiement par . Version 1.0

Installation et utilisation du client FirstClass 11

CONTENU MISE EN PLACE. 1. Placez le plateau de jeu au centre de la table.

Module d anonymisation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

SRAL Saint Raphaël. Maison des associations 213, rue de la Soleillette Saint Raphaël. : : dromain.jean-pierre@neuf.

Areca Backup Première Sauvegarde - Configurez votre premier groupe et votre première cible.

Programmation Objet - Cours II

ACTUARIAT 1, ACT 2121, AUTOMNE 2013 #12

Compter à Babylone. L écriture des nombres

Cours de Probabilités et de Statistique

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Probabilités conditionnelles Loi binomiale

Création d'un questionnaire (sondage)

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

Informatique Générale

GUIDE D UTILISATION DU LOGICIEL DE TELE-EXPERTISE BOGOU

Transcription:

Projet de programmation Java Puissance 4 Juliusz Chroboczek et Gabriel Scherer Version du 13 novembre 2014 Le but de ce projet est d implémenter en Java un jeu de plateau qui s appelle Puissance 4. Votre programme permettra (1) à deux joueurs humains de jouer entre eux, (2) à l utilisateur humain de jouer contre l ordinateur et (3) à l ordinateur de jouer contre lui-même. Le jeu de Puissance 4 1 1.1 Règles du jeu Puissance 4 est un jeu de plateau à deux joueurs. Il se joue sur un plateau vertical de 7 6 cases (Figure 1). Chaque joueur dispose de 21 pions, rouges ou jaunes. Rouge joue le premier, et les joueurs jouent tour-à-tour. Le but du jeu est d aligner quatre pions de sa couleur, verticalement, horizontalement, ou en diagonale. Lorsque c est son tour, le joueur p choisit une colonne qui n est pas encore pleine, et y insère un de ses pions. Le pion tombe jusqu à ce qu il soit coincé par un autre pion (Figure 2) ou par le bas de la colonne. La partie se termine lorsqu un joueur a gagné (il a aligné quatre pions de sa couleur, Figure 3), ou alors lorsque le plateau est plein (match nul). Figure 1 Plateau vide Figure 2 Coups possibles 1 Figure 3 Fin de partie

1.2 Implémentation Puissance 4 est facile à implémenter : il suffit de modéliser le plateau par un tableau dont les cases peuvent contenir trois valeurs : case vide, pion rouge ou pion jaune. Lorsque c est un utilisateur humain qui joue, le programme lui demandera de choisir une colonne et devra déterminer automatiquement (1) si cette colonne n est pas déjà pleine et (2) à quelle case de la colonne s arrête le pion. De même, lorsque c est l ordinateur qui joue, il choisira une colonne non pleine, et déterminera la case dans laquelle s arrête le pion. Après chaque tour, il faudra vérifier la condition de terminaison : si un joueur a gagné, et si le plateau est plein. 2 Fonctionnalités du programme Votre programme fera s affronter deux joueurs (Rouge, joueur 1, ou Jaune, joueur 2). Chaque joueur peut être soit un humain, soit un ordinateur. On choisira la nature des joueurs en lançant le programme : $ java Puissance4 PvP $ java Puissance4 PvC $ java Puissance4 CvP $ java Puissance4 CvC Par exemple, PvC signifie Player versus Computer : le joueur 1 est un humain, le joueur 2 un ordinateur. Pour chaque joueur qui est un ordinateur, le programme demande de choisir une stratégie de jeu. Un des utilisateurs entre le nom de la stratégie dans le terminal. Enfin, pour commencer la partie, on affiche un plateau vide avec la représentation suivante : Un point représente une case vide, et on utilisera R et J pour les cases occupées par un point rouge ou jaune. C est ensuite au tour de Rouge de jouer. Tour de jeu À chaque tour, le programme demande au joueur dont c est le tour de choisir un coup. Si c est à un humain de joueur, le programme lira le numéro de la colonne entré par l humain dans le terminal. Si c est à un ordinateur de jouer, le programme appellera une fonction 2

correspondant à la stratégie choisie, pour décider quel coup jouer, et affichera le numéro de la colonne choisie dans le terminal. Ensuite, le programme joue le coup : il vérifie que le coup est valide (sinon, on redemande un nouveau coup au joueur ou à l ordinateur), et modifie le plateau de jeu. Il affiche le nouvel état du plateau, par exemple :...R.....RJJR. Enfin, le programme vérifie les conditions de fin : si l un des joueurs a quatre pions alignés, il a gagné, et si le plateau est rempli, c est un match nul. Si l une de ces conditions est remplie, le programme le signale et termine la partie. Sinon, c est au tour de l autre joueur de jouer. 2.1 Test de fin de partie Cette section propose des pistes pour implémenter le test de victoire d un des joueurs, qui est une partie délicate du projet. Il n est pas obligatoire de respecter ces conseils, vous pouvez faire d autres choix du moment qu ils donnent un programme qui fonctionne. Je vous conseille de représenter le plateau de jeu par un tableau de tableaux d entiers : 0 pour une case vide, 1 pour une case rouge (joueur 1), 2 pour une case jaune (joueur 2). Une position dans le plateau correspond à un couple d entiers i et j. Il est utile d avoir une fonction qui vérifie si une position (i, j) est à l intérieur ou en dehors du plateau. public static bool dansplateau(int[][] plateau, int i, int j) Pour tester la présence de quatre pions alignés, vous devrez suivre les cases de la même couleur dans une certaine direction (vers le haut, vers la droite, selon une diagonale...). Une direction peut être représenté par un couple d entiers di et dj, valant -1, 0 ou 1, qui représentent les petits déplacements à ajouter à la position (i, j) pour avoir les coordonnées (i+di, j+dj) de la case suivante dans cette direction. Par exemple, (1, -1) correspond à une des diagonales. Pour implémenter la condition de victoire, il est utile de savoir compter le nombre de cases d une certaine couleur alignées, dans une direction, à partir d une certaine position : public static int longueuralignement(int couleur, int i, int j, int di, int dj) Je laisse votre imagination faire le reste. (Si vous avez du goût et préférez utiliser l anglais pour éviter les mélanges malheureux, vous pourrez utiliser insideboard et streaklength.) 3

2.2 Stratégies La fonction qui prend en paramètres un plateau de jeu et le joueur dont c est le tour et retourne la colonne où joue l ordinateur s appelle une stratégie. La stratégie la plus simple est la stratégie aléatoire elle choisit au hasard une colonne jouable. Son nom (pour la choisir en début de partie) est hasard. L autre stratégie que vous devrez implémenter est la recherche de coup gagnant de profondeur 0. Dans cette stratégie, l ordinateur joue une colonne qui lui permet de gagner tout de suite (un coup gagnant en 0 coups) s il en existe une ; sinon, il choisit une colonne non pleine au hasard. Le nom de cette stratégie est coup gagnant. 3 Extensions Toutes les extensions au sujet seront les bienvenues, et seront examinées avec bienveillance par le(s) correcteur(s). Nous espérons que vous implémenterez des extensions auxquelles nous n avons pas pensé, mais si vous n avez pas d idées, voici les nôtres. Stratégies plus malines Les quelques stratégies indiquées au paragraphe 2.2 ci-dessus sont assez naïves. Nous apprécierons les programmes qui jouent bien, et n hésitez pas à passer du temps à affiner vos stratégies 1. On peut généraliser la stratégie de recherche de coup gagnant de profondeur 0, décrite plus haut, à la recherche de coup gagnant de profondeur 1. On dit qu une colonne est gagnante en un coup si, lorsque le joueur p joue cette colonne au coup n, quel que soit le coup joué par le joueur q au coup n + 1, le joueur a un coup gagnant au coup n + 2. Dans la stratégie de recherche de profondeur 1, l ordinateur joue un coup gagnant en zéro coups s il en exite un ; sinon, il joue un coup gagnant en 1 coup ; et sinon, il joue au hasard. On peut améliorer les stratégies de recherche bornées en évitant les coups perdants. Un coup est perdant en 0 coups pour le joueur p s il permet au joueur q de jouer un coup gagnant en 0 coups ; de même, un coup est perdant en 1 coup pour p s il permet au joueur q de jouer un coup gagnant en 1 coup. La stratégie de recherche de profondeur 0 joue un coup gagnant en 0 coups s il existe ; sinon, elle choisit un coup au hasard mais en évitant les coups perdants en 0 coups. On peut aller encore plus loin en prévoyant plus de 0 ou 1 coup d avance. Chacune des stratégies ci-dessus contient un élément aléatoire ; on peut les améliorer avec des heuristiques, c est à dire des règles qui disent quelle position il vaut mieux jouer. Par exemple, il est avantageux de jouer dans la colonne centrale (tant qu elle n est pas beaucoup plus haute que les autres colonnes), et il est bien sûr avantageux de maximiser la longueur de la plus longue ligne de pions. Comparaison de stratégies La plupart de vos stratégies contiendront un élément aléatoire. Il est donc intéressant de faire des statistiques sur le comportement des stratégies. Votre programme pourrait par exemple avoir une option supplémentaire qui demande à l utilisateur de choisir une stratégie pour rouge et une stratégie pour jaune, simuler 10000 parties, et indiquer combien de 1. Il a été démontré qu il existe une stratégie pour le joueur rouge qui lui permet de gagner à chaque fois. 4

fois chaque joueur gagne. Un autre problème intéressant est de déterminer empiriquement 2 si une stratégie est meilleure pour rouge ou pour jaune. Généralisations Vous pourriez bien sûr généraliser votre programme à des jeux plus intéressants. Une géneralisation facile mais peu intéressante est d augmenter le nombre de colonnes et de lignes (les parties prendront alors plus de temps, mais la stratégie reste grosso modo la même). Score Four ou Sogo est une généralisation de Puissance 4 à trois dimensions : le jeu se joue sur un plateau constitué de 4 4 tiges verticales pouvant chacune contenir 4 pions. Il n est pas forcément facile d afficher le plateu de Sogo de façon compréhensible. 4 Modalités de soumission Le projet sera à traiter en groupes de 2 personnes au plus (les projets soumis par des groupes de 3 personnes ou plus ne seront pas acceptés). Votre solution devra consister d un programme écrit en Java et utilisable sous Linux ou FreeBSD. Elle consistera de : un fichier texte nommé README contenant vos noms et indiquant brièvement comment compiler et utiliser votre programme ; un petit rapport, en format texte, décrivant ce que vous avez fait, quelles extensions vous avez traitées, et expliquant (ou justifiant) les choix de conception ou d implémentation que nous pourrions ne pas comprendre du premier coup ; votre code source Votre soumission devra consister d une seule archive compressée zip. L archive devra obligatoirement s appeler nom1-nom2.zip, et s extraire dans un répertoire nom1-nom2/, où nom1 et nom2 sont les noms des deux personnes constituant le groupe. Par exemple, si vous vous appelez Ben Affleck et Rosamund Pike, votre archive devra s appeler affleck-pike.zip et s extraire dans un répertoire affleck-pike/. La date limite et le mode de soumission seront indiqués sur la page du projet. Si jamais vous étiez amené-e à utiliser du code qui n a pas été écrit par vous, il est absolument impératif que vous l indiquiez explicitement dans votre projet, en entourant le code en question d un commentaire expliquant sa provenance. Ce morceau de code sera pris en compte différemment dans la notation mais reprendre du code sans citer explicitement son auteur est un plagiat qui sera considéré comme de la triche. 2. En faisant des expériences. 5