Skip to content

Commit

Permalink
Added antijeu mechanic; improved moving pieces
Browse files Browse the repository at this point in the history
  • Loading branch information
Nelgamix committed May 7, 2017
1 parent 2a995b9 commit b852da1
Show file tree
Hide file tree
Showing 10 changed files with 135 additions and 19 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ la sauvegarde)
* Améliorer visuel et IHM de la partie jeu (couleurs, effets, anims, images pions)
* (Jeu en réseau) ?

Voir README.md
Voir TODO.md
## Images
IHM réalisées par Loïc Houdebine (voir lien dans la dernière section)
### Menu
Expand Down
1 change: 1 addition & 0 deletions nomsDisponibles.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ L'accent qui fait crasher é_è
Blanchon testing
Wack attack
Elen Book
Elen Library
One dollar
Emenems
Marion Babtou
Expand Down
4 changes: 2 additions & 2 deletions src/diaballik/Diaballik.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ public void newGame(String path, boolean isSave) {
showSceneJeu();
}

public void endGame(Joueur gagnant) {
Dialogs.showEndGame(gagnant);
public void endGame(Joueur gagnant, int victoireType) {
Dialogs.showEndGame(gagnant, victoireType);

showSceneMenu();
}
Expand Down
30 changes: 24 additions & 6 deletions src/diaballik/DiaballikJeu.css
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
-fx-font-size: 175%;
}

#actionsView > VBox > .button {
/*#actionsView > VBox > .button {
-fx-background-color:
linear-gradient(#f2f2f2, #d6d6d6),
linear-gradient(#fcfcfc 0%, #d9d9d9 20%, #d6d6d6 100%),
Expand All @@ -31,17 +31,35 @@
-fx-padding: 10px;
}
#actionsView > VBox > #passerTour {
-fx-font-weight: bold;
-fx-font-size: 150%;
}

#actionsView > VBox > .button:hover {
-fx-background-color:
linear-gradient(#d2d2d2, #b4b4b4),
linear-gradient(#e6e6e6 0%, #c0c0c0 20%, #a1a1a1 100%),
linear-gradient(#bebebe 0%, #d6d6d6 50%);
-fx-cursor: hand;
}*/

#actionsView > VBox > .button {
-fx-background-color: linear-gradient(to bottom, #3498db, #2980b9);
-fx-background-radius: 4px;
-fx-background-insets: 2px;
-fx-font-family: "Arial";
-fx-text-fill: white;
-fx-font-size: 140%;
-fx-padding: 10px;
-fx-border-radius: 4px;
-fx-border-color: black;
-fx-border-width: 2px;
}

#actionsView > VBox > .button:hover {
-fx-background-color: linear-gradient(to bottom, #3cb0fd, #3498db);
-fx-cursor: hand;
}

#actionsView > VBox > #passerTour {
-fx-font-weight: bold;
-fx-font-size: 175%;
}

/* AFFICHAGE VIEW */
Expand Down
2 changes: 1 addition & 1 deletion src/diaballik/controller/ActionsController.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void saveGame(String directory) {
}

public void antijeu() {
System.out.println("Antijeu");
System.out.println("Antijeu : " + jeu.antijeu());
}

public void rollback() {
Expand Down
5 changes: 5 additions & 0 deletions src/diaballik/controller/TerrainController.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public void mouseClicked(Point point) {
this.caseSelectionne.getPion().setSelectionne(false);
this.jeu.deplacement(this.caseSelectionne.getPion(), caseCliquee);
finSelection();
if (jeu.getJoueurActuel().getDeplacementsRestants() > 0) {
this.caseSelectionne = caseCliquee;
this.caseSelectionne.getPion().setSelectionne(true);
marquerAll(caseCliquee);
}
}
}
}
Expand Down
85 changes: 82 additions & 3 deletions src/diaballik/model/Jeu.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ public String toString() {
public final static int CHANGED_TOUR = 2;
public final static int CHANGED_ALL = 3;

public final static int VICTOIRE_NORMALE = 1;
public final static int VICTOIRE_ANTIJEU = 2;

public Jeu(ConfigurationPartie cp, Diaballik diaballik) {
this.diaballik = diaballik;

Expand Down Expand Up @@ -198,6 +201,77 @@ public void save(String path) {
}
}

public boolean antijeu() {
// 1: On vérifie si ils sont tous sur une colonne différente
Pion[] tab = new Pion[7]; // on se souvient de la ligne des pions
for (Pion p : getTerrain().getPions()[getJoueurAdverse().getCouleur()]) { // pour chaque pion du joueur adversaire
if (tab[p.getPosition().getPoint().getX()] != null) {
System.out.println("Antijeu: etape 1 non valide");
return false;
} else {
tab[p.getPosition().getPoint().getX()] = p;
}
}

// 2: On vérifie qu'ils bloquent le passage (qu'ils sont côte à côte, direct ou en diagonal)
int i = 1;
Pion p1 = tab[0], p2 = tab[i];
while (++i < 7) {
if (Math.abs(p1.getPosition().getPoint().getY() - p2.getPosition().getPoint().getY()) > 1) {
System.out.println("Antijeu: etape 2 non valide");
return false;
}

p1 = p2;
p2 = tab[i];
}

// 3: on vérifie que le joueur qui a appelé antijeu a bien 3 pions collés au mur
int n = 0;
Point po;
Case c;
for (Pion p : getTerrain().getPions()[getJoueurActuel().getCouleur()]) { // pour chaque pion du joueur actuel
po = p.getPosition().getPoint();

if (n >= 3) break;

// vérif case de gauche
c = getTerrain().getCaseAt(new Point(po.getX() - 1, po.getY()));
if (c != null && c.getPion() != null && c.getPion().getCouleur() == getJoueurAdverse().getCouleur()) {
n++;
continue;
}

// vérif case du haut
c = getTerrain().getCaseAt(new Point(po.getX(), po.getY() + 1));
if (c != null && c.getPion() != null && c.getPion().getCouleur() == getJoueurAdverse().getCouleur()) {
n++;
continue;
}

// vérif case de droite
c = getTerrain().getCaseAt(new Point(po.getX() + 1, po.getY()));
if (c != null && c.getPion() != null && c.getPion().getCouleur() == getJoueurAdverse().getCouleur()) {
n++;
continue;
}

// vérif case du bas
c = getTerrain().getCaseAt(new Point(po.getX(), po.getY() - 1));
if (c != null && c.getPion() != null && c.getPion().getCouleur() == getJoueurAdverse().getCouleur()) {
n++;
}
}

if (n >= 3) {
diaballik.endGame(getJoueurActuel(), VICTOIRE_ANTIJEU);
return true;
} else {
System.out.println("Antijeu: etape 3 non valide (n = " + n + ")");
return false;
}
}

// Effectue un déplacement (le pion p se déplace sur la case c)
public void deplacement(Pion p, Case c) {
if (!p.aLaBalle() && deplacementPossible(p.getPosition(), c) && this.getJoueurActuel().actionPossible(Joueur.ACTION_DEPLACEMENT)) {
Expand Down Expand Up @@ -376,7 +450,7 @@ public void passe(Pion p, Case c) {

if (partieTerminee(c.getPion())) {
// la partie est terminée (le vainqueur est joueurActuel())
diaballik.endGame(getJoueurActuel());
diaballik.endGame(getJoueurActuel(), VICTOIRE_NORMALE);
}

if (!this.getJoueurActuel().moinsAction(Joueur.ACTION_PASSE)) {
Expand Down Expand Up @@ -413,13 +487,18 @@ public void changerTour() {
historique.clear();
getJoueurActuel().reset_actions();
this.tour++;
joueurActuel = (joueurActuel + 1 >= Jeu.NOMBRE_JOUEURS ? 0 : joueurActuel + 1);
joueurActuel = ++joueurActuel % Jeu.NOMBRE_JOUEURS;
//joueurActuel = (joueurActuel + 1 >= Jeu.NOMBRE_JOUEURS ? 0 : joueurActuel + 1);

updateListeners(CHANGED_TOUR);
}

public Joueur getJoueurActuel() {
return this.joueurs[(tour-1) % NOMBRE_JOUEURS];
return this.joueurs[joueurActuel % NOMBRE_JOUEURS];
}

public Joueur getJoueurAdverse() {
return this.joueurs[(joueurActuel + 1) % NOMBRE_JOUEURS];
}

public ArrayList<Action> getHistorique() {
Expand Down
4 changes: 0 additions & 4 deletions src/diaballik/model/Joueur.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package diaballik.model;

import javafx.scene.paint.Color;

public class Joueur {
private Terrain terrain;
private Jeu jeu;
Expand All @@ -21,8 +19,6 @@ public class Joueur {
// Joueurs et couleurs
public final static int JOUEUR_VERT = 0; // J vert
public final static int JOUEUR_ROUGE = 1; // J rouge
public final static Color COULEUR_VERT = Color.GREEN; // Couleur du J vert
public final static Color COULEUR_ROUGE = Color.RED; // Couleur du J rouge

public Joueur(Jeu jeu, int couleur) {
this.jeu = jeu;
Expand Down
4 changes: 4 additions & 0 deletions src/diaballik/model/Terrain.java
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,8 @@ public String getSaveString() {

return sb.toString();
}

public Pion[][] getPions() {
return pions;
}
}
17 changes: 15 additions & 2 deletions src/diaballik/view/Dialogs.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import diaballik.Diaballik;
import diaballik.model.ConfigurationPartie;
import diaballik.model.IA;
import diaballik.model.Jeu;
import diaballik.model.Joueur;
import javafx.application.Platform;
import javafx.collections.FXCollections;
Expand Down Expand Up @@ -233,11 +234,23 @@ private List<String> getFilesInDir(String directory) {
return results;
}

public static void showEndGame(Joueur gagnant) {
public static void showEndGame(Joueur gagnant, int victoireType) {
String victoireMessage = "Type de victoire: ";
switch (victoireType) {
case Jeu.VICTOIRE_NORMALE:
victoireMessage += "normale.";
break;
case Jeu.VICTOIRE_ANTIJEU:
victoireMessage += "par antijeu.";
break;
default:
victoireMessage += "inconnue.";
}

Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Partie terminée");
alert.setHeaderText("Fin de la partie");
alert.setContentText("Partie terminée!\nJoueur " + gagnant.getNom() + " l'emporte!");
alert.setContentText("Partie terminée!\nJoueur " + gagnant.getNom() + " l'emporte!\n" + victoireMessage);

alert.showAndWait();
}
Expand Down

0 comments on commit b852da1

Please sign in to comment.