Commit fe4d722c authored by CRESCENCE Cassandre's avatar CRESCENCE Cassandre

Add new file

parent 5c92131d
Pipeline #478 canceled with stages
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tictactoecodingame;
import java.util.ArrayList;
/**
*
* @author franck.tempet
*/
public class GrilleTicTacToe3x3 extends Plateau {
Jeton[][] grille = new Jeton[3][3];
Jeton[][][] grilleSav = new Jeton[100][3][3]; // Pour sauvegardr la position. 100 au maximum
CoupTicTacToe dernierCoup;
Joueur vainqueur;
@Override
public void init() {
for (int c = 0; c < this.getNbColonnes(); c++)
for (int l = 0; l < this.getNbLignes(); l++)
grille[c][l] = null;
dernierCoup = null;
vainqueur = null;
}
@Override
public Piece getPiece(Case _case) {
return grille[_case.getColonne()][_case.getLigne()];
}
@Override
public void joueCoup(Coup _coup) {
CoupTicTacToe coup = (CoupTicTacToe) _coup;
grille[coup.getColonne()][coup.getLigne()] = coup.getJeton();
dernierCoup = coup;
}
@Override
public void annuleDernierCoup() {
grille[dernierCoup.getColonne()][dernierCoup.getLigne()] = null;
dernierCoup = null;
}
@Override
public int getNbColonnes() {
return 3;
}
@Override
public int getNbLignes() {
return 3;
}
@Override
public boolean partieTerminee() {
if (partieGagnee()) {
return true;
}
return isGrillePleine();
}
@Override
public boolean partieGagnee() {
int[][] dir = {{1, 0}, {1, 1}, {0, 1}, {1, -1}};
int[][] dirOps = {{-1, 0}, {-1, -1}, {0, -1}, {-1, 1}};
int x, y;
int nbJetonAligne;
if (dernierCoup == null) {
return false;
}
Joueur dernierJoueur = dernierCoup.getJeton()
.getJoueur();
/* Regarde si le dernier coup est gagnant */
for (int d = 0; d < 4; d++) {
nbJetonAligne = 0;
x = dernierCoup.getColonne();
y = dernierCoup.getLigne();
while (x < this.getNbColonnes() && x >= 0 && y < this.getNbLignes() && y >= 0 && grille[x][y] != null && grille[x][y].getJoueur() == dernierJoueur) {
nbJetonAligne++;
if (nbJetonAligne >= 3) {
vainqueur = dernierJoueur;
return true;
}
x += dir[d][0];
y += dir[d][1];
}
//regarde dans la direction oppose
x = dernierCoup.getColonne();
y = dernierCoup.getLigne();
nbJetonAligne--;
while (x < this.getNbColonnes() && x >= 0 && y < this.getNbLignes() && y >= 0 && grille[x][y] != null && grille[x][y].getJoueur() == dernierJoueur) {
nbJetonAligne++;
if (nbJetonAligne >= 3) {
vainqueur = dernierJoueur;
return true;
}
x += dirOps[d][0];
y += dirOps[d][1];
}
}
return false;
}
@Override
public boolean partieNulle() {
if (partieGagnee()) {
return false;
}
return isGrillePleine();
}
@Override
public ArrayList<Coup> getListeCoups(Joueur _joueur) {
ArrayList<Coup> listeCoups = new ArrayList<Coup>();
for (int c = 0; c < this.getNbColonnes(); c++) {
for (int l = 0; l < this.getNbLignes(); l++) {
if (grille[c][l] == null)
listeCoups.add(new CoupTicTacToe(c, l, new Jeton(_joueur)));
}
}
return listeCoups;
}
@Override
public boolean isValide(Coup _coup) {
CoupTicTacToe coup = (CoupTicTacToe) _coup;
return grille[coup.getColonne()][coup.getLigne()] == null;
}
@Override
public Coup stringToCoup(String _coup, Joueur _joueur) {
int colonne = Integer.valueOf(_coup.charAt(0)+"");
int ligne = Integer.valueOf(_coup.charAt(1)+"");
return new CoupTicTacToe(colonne, ligne , new Jeton(_joueur) );
}
@Override
public void sauvegardePosition(int _index) {
for (int c = 0; c < this.getNbColonnes(); c++)
for (int l = 0; l < this.getNbLignes(); l++)
grilleSav[_index][c][l] = grille[c][l];
}
@Override
public void restaurePosition(int _index) {
for (int c = 0; c < this.getNbColonnes(); c++)
for (int l = 0; l < this.getNbLignes(); l++)
grille[c][l] = grilleSav[_index][c][l];
vainqueur = null;
}
private boolean isGrillePleine() {
for (int c = 0; c < this.getNbColonnes(); c++) {
for (int l = 0; l < this.getNbLignes(); l++) {
if (grille[c][l] == null) {
return false;
}
}
}
return true;
}
@Override
public Joueur vainqueur() {
return vainqueur;
}
@Override
public Coup getDernierCoup() {
return dernierCoup;
}
}
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