Commit 86aa4dc4 authored by William Babonnaud's avatar William Babonnaud

Premier pas vers l'unification des classes de jeu

parent d2c046b8
......@@ -40,16 +40,11 @@ class Demineur extends Jeu[MonBouton] {
tailleY = y
nb_mines = n
c_restantes = tailleX*tailleY - nb_mines
// champ = ofDim[Int](tailleX, tailleY)
boutons = ofDim[MonBouton](tailleX, tailleY)
}
// Pour récupérer les valeurs tailleX et tailleY
def getTailleX = tailleX
def getTailleY = tailleY
// Pour récupérer la matrice de boutons.
def getBoutons(x : Int, y : Int) = boutons(x)(y)
// On n'aura normalement pas à utiliser cette fonction, mais elle doit exister
def reparametrage(x: Int, y: Int) = reparametrage(x,y,10)
// Réactive la variable de premier coup
def resetPremierCoup = premierCoup = true
......@@ -125,7 +120,7 @@ class Demineur extends Jeu[MonBouton] {
var voisin = voisinEtendu(x,y):::(Nil)
for((vx,vy) <- voisin){
if(boutons(vx)(vy).estLibre && !boutons(vx)(vy).mines){clique_action(vx,vy)}}
if(boutons(vx)(vy).estLibre && !boutons(vx)(vy).mines){clique_action_gauche(vx,vy)}}
}
}
......@@ -134,12 +129,12 @@ class Demineur extends Jeu[MonBouton] {
var voisin = voisinEtendu(x,y):::(Nil)
for((vx,vy) <- voisin){
if(boutons(vx)(vy).estLibre){perdu = perdu || clique_action(vx,vy)}}
if(boutons(vx)(vy).estLibre){perdu = perdu || clique_action_gauche(vx,vy)}}
perdu
}
// Définit les conséquences d'un clic sur un bouton.
def clique_action (x: Int, y: Int) : Boolean = {
def clique_action_gauche(x: Int, y: Int) : Boolean = {
if(boutons(x)(y).estLibre){ //Cases non dévoilée, on la dévoile
boutons(x)(y).getContenu match {
case 0 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_zero.png"))
......@@ -215,7 +210,7 @@ class Demineur extends Jeu[MonBouton] {
}
// Affichage des drapeaux
def drapeau(x: Int, y: Int) = {
def clique_action_droit(x: Int, y: Int) = {
if (boutons(x)(y).enabled == true) {
boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_drapeau.png"))
boutons(x)(y).enabled = false
......@@ -233,5 +228,6 @@ class Demineur extends Jeu[MonBouton] {
if (boutons(x)(y).mines) { m_trouvees -= 1 } else { m_trouvees += 1 }
}
}
victoire()
}
}
......@@ -6,15 +6,10 @@ class Flip extends Jeu[MonBouton] {
// Cotés du terrain.
tailleX = 5
tailleY = 5
def getTailleX = tailleX
def getTailleY = tailleY
// Matrice des boutons.
override protected var boutons = ofDim[MonBouton](tailleX,tailleY)
def getBoutons(x: Int, y: Int) = boutons(x)(y)
// Pour reparamétrer la configuration du terrain
def reparametrage(x: Int, y: Int) = {
tailleX = x
......@@ -22,6 +17,8 @@ class Flip extends Jeu[MonBouton] {
boutons = ofDim[MonBouton](tailleX,tailleY)
}
def reparametrage(x: Int, y: Int, n: Int) = reparametrage(x,y)
// Pour fixer la couleur d'un bouton.
// Le champ "libre" de MonBouton permettra de représenter la couleur :
// A true, la case est blanche ; à false elle est noire.
......@@ -81,11 +78,13 @@ class Flip extends Jeu[MonBouton] {
}
// Conséquence du clic d'un bouton.
def clique_action(i: Int, j:Int) : Boolean = {
def clique_action_gauche(i: Int, j:Int) : Boolean = {
chgBouton(i,j)
var voisin = voisinDirect(i,j)
for((x,y) <- voisin){chgBouton(x,y)}
false
}
def clique_action_droit(i: Int, j: Int) = false
}
......@@ -5,11 +5,12 @@ import javax.swing.ImageIcon
import scala.math._
abstract class Jeu[T<:Button] {
// Variables de base
protected var tailleX : Int = 9
protected var tailleY : Int = 9
protected var boutons : Array[Array[T]]
// Fonctions utilitaires
protected def map_init(f : (Int,Int) => T, a : Array[Array[T]]) = {
for (i <- 0 to (tailleX-1))
for (j <- 0 to (tailleY-1))
......@@ -20,9 +21,7 @@ abstract class Jeu[T<:Button] {
a.map(x => x.map(f))
}
def victoire() : Boolean
def voisinDirect(x : Int, y : Int) = {
protected def voisinDirect(x : Int, y : Int) = {
var voisin = List[(Int,Int)]()
if(x>0){voisin = (x-1, y) :: voisin}
if(x<tailleX-1){voisin = (x+1, y) :: voisin}
......@@ -32,7 +31,7 @@ abstract class Jeu[T<:Button] {
voisin
}
def voisinEtendu(x : Int, y : Int): List[(Int,Int)] = {
protected def voisinEtendu(x : Int, y : Int): List[(Int,Int)] = {
var voisin = List[(Int, Int)]()
if(x>0){
voisin = (x-1, y) :: voisin
......@@ -49,4 +48,18 @@ abstract class Jeu[T<:Button] {
voisin
}
// Transimission d'informations
def getTailleX = tailleX
def getTailleY = tailleY
def getBoutons(x: Int,y: Int) = boutons(x)(y)
// Fonctions obligatoires
def victoire() : Boolean
def initialise() : Unit
def initialise(n: Int) : Unit
def reparametrage(x: Int, y: Int) : Unit
def reparametrage(x: Int, y: Int, n: Int) : Unit
def clique_action_droit(x: Int, y: Int) : Boolean
def clique_action_gauche(x: Int, y: Int) : Boolean
}
......@@ -177,7 +177,7 @@ object CercleInvocation extends SimpleSwingApplication {
// Réaction aux évènements.
reactions += {
case ButtonClicked(component : MonBouton) => var bo = jeu.clique_action(component.getTheX, component.getTheY)
case ButtonClicked(component : MonBouton) => var bo = jeu.clique_action_gauche(component.getTheX, component.getTheY)
if (bo) {
Dialog.showMessage(contents.head, "Désolé, vous avez perdu !", "Boum !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("case_mine.png")))
......@@ -189,8 +189,8 @@ object CercleInvocation extends SimpleSwingApplication {
new_game
} }
case (e: MouseEvent) => if (e.peer.getButton() == java.awt.event.MouseEvent.BUTTON3) {
jeu.drapeau(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)
if (jeu.victoire) {
var bo = jeu.clique_action_droit(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)
if (bo) {
Dialog.showMessage(contents.head, "Félicitations, vous avez gagné !", "Victoire !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("case_drapeau.png")))
new_game
......
......@@ -3,28 +3,35 @@ import Array._
import java.awt.Color
import javax.swing.ImageIcon
class Unruly {
class Unruly extends Jeu[MonBouton] {
// Cotés du terrain
private var tailleX = 8
private var tailleY = 8
tailleX = 8
tailleY = 8
private var nb_non_occupes = tailleX*tailleY
def getTailleX = tailleX
def getTailleY = tailleY
// Matrice des boutons.
var boutons = ofDim[MonBouton](tailleX,tailleY)
def getBoutons(x: Int, y: Int) = boutons(x)(y)
override var boutons = ofDim[MonBouton](tailleX,tailleY)
// Pour reparamétrer la configuration du terrain
def reparametrage(x: Int, y: Int) = {
tailleX = x
tailleY = y
boutons = ofDim[MonBouton](tailleX,tailleY)
boutons = ofDim[MonBouton](tailleX,tailleY)
nb_non_occupes = tailleX*tailleY
}
def reparametrage(x: Int, y: Int, n: Int) = reparametrage(x: Int, y: Int)
def redemarre = {
for (i <- 0 to (tailleX-1)) {
for (j <- 0 to (tailleY-1)) {
if (boutons(i)(j).enabled) { boutons(i)(j).desactive_couleur }
}
}
nb_non_occupes = tailleX*tailleY
}
// Fonction pour compter le nombre de cases noires ou blanches sur
// une ligne ou une colonne. Le booléen lig indique si on regarde une
// ligne (true) ou une colonne (false).
......@@ -139,7 +146,7 @@ class Unruly {
}
// Test de victoire
private def victoire = {
def victoire() = {
nb_non_occupes == 0
}
......@@ -160,12 +167,12 @@ class Unruly {
// Définition des conséquences d'un clic gauche de souris
def clique_action_gauche(i: Int, j: Int) = {
theAction(i,j,Color.black)
victoire
victoire()
}
// Définiton des conséquences d'un clic droit de souris
def clique_action_droit(i: Int, j: Int) = {
theAction(i,j,Color.white)
victoire
victoire()
}
}
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