Commit 0861ce2c authored by DELBECQ Théo's avatar DELBECQ Théo

Merge branch 'Theo' into 'master'

Réparation de compatibilité grâce aux arts occultes

See merge request !20
parents 980081ea 264d00f0
# Created by https://www.gitignore.io/api/java,netbeans
# Edit at https://www.gitignore.io/?templates=java,netbeans
### Java ###
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
#*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
### NetBeans ###
**/nbproject/private/
**/nbproject/Makefile-*.mk
**/nbproject/Package-*.bash
# build/
nbbuild/
dist/
nbdist/
.nb-gradle/
# End of https://www.gitignore.io/api/java,netbeans
\ No newline at end of file
Manifest-Version: 1.0 Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build X-COMMENT: Main-Class will be added automatically by build
This source diff could not be displayed because it is too large. You can view the blob instead.
<<<<<<< HEAD <<<<<<< HEAD
build.xml.data.CRC32=662cc432 build.xml.data.CRC32=662cc432
build.xml.script.CRC32=54ced37f build.xml.script.CRC32=54ced37f
build.xml.stylesheet.CRC32=f85dc8f2@1.93.0.48 build.xml.stylesheet.CRC32=f85dc8f2@1.93.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=662cc432 nbproject/build-impl.xml.data.CRC32=662cc432
nbproject/build-impl.xml.script.CRC32=fe7dced2 nbproject/build-impl.xml.script.CRC32=fe7dced2
nbproject/build-impl.xml.stylesheet.CRC32=f89f7d21@1.93.0.48 nbproject/build-impl.xml.stylesheet.CRC32=f89f7d21@1.93.0.48
======= =======
build.xml.data.CRC32=662cc432 build.xml.data.CRC32=662cc432
build.xml.script.CRC32=54ced37f build.xml.script.CRC32=54ced37f
......
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\timot\\AppData\\Roaming\\NetBeans\\11.2\\build.properties
=======
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=/home/louis/.netbeans/11.3/build.properties
>>>>>>> 4dd14568c244c833d17b679f8f3b340f997c8d04
=======
<<<<<<< HEAD
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\timot\\AppData\\Roaming\\NetBeans\\11.2\\build.properties
=======
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=/home/louis/.netbeans/11.3/build.properties
>>>>>>> 4dd14568c244c833d17b679f8f3b340f997c8d04
>>>>>>> 4f5ab9d710d3dfdc1fe71236031395a85db95bec
=======
<<<<<<< HEAD
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\timot\\AppData\\Roaming\\NetBeans\\11.2\\build.properties
=======
compile.on.save=true
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\theo\\AppData\\Roaming\\NetBeans\\11.3\\build.properties
>>>>>>> 4dd14568c244c833d17b679f8f3b340f997c8d04
>>>>>>> 94177790fa8a419aa9237d306f5420565be1ebd3
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group/>
</open-files>
</project-private>
<<<<<<< HEAD <<<<<<< HEAD
annotation.processing.enabled=true annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false annotation.processing.enabled.in.editor=false
annotation.processing.processors.list= annotation.processing.processors.list=
annotation.processing.run.all.processors=true annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=TicTacToeCodingame application.title=TicTacToeCodingame
application.vendor=franck.tempet application.vendor=franck.tempet
build.classes.dir=${build.dir}/classes build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned: # This directory is removed when the project is cleaned:
build.dir=build build.dir=build
build.generated.dir=${build.dir}/generated build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here: # Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport: # Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket #debug.transport=dt_socket
debug.classpath=\ debug.classpath=\
${run.classpath} ${run.classpath}
debug.modulepath=\ debug.modulepath=\
${run.modulepath} ${run.modulepath}
debug.test.classpath=\ debug.test.classpath=\
${run.test.classpath} ${run.test.classpath}
debug.test.modulepath=\ debug.test.modulepath=\
${run.test.modulepath} ${run.test.modulepath}
# Files in build.classes.dir which should be excluded from distribution jar # Files in build.classes.dir which should be excluded from distribution jar
dist.archive.excludes= dist.archive.excludes=
# This directory is removed when the project is cleaned: # This directory is removed when the project is cleaned:
dist.dir=dist dist.dir=dist
dist.jar=${dist.dir}/TicTacToeCodingame.jar dist.jar=${dist.dir}/TicTacToeCodingame.jar
dist.javadoc.dir=${dist.dir}/javadoc dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath= endorsed.classpath=
excludes= excludes=
includes=** includes=**
jar.compress=false jar.compress=false
javac.classpath= javac.classpath=
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs= javac.compilerargs=
javac.deprecation=false javac.deprecation=false
javac.external.vm=true javac.external.vm=true
javac.modulepath= javac.modulepath=
javac.processormodulepath= javac.processormodulepath=
javac.processorpath=\ javac.processorpath=\
${javac.classpath} ${javac.classpath}
javac.source=1.8 javac.source=1.8
javac.target=1.8 javac.target=1.8
javac.test.classpath=\ javac.test.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}
javac.test.modulepath=\ javac.test.modulepath=\
${javac.modulepath} ${javac.modulepath}
javac.test.processorpath=\ javac.test.processorpath=\
${javac.test.classpath} ${javac.test.classpath}
javadoc.additionalparam= javadoc.additionalparam=
javadoc.author=false javadoc.author=false
javadoc.encoding=${source.encoding} javadoc.encoding=${source.encoding}
javadoc.noindex=false javadoc.noindex=false
javadoc.nonavbar=false javadoc.nonavbar=false
javadoc.notree=false javadoc.notree=false
javadoc.private=false javadoc.private=false
javadoc.splitindex=true javadoc.splitindex=true
javadoc.use=true javadoc.use=true
javadoc.version=false javadoc.version=false
javadoc.windowtitle= javadoc.windowtitle=
main.class=tictactoecodingame.Player main.class=tictactoecodingame.Player
manifest.file=manifest.mf manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false mkdist.disabled=false
platform.active=default_platform platform.active=default_platform
run.classpath=\ run.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}
# Space-separated list of JVM arguments used when running the project. # Space-separated list of JVM arguments used when running the project.
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. # You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value: # To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs= run.jvmargs=
run.modulepath=\ run.modulepath=\
${javac.modulepath} ${javac.modulepath}
run.test.classpath=\ run.test.classpath=\
${javac.test.classpath}:\ ${javac.test.classpath}:\
${build.test.classes.dir} ${build.test.classes.dir}
run.test.modulepath=\ run.test.modulepath=\
${javac.test.modulepath} ${javac.test.modulepath}
source.encoding=UTF-8 source.encoding=UTF-8
src.dir=src src.dir=src
test.src.dir=test test.src.dir=test
======= =======
annotation.processing.enabled=true annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false annotation.processing.enabled.in.editor=false
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1"> <project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type> <type>org.netbeans.modules.java.j2seproject</type>
<configuration> <configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3"> <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>TicTacToeCodingame</name> <name>TicTacToeCodingame</name>
<source-roots> <source-roots>
<root id="src.dir"/> <root id="src.dir"/>
</source-roots> </source-roots>
<test-roots> <test-roots>
<root id="test.src.dir"/> <root id="test.src.dir"/>
</test-roots> </test-roots>
</data> </data>
</configuration> </configuration>
</project> </project>
This diff is collapsed.
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
* *
*/ */
public abstract class AlgoRecherche { public abstract class AlgoRecherche {
/** /**
* *
* @param _plateau Grille du jeu * @param _plateau Grille du jeu
* @param _joueur c'est à ce joueur de jouer * @param _joueur c'est à ce joueur de jouer
* @param _ponder vrai si l'ordi analyse la position pendant le temps de reflexion de l'adversaire * @param _ponder vrai si l'ordi analyse la position pendant le temps de reflexion de l'adversaire
* @return * @return
*/ */
abstract public Coup meilleurCoup( Plateau _plateau , Joueur _joueur , boolean _ponder ); abstract public Coup meilleurCoup( Plateau _plateau , Joueur _joueur , boolean _ponder );
} }
/* /*
* To change this license header, choose License Headers in Project Properties. * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates * To change this template file, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package tictactoecodingame; package tictactoecodingame;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
/** /**
* *
* @author franck.tempet * @author franck.tempet
*/ */
public class AlgoRechercheAleatoire extends AlgoRecherche{ public class AlgoRechercheAleatoire extends AlgoRecherche{
Random rnd; Random rnd;
public AlgoRechercheAleatoire() { public AlgoRechercheAleatoire() {
rnd = new Random(); rnd = new Random();
} }
@Override @Override
public Coup meilleurCoup(Plateau _plateau, Joueur _joueur, boolean _ponder) { public Coup meilleurCoup(Plateau _plateau, Joueur _joueur, boolean _ponder) {
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur); ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
return coups.get(rnd.nextInt( coups.size())); return coups.get(rnd.nextInt( coups.size()));
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
* *
*/ */
public class Arbitre { public class Arbitre {
Joueur joueur1; // Joueur qui commence la partie Joueur joueur1; // Joueur qui commence la partie
Joueur joueur2; // Adversaire Joueur joueur2; // Adversaire
Joueur currentJoueur; // C'est à son tour de jouer Joueur currentJoueur; // C'est à son tour de jouer
Plateau plateau; // Le plateau du jeu Plateau plateau; // Le plateau du jeu
public Arbitre(Plateau _plateau, Joueur _joueur1, Joueur _joueur2) { public Arbitre(Plateau _plateau, Joueur _joueur1, Joueur _joueur2) {
plateau = _plateau; plateau = _plateau;
joueur1 = _joueur1; joueur1 = _joueur1;
joueur2 = _joueur2; joueur2 = _joueur2;
currentJoueur = joueur1; // Le joueur1 commence la partie. currentJoueur = joueur1; // Le joueur1 commence la partie.
} }
/** /**
* Demarre une nouvelle Partie * Demarre une nouvelle Partie
* Retourne le joueur qui gagne , null si c'est un match nul * Retourne le joueur qui gagne , null si c'est un match nul
* *
* @param _trace si vrai affiche le plateau et le joueur courant * @param _trace si vrai affiche le plateau et le joueur courant
*/ */
public Joueur startNewGame( boolean _trace ) { public Joueur startNewGame( boolean _trace ) {
Coup coup; Coup coup;
plateau.init(); // Prépare le plateau pour le jeu. plateau.init(); // Prépare le plateau pour le jeu.
while (!plateau.partieTerminee()) { while (!plateau.partieTerminee()) {
do { do {
if ( _trace ) { if ( _trace ) {
System.out.println(plateau); System.out.println(plateau);
System.out.println(currentJoueur + " ( " +currentJoueur.getIdJoueur() + " ) joue : " ); System.out.println(currentJoueur + " ( " +currentJoueur.getIdJoueur() + " ) joue : " );
} }
coup = currentJoueur.joue(plateau); coup = currentJoueur.joue(plateau);
if (!plateau.isValide(coup)) { if (!plateau.isValide(coup)) {
if ( _trace ) if ( _trace )
System.err.println("Coup non valide ! : " + currentJoueur); System.err.println("Coup non valide ! : " + currentJoueur);
else { // en mode batch le joueur perd la partie else { // en mode batch le joueur perd la partie
System.err.println("Coup non valide ! : " + currentJoueur); System.err.println("Coup non valide ! : " + currentJoueur);
if (currentJoueur == joueur1) return joueur2; else return joueur1; if (currentJoueur == joueur1) return joueur2; else return joueur1;
} }
} }
} while (!plateau.isValide(coup)); } while (!plateau.isValide(coup));
plateau.joueCoup(coup); plateau.joueCoup(coup);
if (currentJoueur == joueur1) { if (currentJoueur == joueur1) {
currentJoueur = joueur2; currentJoueur = joueur2;
} else { } else {
currentJoueur = joueur1; currentJoueur = joueur1;
} }
} }
Joueur vainqueur = plateau.vainqueur(); Joueur vainqueur = plateau.vainqueur();
if ( vainqueur != null ) if ( vainqueur != null )
System.out.println( vainqueur + " gagne la partie "); System.out.println( vainqueur + " gagne la partie ");
else else
System.out.println( "Partie nulle "); System.out.println( "Partie nulle ");
return vainqueur; return vainqueur;
} }
public void startTournament( int _nbPartie , boolean _trace) { public void startTournament( int _nbPartie , boolean _trace) {
double[] nbVictoire = new double[2]; double[] nbVictoire = new double[2];
Joueur vainqueur; Joueur vainqueur;
currentJoueur = joueur1; currentJoueur = joueur1;
int numJoueur = 0; int numJoueur = 0;
nbVictoire[0] = nbVictoire[1] = 0; nbVictoire[0] = nbVictoire[1] = 0;
for (int i = 0 ; i < _nbPartie ; i++ ) { for (int i = 0 ; i < _nbPartie ; i++ ) {
vainqueur = startNewGame(_trace); vainqueur = startNewGame(_trace);
if ( vainqueur == joueur1 ) nbVictoire[0]++; if ( vainqueur == joueur1 ) nbVictoire[0]++;
if ( vainqueur == joueur2 ) nbVictoire[1]++; if ( vainqueur == joueur2 ) nbVictoire[1]++;
if ( vainqueur == null ) { if ( vainqueur == null ) {
nbVictoire[0]+=0.5; nbVictoire[0]+=0.5;
nbVictoire[1]+=0.5; nbVictoire[1]+=0.5;
} }
if ( numJoueur == 0 ) { if ( numJoueur == 0 ) {
currentJoueur = joueur2; currentJoueur = joueur2;
numJoueur=1; numJoueur=1;
} }
else { else {
currentJoueur = joueur1; currentJoueur = joueur1;
numJoueur=0; numJoueur=0;
} }
System.out.println(joueur1 + " score : " + nbVictoire[0]); System.out.println(joueur1 + " score : " + nbVictoire[0]);
System.out.println(joueur2 + " score : " + nbVictoire[1]); System.out.println(joueur2 + " score : " + nbVictoire[1]);
} }
System.out.println(joueur1 + " score : " + nbVictoire[0]); System.out.println(joueur1 + " score : " + nbVictoire[0]);
System.out.println(joueur2 + " score : " + nbVictoire[1]); System.out.println(joueur2 + " score : " + nbVictoire[1]);
if (nbVictoire[0] > nbVictoire[1]) if (nbVictoire[0] > nbVictoire[1])
System.out.println(joueur1 + " GAGNE "); System.out.println(joueur1 + " GAGNE ");
else else
if (nbVictoire[1] > nbVictoire[0]) if (nbVictoire[1] > nbVictoire[0])
System.out.println(joueur2 + " GAGNE "); System.out.println(joueur2 + " GAGNE ");
else else
System.out.println("Match nul"); System.out.println("Match nul");
} }
public Joueur getCurrentJoueur() { public Joueur getCurrentJoueur() {
return currentJoueur; return currentJoueur;
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
*/ */
public class Case { public class Case {
int colonne, ligne; int colonne, ligne;
public Case(int _colonne, int _ligne) { public Case(int _colonne, int _ligne) {
this.colonne = _colonne; this.colonne = _colonne;
this.ligne = _ligne; this.ligne = _ligne;
} }
public int getColonne() { public int getColonne() {
return colonne; return colonne;
} }
public int getLigne() { public int getLigne() {
return ligne; return ligne;
} }
public void setLigne( int _ligne ) { public void setLigne( int _ligne ) {
this.ligne = _ligne; this.ligne = _ligne;
} }
public void setColonne( int _colonne ) { public void setColonne( int _colonne ) {
this.colonne = _colonne; this.colonne = _colonne;
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
*/ */
public abstract class Coup { public abstract class Coup {
private int note; private int note;
public Coup() { public Coup() {
note = Integer.MIN_VALUE; // un coup est tres mauvais tant qu'il n'est pas analysé. note = Integer.MIN_VALUE; // un coup est tres mauvais tant qu'il n'est pas analysé.
} }
public void setNote(int _note) { public void setNote(int _note) {
note = _note; note = _note;
} }
public int getNote() { public int getNote() {
return note; return note;
} }
abstract public String toString(); abstract public String toString();
abstract public boolean equals(Object obj); abstract public boolean equals(Object obj);
abstract public int hashCode(); abstract public int hashCode();
} }
/* /*
* To change this license header, choose License Headers in Project Properties. * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates * To change this template file, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package tictactoecodingame; package tictactoecodingame;
/** /**
* *
* @author franck.tempet * @author franck.tempet
*/ */
public class CoupTicTacToe extends Coup { public class CoupTicTacToe extends Coup {
private int colonne, ligne; private int colonne, ligne;
private Jeton jeton; private Jeton jeton;
public CoupTicTacToe( int _colonne , int _ligne , Jeton _jeton ) { public CoupTicTacToe( int _colonne , int _ligne , Jeton _jeton ) {
super(); super();
colonne = _colonne; colonne = _colonne;
ligne = _ligne; ligne = _ligne;
jeton = _jeton; jeton = _jeton;
} }
public int getColonne() { public int getColonne() {
return colonne; return colonne;
} }
public int getLigne() { public int getLigne() {
return ligne; return ligne;
} }
public Jeton getJeton() { public Jeton getJeton() {
return jeton; return jeton;
} }
public String toString() { public String toString() {
return "(" + colonne + "," + ligne + ")" ; return "(" + colonne + "," + ligne + ")" ;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if ( obj == null ) return false; if ( obj == null ) return false;
if (this.getClass() != obj.getClass()) return false; if (this.getClass() != obj.getClass()) return false;
CoupTicTacToe coup = (CoupTicTacToe)obj; CoupTicTacToe coup = (CoupTicTacToe)obj;
return colonne == coup.getColonne() && ligne==coup.ligne && jeton.toString().equals(coup.getJeton().toString()); return colonne == coup.getColonne() && ligne==coup.ligne && jeton.toString().equals(coup.getJeton().toString());
} }
@Override @Override
public int hashCode() { public int hashCode() {
return jeton.toString().hashCode() + colonne * 10 + ligne; return jeton.toString().hashCode() + colonne * 10 + ligne;
} }
} }
/* /*
* To change this license header, choose License Headers in Project Properties. * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates * To change this template file, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package tictactoecodingame; package tictactoecodingame;
/** /**
* *
* @author franck.tempet * @author franck.tempet
*/ */
public class Jeton extends Piece { public class Jeton extends Piece {
public Jeton( Joueur _joueur ) { public Jeton( Joueur _joueur ) {
super( _joueur ); super( _joueur );
} }
public String toString() { public String toString() {
if ((getJoueur().getIdJoueur()) == 1) { if ((getJoueur().getIdJoueur()) == 1) {
return "X"; return "X";
} }
else { else {
return "O"; return "O";
} }
} }
} }
\ No newline at end of file
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
* *
*/ */
public abstract class Joueur { public abstract class Joueur {
private String nom; private String nom;
private static int nbJoueur = 0; private static int nbJoueur = 0;
private int idJoueur; private int idJoueur;
public Joueur( String _nom ) { public Joueur( String _nom ) {
idJoueur = nbJoueur; idJoueur = nbJoueur;
nbJoueur++; nbJoueur++;
this.nom = _nom; this.nom = _nom;
} }
public void setNom ( String _nom ) { public void setNom ( String _nom ) {
this.nom = _nom; this.nom = _nom;
} }
public String getNom() { public String getNom() {
return nom; return nom;
} }
public int getIdJoueur() { public int getIdJoueur() {
return idJoueur; return idJoueur;
} }
abstract public Coup joue( Plateau p_plateau ); abstract public Coup joue( Plateau p_plateau );
public String toString() { public String toString() {
return nom; return nom;
} }
public void forceId(int id){ public void forceId(int id){
idJoueur = id; idJoueur = id;
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
* *
*/ */
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.IOException; import java.io.IOException;
/** /**
* @author Franck * @author Franck
*/ */
public class JoueurHumain extends Joueur { public class JoueurHumain extends Joueur {
public JoueurHumain( String _joueur ) { public JoueurHumain( String _joueur ) {
super( _joueur ); super( _joueur );
} }
public Coup joue(Plateau _plateau) { public Coup joue(Plateau _plateau) {
InputStreamReader clavier = new InputStreamReader(System.in); InputStreamReader clavier = new InputStreamReader(System.in);
char buffer[] = new char[10]; char buffer[] = new char[10];
String monCoup = null; String monCoup = null;
// Demande au joueur de saisir son Coup // Demande au joueur de saisir son Coup
System.out.println("Votre coup : "); System.out.println("Votre coup : ");
try { try {
int nbCar = clavier.read(buffer, 0, 5); int nbCar = clavier.read(buffer, 0, 5);
monCoup = new String(buffer, 0, nbCar-1); monCoup = new String(buffer, 0, nbCar-1);
return _plateau.stringToCoup(monCoup, this); return _plateau.stringToCoup(monCoup, this);
} catch (IOException e) { } catch (IOException e) {
return null; return null;
} }
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
*/ */
public class JoueurOrdi extends Joueur { public class JoueurOrdi extends Joueur {
boolean ponder; // Si vrai l'ordinateur réfléchi pendant la reflexion de son adversaire boolean ponder; // Si vrai l'ordinateur réfléchi pendant la reflexion de son adversaire
AlgoRecherche algoRecherche; AlgoRecherche algoRecherche;
public JoueurOrdi(String _nom) { public JoueurOrdi(String _nom) {
super(_nom); super(_nom);
ponder = false; ponder = false;
} }
public JoueurOrdi( String _nom , AlgoRecherche _algo , boolean _ponder ) { public JoueurOrdi( String _nom , AlgoRecherche _algo , boolean _ponder ) {
super( _nom ); super( _nom );
algoRecherche = _algo; algoRecherche = _algo;
ponder = _ponder; ponder = _ponder;
} }
public JoueurOrdi( String _nom , AlgoRecherche _algo ) { public JoueurOrdi( String _nom , AlgoRecherche _algo ) {
this( _nom , _algo , false ); this( _nom , _algo , false );
} }
public AlgoRecherche getAlgoRecherche() { public AlgoRecherche getAlgoRecherche() {
return algoRecherche; return algoRecherche;
} }
public void setAlgoRecherche(AlgoRecherche _algoRecherche) { public void setAlgoRecherche(AlgoRecherche _algoRecherche) {
algoRecherche = _algoRecherche; algoRecherche = _algoRecherche;
} }
public Coup joue(Plateau _plateau ) { public Coup joue(Plateau _plateau ) {
Coup coupOrdi; Coup coupOrdi;
coupOrdi = algoRecherche.meilleurCoup(_plateau , this , ponder); coupOrdi = algoRecherche.meilleurCoup(_plateau , this , ponder);
return coupOrdi; return coupOrdi;
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* @author Franck * @author Franck
*/ */
public abstract class Piece { public abstract class Piece {
private Joueur joueur; private Joueur joueur;
public Piece( Joueur _joueur ) { public Piece( Joueur _joueur ) {
this.joueur = _joueur; this.joueur = _joueur;
} }
public void setJoueur(Joueur _joueur) { public void setJoueur(Joueur _joueur) {
joueur = _joueur; joueur = _joueur;
} }
public Joueur getJoueur() { public Joueur getJoueur() {
return joueur; return joueur;
} }
abstract public String toString(); abstract public String toString();
} }
package tictactoecodingame; package tictactoecodingame;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* @author Franck * @author Franck
* *
* Classe générique pour les jeux de plateau à 2 joueurs ( une grille de puissance 4 , un échiquier , .. ) * Classe générique pour les jeux de plateau à 2 joueurs ( une grille de puissance 4 , un échiquier , .. )
*/ */
public abstract class Plateau { public abstract class Plateau {
abstract public void init(); // Initialise le plateau pour le démarrage d'une nouvelle partie. abstract public void init(); // Initialise le plateau pour le démarrage d'une nouvelle partie.
abstract public Piece getPiece(Case _case); // Retourne la pièce presente sur la case _case abstract public Piece getPiece(Case _case); // Retourne la pièce presente sur la case _case
abstract public void joueCoup(Coup _coup); // Joue le coup _coup sur le plateau abstract public void joueCoup(Coup _coup); // Joue le coup _coup sur le plateau
abstract public void annuleDernierCoup(); // Annule le dernier coup joué abstract public void annuleDernierCoup(); // Annule le dernier coup joué
abstract public int getNbColonnes(); // Retourne le nombre de colonnes du plateau abstract public int getNbColonnes(); // Retourne le nombre de colonnes du plateau
abstract public int getNbLignes(); // Retourne le nombre de lignes du plateau abstract public int getNbLignes(); // Retourne le nombre de lignes du plateau
abstract public boolean partieTerminee(); // Vrai si la partie est terminee ( soit un gagnant soit un match nulle ) abstract public boolean partieTerminee(); // Vrai si la partie est terminee ( soit un gagnant soit un match nulle )
abstract public boolean partieGagnee(); // Vrai si le dernier joueur a gagné la partie abstract public boolean partieGagnee(); // Vrai si le dernier joueur a gagné la partie
abstract public boolean partieNulle(); // Vrai si la partie est nulle abstract public boolean partieNulle(); // Vrai si la partie est nulle
abstract public Joueur vainqueur(); // Retourne le joueur qui a gagné la partie abstract public Joueur vainqueur(); // Retourne le joueur qui a gagné la partie
abstract public ArrayList<Coup> getListeCoups(Joueur _joueur); // Retourne la liste des coups possibles. abstract public ArrayList<Coup> getListeCoups(Joueur _joueur); // Retourne la liste des coups possibles.
abstract public boolean isValide(Coup _coup); // Retourne Vrai si le coup est valide. abstract public boolean isValide(Coup _coup); // Retourne Vrai si le coup est valide.
abstract public Coup stringToCoup(String _coup, Joueur _joueur); // Convertion d'une chaine de caractères en un Coup abstract public Coup stringToCoup(String _coup, Joueur _joueur); // Convertion d'une chaine de caractères en un Coup
abstract public void sauvegardePosition(int _index); // Sauvegarde la position courante dans l'indice _index abstract public void sauvegardePosition(int _index); // Sauvegarde la position courante dans l'indice _index
abstract public void restaurePosition(int _index); // restaure la position sauvegarde en indice _index abstract public void restaurePosition(int _index); // restaure la position sauvegarde en indice _index
abstract public Coup getDernierCoup(); // Retourne le dernierCoup joue abstract public Coup getDernierCoup(); // Retourne le dernierCoup joue
public String toString() { // Donne une représentation du plateau sous forme d'une chaine de caractères public String toString() { // Donne une représentation du plateau sous forme d'une chaine de caractères
Piece piece; Piece piece;
String chainePlateau = new String(); String chainePlateau = new String();
for (int ligne = getNbLignes() - 1; ligne >= 0; ligne--) { for (int ligne = getNbLignes() - 1; ligne >= 0; ligne--) {
chainePlateau += ligne; chainePlateau += ligne;
for (int colonne = 0; colonne < getNbColonnes(); colonne++) { for (int colonne = 0; colonne < getNbColonnes(); colonne++) {
piece = getPiece(new Case(colonne, ligne)); piece = getPiece(new Case(colonne, ligne));
if (piece == null) { if (piece == null) {
chainePlateau += "| "; chainePlateau += "| ";
} else { } else {
chainePlateau += "|" + piece + " "; chainePlateau += "|" + piece + " ";
} }
} }
chainePlateau += "|\n "; chainePlateau += "|\n ";
for (int colonne = 0; colonne < getNbColonnes(); colonne++) { for (int colonne = 0; colonne < getNbColonnes(); colonne++) {
chainePlateau += "____"; chainePlateau += "____";
} }
chainePlateau += "\n"; chainePlateau += "\n";
} }
for (int colonne = 0; colonne < getNbColonnes(); colonne++) for (int colonne = 0; colonne < getNbColonnes(); colonne++)
chainePlateau += " "+ colonne + " "; chainePlateau += " "+ colonne + " ";
return chainePlateau; return chainePlateau;
} }
} }
package tictactoecodingame; package tictactoecodingame;
/** /**
* *
* @author franck * @author franck
*/ */
/*--------------------------------------------------------*/ /*--------------------------------------------------------*/
/* Version jeu en local */ /* Version jeu en local */
/*--------------------------------------------------------*/ /*--------------------------------------------------------*/
public class Player { public class Player {
public static void main(String args[]) { public static void main(String args[]) {
//JoueurHumain humain = new JoueurHumain("Humain"); //JoueurHumain humain = new JoueurHumain("Humain");
JoueurOrdi joueurOrdi1 = new JoueurOrdi("Ordi1"); JoueurOrdi joueurOrdi1 = new JoueurOrdi("Ordi1");
JoueurOrdi joueurOrdi2 = new JoueurOrdi("Ordi2"); JoueurOrdi joueurOrdi2 = new JoueurOrdi("Ordi2");
//Il faut deux joueurs car l'id fixe le jeton //Il faut deux joueurs car l'id fixe le jeton
AlgoRechercheMinMax minmax = new AlgoRechercheMinMax(9, 100, joueurOrdi1, joueurOrdi2); AlgoRechercheMinMax minmax = new AlgoRechercheMinMax(3, 10, joueurOrdi1, joueurOrdi2);
joueurOrdi1.setAlgoRecherche(minmax); joueurOrdi1.setAlgoRecherche(minmax);
joueurOrdi2.setAlgoRecherche(minmax); joueurOrdi2.setAlgoRecherche(minmax);
GrilleTicTacToe3x3 grille = new GrilleTicTacToe3x3(); GrilleTicTacToe9x9 grille = new GrilleTicTacToe9x9();
Arbitre a = new Arbitre(grille, joueurOrdi1 , joueurOrdi2); Arbitre a = new Arbitre(grille, joueurOrdi1 , joueurOrdi2);
//Arbitre a = new Arbitre(grille, joueurOrdi , humain ); //Arbitre a = new Arbitre(grille, joueurOrdi , humain );
a.startNewGame(true); // Demarre une partie en affichant la grille du jeu a.startNewGame(true); // Demarre une partie en affichant la grille du jeu
// Pour lancer un tournooi de 100 parties en affichant la grille du jeu // Pour lancer un tournooi de 100 parties en affichant la grille du jeu
//a.startTournament(1000 , false); //a.startTournament(1000 , false);
} }
} }
/*--------------------------------------------------------*/ /*--------------------------------------------------------*/
/* Version Codin game */ /* Version Codin game */
/*--------------------------------------------------------*/ /*--------------------------------------------------------*/
/* /*
import java.util.Scanner; import java.util.Scanner;
class Player { class Player {
public static void main(String args[]) { public static void main(String args[]) {
Scanner in = new Scanner(System.in); Scanner in = new Scanner(System.in);
CoupTicTacToe3x3 coup; CoupTicTacToe3x3 coup;
JoueurHumain adversaire = new JoueurHumain("Adversaire"); JoueurHumain adversaire = new JoueurHumain("Adversaire");
JoueurOrdi joueurOrdi = new JoueurOrdi("Ordi"); JoueurOrdi joueurOrdi = new JoueurOrdi("Ordi");
AlgoRechercheAleatoire alea = new AlgoRechercheAleatoire( ); // L'ordinateur joue au hasard AlgoRechercheAleatoire alea = new AlgoRechercheAleatoire( ); // L'ordinateur joue au hasard
joueurOrdi.setAlgoRecherche(alea); joueurOrdi.setAlgoRecherche(alea);
GrilleTicTacToe3x3 grille = new GrilleTicTacToe3x3(); GrilleTicTacToe3x3 grille = new GrilleTicTacToe3x3();
grille.init(); grille.init();
while (true) { while (true) {
int opponentRow = in.nextInt(); int opponentRow = in.nextInt();
int opponentCol = in.nextInt(); int opponentCol = in.nextInt();
int validActionCount = in.nextInt(); int validActionCount = in.nextInt();
for (int i = 0; i < validActionCount; i++) { for (int i = 0; i < validActionCount; i++) {
int row = in.nextInt(); int row = in.nextInt();
int col = in.nextInt(); int col = in.nextInt();
} }
if ( opponentCol != -1 ) { if ( opponentCol != -1 ) {
coup = new CoupTicTacToe3x3(opponentCol, opponentRow, new Jeton(adversaire)); coup = new CoupTicTacToe3x3(opponentCol, opponentRow, new Jeton(adversaire));
grille.joueCoup(coup); grille.joueCoup(coup);
} }
coup = (CoupTicTacToe3x3) joueurOrdi.joue(grille); coup = (CoupTicTacToe3x3) joueurOrdi.joue(grille);
grille.joueCoup(coup); grille.joueCoup(coup);
System.out.println(coup.getLigne() + " " + coup.getColonne() ); System.out.println(coup.getLigne() + " " + coup.getColonne() );
System.out.flush(); System.out.flush();
} }
} }
} }
*/ */
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment