Commit 35ac5cdb authored by William Babonnaud's avatar William Babonnaud

Fenêtre de personnalisation + détails (valeurs par défaut, dévoilement démineur)

parent 16ad1137
......@@ -4,15 +4,17 @@ import javax.swing.ImageIcon
import scala.math._
class Demineur extends Jeu[MonBouton] {
// Taille du champ de mine. Par défaut, réglé en "Facile".
tailleX = 9
tailleY = 9
valeur_defaut = Array(9,9,10)
// Propage le clic pour le premier coup après non
private var premierCoup = true
// Taille du champ de mine. Par défaut, réglé en "Facile".
tailleX = valeur_defaut(0)
tailleY = valeur_defaut(1)
// Nombre de mines dans le champ. Réglé en "Facile"
private var nb_mines = 10
private var nb_mines = valeur_defaut(2)
// Propage le clic pour le premier coup après non
private var premierCoup = true
// Compteur du nombre de mines trouvées.
private var m_trouvees = 0
......@@ -20,8 +22,6 @@ class Demineur extends Jeu[MonBouton] {
// Compteur du nombre de cases restantes.
private var c_restantes = {tailleX*tailleY - nb_mines}
// Détermine si on a gagné.
def victoire() = {(nb_mines == m_trouvees) || c_restantes == 0}
......@@ -137,11 +137,19 @@ class Demineur extends Jeu[MonBouton] {
def devoile (x: Int, y: Int) = {
var perdu = false
var voisin = voisinEtendu(x,y):::(Nil)
for((vx,vy) <- voisin){
if(boutons(vx)(vy).estLibre){perdu = perdu || clique_action_gauche(vx,vy)}}
perdu
// Si une mine autour n'a pas été trouvée, on n'autorise pas le dévoilement.
/* for((vx,vy) <- voisin) {
if (boutons(vx)(vy).mines && !boutons(vx)(vy).possedeDrapeau) {
perdu = true
}
} */
if (perdu) { false } else {
for((vx,vy) <- voisin){
if(boutons(vx)(vy).estLibre){perdu = perdu || clique_action_gauche(vx,vy)}}
perdu
}
}
// Définit les conséquences d'un clic sur un bouton.
......
......@@ -3,9 +3,11 @@ import Array._
import java.awt.Color
class Flip extends Jeu[MonBouton] {
valeur_defaut = Array(5,5)
// Cotés du terrain.
tailleX = 5
tailleY = 5
tailleX = valeur_defaut(0)
tailleY = valeur_defaut(1)
// Matrice des boutons.
override protected var boutons = ofDim[MonBouton](tailleX,tailleY)
......
......@@ -9,6 +9,9 @@ abstract class Jeu[T<:Button] {
protected var tailleX : Int = 9
protected var tailleY : Int = 9
protected var boutons : Array[Array[T]]
// Tableaux des valeurs de base des paramètres
protected var valeur_defaut = new Array[Int](0)
// Fonctions utilitaires
protected def map_init(f : (Int,Int) => T, a : Array[Array[T]]) = {
......@@ -52,6 +55,7 @@ abstract class Jeu[T<:Button] {
def getTailleX = tailleX
def getTailleY = tailleY
def getBoutons(x: Int,y: Int) = boutons(x)(y)
def getValeurDefaut(i: Int) = valeur_defaut(i)
// Fonctions obligatoires
def victoire() : Boolean
......
......@@ -6,6 +6,9 @@ import javax.swing.ImageIcon
object CercleInvocationTropMieux extends SimpleSwingApplication {
def top = new MainFrame { cela =>
// On empêche le redimensionnement
resizable = false
// Valeurs de choix de jeu :
// 1 : Démineur
// 2 : Flip
......@@ -37,7 +40,7 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
private val touslesjeux = new ButtonGroup(tt_dem, tt_fli, tt_unr)
touslesjeux.select(tt_unr)
// Base de crétaion de nouveau jeu
// Base de créaition de nouveau jeu
private def nouveau = {
choix_de_jeu match {
case 1 => jeu = new Demineur
......@@ -60,7 +63,7 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
}
case `but_per` =>
choix_de_jeu match {
case 1 => jeu.reparametrage(diff_fr.li,diff_fr.co,diff_fr.mn)
case 1 => jeu.reparametrage(diff_fr.li,diff_fr.co,diff_fr.aut)
case 2 => jeu.reparametrage(diff_fr.li,diff_fr.co)
case 3 => jeu.reparametrage(2*(diff_fr.li/2),2*(diff_fr.co/2))
}
......@@ -115,43 +118,62 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
}
}
object plop extends TextField { columns = 5 }
object bing extends TextField { columns = 5 }
object grao extends TextField { columns = 5 }
object text_ligne extends TextField { columns = 5 }
object text_colonne extends TextField { columns = 5 }
object text_autre extends TextField { columns = 5 }
def create_panel() = {
if (choix_de_jeu == 1) {
new GridPanel(3,2) {
contents += new Label("Nombre de lignes : ")
contents += text_ligne
contents += new Label(" Nombre de colonnes : ")
contents += text_colonne
contents += new Label("Nombre de mines : ")
contents += text_autre
border = Swing.EmptyBorder(10,20,10,20)
}
} else {
new GridPanel(2,2) {
contents += new Label("Nombre de lignes : ")
contents += text_ligne
contents += new Label(" Nombre de colonnes : ")
contents += text_colonne
border = Swing.EmptyBorder(10,20,10,20)
}
}
}
private var diff_fr = new Frame { ceci =>
title = "Difficulté personnalisée"
var li = 9
var co = 9
var mn = 10
def facile = { li = 9 ; co = 9 ; mn = 10 }
def moyen = { li = 16 ; co = 16 ; mn = 10 }
def difficile = { li = 16 ; co = 16 ; mn = 99 }
var li = 0
var co = 0
var aut = 0
contents = new BoxPanel(Orientation.Vertical) {
contents += new GridPanel(3,2) {
contents += new Label(" Nombre de lignes : ")
contents += plop
contents += new Label(" Nombre de colonnes : ")
contents += bing
contents += new Label(" Nombre de mines : ")
contents += grao
border = Swing.EmptyBorder(10,20,10,20)
}
contents += new FlowPanel {
contents += new Button(Action("Valider") {
cela.jeu = new Unruly
if (string_to_int(plop.text) > 0) { li = string_to_int(plop.text) }
if (string_to_int(bing.text) > 0) { co = string_to_int(bing.text) }
if (string_to_int(grao.text) > 0) { mn = string_to_int(grao.text) }
cela.jeu.reparametrage(li,co,mn)
cela.jeu.initialise
cela.contents = genContents
cela.listen
ceci.dispose()
})
val sortie = new FlowPanel {
contents += new Button(Action("Valider") {
if (string_to_int(text_ligne.text) > 0) { li = string_to_int(text_ligne.text) } else { li = cela.jeu.getValeurDefaut(0) }
if (string_to_int(text_colonne.text) > 0) { co = string_to_int(text_colonne.text) } else { co = cela.jeu.getValeurDefaut(1) }
if (cela.choix_de_jeu == 1) {
if (string_to_int(text_autre.text) > 0) { aut = string_to_int(text_autre.text) } else { aut = cela.jeu.getValeurDefaut(2) }
}
cela.choix_de_jeu match {
case 1 => cela.jeu = new Demineur ; cela.jeu.reparametrage(li,co,aut)
case 2 => cela.jeu = new Flip ; cela.jeu.reparametrage(li,co)
case 3 => cela.jeu = new Unruly ; cela.jeu.reparametrage(2*(li/2),2*(co/2))
}
cela.jeu.initialise
cela.contents = genContents
cela.listen
ceci.dispose()
})
}
def regenere = {
contents = new BoxPanel(Orientation.Vertical) {
contents += create_panel()
contents += sortie
}
}
}
......@@ -206,8 +228,10 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
// Réaction aux évènements.
reactions += {
case (e: MouseEvent) if (e.peer.getButton() == java.awt.event.MouseEvent.BUTTON1) =>
var i = (e.peer.getComponent.getY)/50
var j = (e.peer.getComponent.getX)/50
if (choix_de_jeu == 1) {
var bo = jeu.clique_action_gauche(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)
var bo = jeu.clique_action_gauche(i,j)
if (bo) {
Dialog.showMessage(contents.head, "Désolé, vous avez perdu !", "Boum !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("case_mine.png")))
......@@ -221,7 +245,7 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
}
}
if (choix_de_jeu == 2) {
var bo = jeu.clique_action_gauche(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)
var bo = jeu.clique_action_gauche(i,j)
if (jeu.victoire) {
Dialog.showMessage(contents.head, "Félicitations, vous avez gagné !", "Victoire !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("case_drapeau.png")))
......@@ -229,15 +253,17 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
}
}
if (choix_de_jeu == 3) {
if (jeu.clique_action_gauche(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)) {
if (jeu.clique_action_gauche(i,j)) {
Dialog.showMessage(contents.head, "Félicitations, vous avez gagné !", "Bravo !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("blanc_inchangeable.png")))
new_game
}
}
case (e: MouseEvent) if (e.peer.getButton() == java.awt.event.MouseEvent.BUTTON3) =>
var i = (e.peer.getComponent.getY)/50
var j = (e.peer.getComponent.getX)/50
if (choix_de_jeu == 1) {
var bo = jeu.clique_action_droit(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)
var bo = jeu.clique_action_droit(i,j)
if (bo) {
Dialog.showMessage(contents.head, "Félicitations, vous avez gagné !", "Victoire !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("case_drapeau.png")))
......@@ -245,14 +271,14 @@ object CercleInvocationTropMieux extends SimpleSwingApplication {
}
}
if (choix_de_jeu == 3) {
if (jeu.clique_action_droit(e.peer.getComponent.getY/50, e.peer.getComponent.getX/50)) {
if (jeu.clique_action_droit(i,j)) {
Dialog.showMessage(contents.head, "Félicitations, vous avez gagné !", "Bravo !!!",
Dialog.Message.Info, new ImageIcon(getClass.getResource("noir_inchangeable.png")))
new_game
}
}
case ButtonClicked(comp) if (comp == but_fac) || (comp == but_moy) || (comp == but_dur) => new_game
case ButtonClicked(comp) if comp == but_per => diff_fr.open
case ButtonClicked(comp) if comp == but_per => diff_fr.regenere ; diff_fr.open
case ButtonClicked(comp) if (comp == tt_dem) => choix_de_jeu = 1 ; new_game
case ButtonClicked(comp) if (comp == tt_fli) => choix_de_jeu = 2 ; new_game
case ButtonClicked(comp) if (comp == tt_unr) => choix_de_jeu = 3 ; new_game
......
......@@ -4,9 +4,11 @@ import java.awt.Color
import javax.swing.ImageIcon
class Unruly extends Jeu[MonBouton] {
valeur_defaut = Array(8,8)
// Cotés du terrain
tailleX = 8
tailleY = 8
tailleX = valeur_defaut(0)
tailleY = valeur_defaut(1)
private var nb_non_occupes = tailleX*tailleY
......
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