Commit ff81a6be authored by Fardale's avatar Fardale

Gros changement avant rendu

parent f615b56a
......@@ -28,7 +28,7 @@ class Demineur {
// 0-8 : Nombre de mines autour de la case vide.
// 9 : Signale l'emplacement d'une mine sur la case.
// Par défaut, on est réglé sur facile.
private var champ = ofDim[Int](tailleX,tailleY)
// private var champ = ofDim[Int](tailleX,tailleY)
// Matrice des boutons associés aux cases (il me semble plus pertinent de l'inclure dans le jeu).
var boutons = ofDim[MonBouton](tailleX,tailleY)
......@@ -39,7 +39,7 @@ class Demineur {
tailleY = y
nb_mines = n
c_restantes = tailleX*tailleY - nb_mines
champ = ofDim[Int](tailleX, tailleY)
// champ = ofDim[Int](tailleX, tailleY)
boutons = ofDim[MonBouton](tailleX, tailleY)
}
......@@ -48,7 +48,7 @@ class Demineur {
def getTailleY = tailleY
// Pour récupérer la matrice de boutons.
def getBoutons = boutons
def getBoutons(x : Int, y : Int) = boutons(x)(y)
// Réactive la variable de premier coup
def resetPremierCoup = premierCoup = true
......@@ -67,42 +67,37 @@ class Demineur {
// incrémente les cases alentour pour chaque mine placée.
def initialise = {
creation_boutons
for (i <- 0 to (tailleX-1)) {
for (j <- 0 to (tailleY-1)) {
champ(i)(j) = 0
}
}
var x = Random.nextInt(tailleX)
var y = Random.nextInt(tailleY)
for (i <- 0 to min(nb_mines-1,tailleX*tailleY-1)) {
while(champ(x)(y) == 9) {
while(boutons(x)(y).getContenu == 9) {
x = Random.nextInt(tailleX)
y = Random.nextInt(tailleY)
}
champ(x)(y) = 9
boutons(x)(y).setContenu(9)
if (x != 0) {
if (champ(x-1)(y) != 9) { champ(x-1)(y) += 1 }
if (!boutons(x-1)(y).mines) { boutons(x-1)(y).incrContenu}
}
if (x != (tailleX-1)) {
if (champ(x+1)(y) != 9) { champ(x+1)(y) += 1 }
if (!boutons(x+1)(y).mines) { boutons(x+1)(y).incrContenu}
}
if (y != 0) {
if (champ(x)(y-1) != 9) { champ(x)(y-1) += 1 }
if (!boutons(x)(y-1).mines) { boutons(x)(y-1).incrContenu}
}
if (y != (tailleY-1)) {
if (champ(x)(y+1) != 9) { champ(x)(y+1) += 1 }
if (!boutons(x)(y+1).mines) { boutons(x)(y+1).incrContenu}
}
if (x != 0 && y != 0) {
if (champ(x-1)(y-1) != 9) { champ(x-1)(y-1) += 1 }
if (!boutons(x-1)(y-1).mines) { boutons(x-1)(y-1).incrContenu}
}
if (x != 0 && y != (tailleY-1)) {
if (champ(x-1)(y+1) != 9) { champ(x-1)(y+1) += 1 }
if (!boutons(x-1)(y+1).mines) { boutons(x-1)(y+1).incrContenu}
}
if (x != (tailleX-1) && y != 0) {
if (champ(x+1)(y-1) != 9) { champ(x+1)(y-1) += 1 }
if (!boutons(x+1)(y-1).mines) { boutons(x+1)(y-1).incrContenu}
}
if (x != (tailleX-1) && y != (tailleY-1)) {
if (champ(x+1)(y+1) != 9) { champ(x+1)(y+1) += 1 }
if (!boutons(x+1)(y+1).mines) { boutons(x+1)(y+1).incrContenu}
}
}
}
......@@ -111,42 +106,37 @@ class Demineur {
def initialise (n: Int) = {
creation_boutons
var ran = new Random(n)
for (i <- 0 to (tailleX-1)) {
for (j <- 0 to (tailleY-1)) {
champ(i)(j) = 0
}
}
var x = ran.nextInt(tailleX)
var y = ran.nextInt(tailleY)
for (i <- 0 to min(nb_mines-1,tailleX*tailleY-1)) {
while(champ(x)(y) == 9) {
while(boutons(x)(y).getContenu == 9) {
x = ran.nextInt(tailleX)
y = ran.nextInt(tailleY)
}
champ(x)(y) = 9
boutons(x)(y).setContenu(9)
if (x != 0) {
if (champ(x-1)(y) != 9) { champ(x-1)(y) += 1 }
if (!boutons(x-1)(y).mines) { boutons(x-1)(y).incrContenu}
}
if (x != (tailleX-1)) {
if (champ(x+1)(y) != 9) { champ(x+1)(y) += 1 }
if (!boutons(x+1)(y).mines) { boutons(x+1)(y).incrContenu}
}
if (y != 0) {
if (champ(x)(y-1) != 9) { champ(x)(y-1) += 1 }
if (!boutons(x)(y-1).mines) { boutons(x)(y-1).incrContenu}
}
if (y != (tailleY-1)) {
if (champ(x)(y+1) != 9) { champ(x)(y+1) += 1 }
if (!boutons(x)(y+1).mines) { boutons(x)(y+1).incrContenu}
}
if (x != 0 && y != 0) {
if (champ(x-1)(y-1) != 9) { champ(x-1)(y-1) += 1 }
if (!boutons(x-1)(y-1).mines) { boutons(x-1)(y-1).incrContenu}
}
if (x != 0 && y != (tailleY-1)) {
if (champ(x-1)(y+1) != 9) { champ(x-1)(y+1) += 1 }
if (!boutons(x-1)(y+1).mines) { boutons(x-1)(y+1).incrContenu}
}
if (x != (tailleX-1) && y != 0) {
if (champ(x+1)(y-1) != 9) { champ(x+1)(y-1) += 1 }
if (!boutons(x+1)(y-1).mines) { boutons(x+1)(y-1).incrContenu}
}
if (x != (tailleX-1) && y != (tailleY-1)) {
if (champ(x+1)(y+1) != 9) { champ(x+1)(y+1) += 1 }
if (!boutons(x+1)(y+1).mines) { boutons(x+1)(y+1).incrContenu}
}
}
}
......@@ -158,28 +148,28 @@ class Demineur {
if(premierCoup){premierCoup = false}
if (x > 0) {
if(boutons(x-1)(y).enabled && champ(x-1)(y) != 9){clique_action(x-1,y)}
if(boutons(x-1)(y).estLibre && !boutons(x-1)(y).mines){clique_action(x-1,y)}
if(y > 0){
if(boutons(x-1)(y-1).enabled && champ(x-1)(y-1) != 9){clique_action(x-1,y-1)}
if(boutons(x-1)(y-1).estLibre && !boutons(x-1)(y-1).mines){clique_action(x-1,y-1)}
}
if(y < tailleY-1){
if(boutons(x-1)(y+1).enabled && champ(x-1)(y+1) != 9){clique_action(x-1,y+1)}
if(boutons(x-1)(y+1).estLibre && !boutons(x-1)(y+1).mines){clique_action(x-1,y+1)}
}
}
if (x < tailleX-1) {
if(boutons(x+1)(y).enabled && champ(x+1)(y) != 9){clique_action(x+1,y)}
if(boutons(x+1)(y).estLibre && !boutons(x+1)(y).mines){clique_action(x+1,y)}
if(y > 0){
if(boutons(x+1)(y-1).enabled && champ(x+1)(y-1) != 9){clique_action(x+1,y-1)}
if(boutons(x+1)(y-1).estLibre && !boutons(x+1)(y-1).mines){clique_action(x+1,y-1)}
}
if(y < tailleY-1){
if(boutons(x+1)(y+1).enabled && champ(x+1)(y+1) != 9){clique_action(x+1,y+1)}
if(boutons(x+1)(y+1).estLibre && !boutons(x+1)(y+1).mines){clique_action(x+1,y+1)}
}
}
if(y>0){
if(boutons(x)(y-1).enabled && champ(x)(y-1) != 9){clique_action(x,y-1)}
if(boutons(x)(y-1).estLibre && !boutons(x)(y-1).mines){clique_action(x,y-1)}
}
if(y<tailleY-1){
if(boutons(x)(y+1).enabled && champ(x)(y+1) != 9){clique_action(x,y+1)}
if(boutons(x)(y+1).estLibre && !boutons(x)(y+1).mines){clique_action(x,y+1)}
}
}
}
......@@ -187,100 +177,106 @@ class Demineur {
def devoile (x: Int, y: Int) = {
var perdu = false
if (x > 0) {
if(boutons(x-1)(y).enabled){perdu = perdu || clique_action(x-1,y)}
if(boutons(x-1)(y).estLibre){perdu = perdu || clique_action(x-1,y)}
if(y > 0){
if(boutons(x-1)(y-1).enabled){perdu = perdu || clique_action(x-1,y-1)}
if(boutons(x-1)(y-1).estLibre){perdu = perdu || clique_action(x-1,y-1)}
}
if(y < tailleY-1){
if(boutons(x-1)(y+1).enabled){perdu = perdu || clique_action(x-1,y+1)}
if(boutons(x-1)(y+1).estLibre){perdu = perdu || clique_action(x-1,y+1)}
}
}
if (x < tailleX-1) {
if(boutons(x+1)(y).enabled){perdu = perdu || clique_action(x+1,y)}
if(boutons(x+1)(y).estLibre){perdu = perdu || clique_action(x+1,y)}
if(y > 0){
if(boutons(x+1)(y-1).enabled){perdu = perdu || clique_action(x+1,y-1)}
if(boutons(x+1)(y-1).estLibre){perdu = perdu || clique_action(x+1,y-1)}
}
if(y < tailleY-1){
if(boutons(x+1)(y+1).enabled){perdu = perdu || clique_action(x+1,y+1)}
if(boutons(x+1)(y+1).estLibre){perdu = perdu || clique_action(x+1,y+1)}
}
}
if(y>0){
if(boutons(x)(y-1).enabled){perdu = perdu || clique_action(x,y-1)}
if(boutons(x)(y-1).estLibre){perdu = perdu || clique_action(x,y-1)}
}
if(y<tailleY-1){
if(boutons(x)(y+1).enabled){perdu = perdu || clique_action(x,y+1)}
if(boutons(x)(y+1).estLibre){perdu = perdu || clique_action(x,y+1)}
}
perdu
}
// Définit les conséquences d'un clic sur un bouton.
def clique_action (x: Int, y: Int) : Boolean = {
champ(x)(y) match {
case 0 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_zero.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_zero.png"))
c_restantes -= 1
propage(0,x,y)
false
case 1 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_un.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_un.png"))
c_restantes -= 1
propage(1,x,y)
false
case 2 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_deux.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_deux.png"))
c_restantes -= 1
propage(2,x,y)
false
case 3 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_trois.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_trois.png"))
c_restantes -= 1
propage(3,x,y)
false
case 4 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_quatre.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_quatre.png"))
c_restantes -= 1
propage(4,x,y)
false
case 5 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_cinq.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_cinq.png"))
c_restantes -= 1
propage(5,x,y)
false
case 6 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_six.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_six.png"))
c_restantes -= 1
propage(6,x,y)
false
case 7 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_sept.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_sept.png"))
c_restantes -= 1
propage(7,x,y)
false
case 8 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_huit.png"))
boutons(x)(y).enabled = false
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_huit.png"))
c_restantes -= 1
propage(8,x,y)
false
case 9 => for (i <- 0 to (tailleX-1)) {
for (j <- 0 to (tailleY-1)) {
if (champ(i)(j) == 9) {
boutons(i)(j).icon = new ImageIcon(getClass.getResource("case_mine.png"))
boutons(i)(j).enabled = false
boutons(i)(j).disabledIcon = new ImageIcon(getClass.getResource("case_mine.png"))
}
}
}
true
}
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"))
boutons(x)(y).enabled = false
boutons(x)(y).chgLibre
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_zero.png"))
c_restantes -= 1
propage(0,x,y)
false
case 1 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_un.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_un.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(1,x,y)
false
case 2 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_deux.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_deux.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(2,x,y)
false
case 3 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_trois.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_trois.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(3,x,y)
false
case 4 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_quatre.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_quatre.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(4,x,y)
false
case 5 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_cinq.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_cinq.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(5,x,y)
false
case 6 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_six.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_six.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(6,x,y)
false
case 7 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_sept.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_sept.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(7,x,y)
false
case 8 => boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_huit.png"))
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_huit.png"))
boutons(x)(y).chgLibre
c_restantes -= 1
propage(8,x,y)
false
case 9 => for (i <- 0 to (tailleX-1)) {
for (j <- 0 to (tailleY-1)) {
if (boutons(i)(j).mines) {
boutons(x)(y).chgLibre
boutons(i)(j).icon = new ImageIcon(getClass.getResource("case_mine.png"))
boutons(i)(j).enabled = false
boutons(i)(j).disabledIcon = new ImageIcon(getClass.getResource("case_mine.png"))
}
}
}
true
}
} else {// Cases déjà dévoilée, on dévoile le tour
devoile(x,y)
}
}
// Affichage des drapeaux
......@@ -288,16 +284,18 @@ class Demineur {
if (boutons(x)(y).enabled == true) {
boutons(x)(y).icon = new ImageIcon(getClass.getResource("case_drapeau.png"))
boutons(x)(y).enabled = false
boutons(x)(y).compteur_spe = true
boutons(x)(y).chgLibre
boutons(x)(y).chgDrapeau
boutons(x)(y).disabledIcon = new ImageIcon(getClass.getResource("case_drapeau.png"))
if (champ(x)(y) == 9) { m_trouvees += 1 } else { m_trouvees -= 1 }
if (boutons(x)(y).mines) { m_trouvees += 1 } else { m_trouvees -= 1 }
}
else {
if (boutons(x)(y).compteur_spe) {
if (boutons(x)(y).possedeDrapeau) {
boutons(x)(y).icon = scala.swing.Swing.EmptyIcon
boutons(x)(y).enabled = true
boutons(x)(y).compteur_spe = false
if (champ(x)(y) == 9) { m_trouvees -= 1 } else { m_trouvees += 1 }
boutons(x)(y).chgLibre
boutons(x)(y).chgDrapeau
if (boutons(x)(y).mines) { m_trouvees -= 1 } else { m_trouvees += 1 }
}
}
}
......
......@@ -6,8 +6,26 @@ class MonBouton(protected var x : Int, protected var y : Int) extends Button {
preferredSize = new Dimension(50, 50)
borderPainted = true
private var contenu = 0 // 0-8 nbre mines, 9 mine
private var libre = true //case sans rien
private var drapeau = false
def getTheX = x
def getTheY = y
var compteur_spe = false
def estLibre = libre
def chgLibre = libre = !libre
def possedeDrapeau = drapeau
def chgDrapeau = drapeau = !drapeau
def setContenu(n:Int) = contenu = n
def getContenu = contenu
def incrContenu = contenu += 1
def mines = contenu == 9
def reset =
libre = true
drapeau = false
}
......@@ -9,15 +9,6 @@ object CercleInvocation extends SimpleSwingApplication {
// Valeurs et variables.
private var jeu = new Demineur
private var bts = jeu.getBoutons
private var tx = jeu.getTailleX
private var ty = jeu.getTailleY
// Renouvellement des variables
private def renewbts = bts = jeu.getBoutons
private def renewtx = tx = jeu.getTailleX
private def renewty = ty = jeu.getTailleY
// Convertisseur sécurisé
private def string_to_int (s: String) = {
try {
......@@ -68,37 +59,39 @@ object CercleInvocation extends SimpleSwingApplication {
jeu.reparametrage(li,co,nm)
}
jeu.initialise
renewbts
renewtx
renewty
contents = genContents
listen
}
// Activation des surveillances de boutons.
private def listen =
for (i <- 0 to (tx-1)) {
for (j <- 0 to (ty-1)) {
listenTo(bts(i)(j))
listenTo(bts(i)(j).mouse.clicks)
for (i <- 0 to (jeu.getTailleX-1)) {
for (j <- 0 to (jeu.getTailleY-1)) {
listenTo(jeu.getBoutons(i,j))
listenTo(jeu.getBoutons(i,j).mouse.clicks)
}
}
// Genesation de la grille
private def genContents =
new GridPanel(tx,ty) {
for (i <- 0 to (tx-1)) {
for (j <- 0 to (ty-1)) {
contents += bts(i)(j)
new GridPanel(jeu.getTailleX,jeu.getTailleY) {
for (i <- 0 to (jeu.getTailleX-1)) {
for (j <- 0 to (jeu.getTailleY-1)) {
contents += jeu.getBoutons(i,j)
}
}
}
// Redémarrage du jeu
private def redemarrage = {
jeu.creation_boutons
for (i <- 0 to (jeu.getTailleX-1)) {
for (j <- 0 to (jeu.getTailleY-1)) {
jeu.getBoutons(i,j).reset
jeu.getBoutons(i,j).icon = scala.swing.Swing.EmptyIcon
jeu.getBoutons(i,j).enabled = true
}
}
jeu.resetPremierCoup
renewbts
contents = genContents
listen
}
......@@ -141,9 +134,6 @@ object CercleInvocation extends SimpleSwingApplication {
jeu.reparametrage(li,co,nm)
}
jeu.initialise(string_to_int(s))
renewbts
renewtx
renewty
contents = genContents
listen
case None =>
......@@ -206,13 +196,6 @@ object CercleInvocation extends SimpleSwingApplication {
new_game
}
}
// if (e.peer.getButton() == java.awt.event.MouseEvent.BUTTON1){
// if (jeu.devoile(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)) {
// Dialog.showMessage(contents.head, "Désolé, vous avez perdu !", "Boum !!!",
// Dialog.Message.Info, new ImageIcon(getClass.getResource("case_mine.png")))
// redemarrage
// }
// }
}
}
......
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