Voyez par vous-même, on se croirait en plein dans le démineur de XP avec certaines petites personnalisations. De toute façon, vous allez vous régaler
Source / Exemple :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace mines
{
public partial class Form1 : Form
{
Panel panel;
public int temps;
public int Lignes;
public int Colonnes;
int gauche = 0;
int haut = 50;
Button[,] Mineurs;
public string[] Mines;
int[] Mines1;
Panel[,] vide;
int NbreCaseRestant;
string le_Focus_Actuel;
Options l_option;
int minesDecouvertes = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
panel = new Panel();
AfficherMines(9, 9, 10);
MinesAleatoire(10, 81);
l_option = new Options(this);
l_option.Hide();
}
public void AfficherMinesOptions(int nbreLignes, int nbreColonnes, int nbreMines, Options Option_Ouverte)
{
Option_Ouverte.Close();
AfficherMines(nbreLignes, nbreColonnes, nbreMines);
MinesAleatoire(nbreMines, nbreLignes * nbreColonnes);
}
public void AfficherMines(int nbreLignes, int nbreColonnes, int nbreMines)
{
timerDecouvrirMines.Enabled = false;
minesDecouvertes = 0;
temps = 1;
NbreCaseRestant = nbreColonnes * nbreLignes;
nbreMinesAffich.Text = nbreMines.ToString();
TempsAffich.Text = "0";
TimerTemps.Enabled = false;
gauche = 0;
haut = 110;
panel.Dispose();
panel = new Panel();
panel.Parent = this;
panel.Dock = DockStyle.Fill;
Lignes = nbreLignes;
Colonnes = nbreColonnes;
Mineurs = new Button[nbreColonnes, nbreLignes];
vide = new Panel[nbreColonnes, nbreLignes];
for (int j = 0; j < nbreLignes; j++)
{
gauche = 0;
for (int i = 0; i < nbreColonnes; i++)
{
vide[i, j] = new Panel();
Mineurs[i, j] = new Button();
((Button)Mineurs[i, j]).Tag = valeurTag(i, j);
vide[i, j].Parent = Mineurs[i, j].Parent = this.panel;
vide[i, j].Height = Mineurs[i, j].Height = 25;
vide[i, j].Width = Mineurs[i, j].Width = 25;
vide[i, j].Left = Mineurs[i, j].Left = gauche;
vide[i, j].Top = Mineurs[i, j].Top = haut;
gauche += Mineurs[i, j].Width;
Mineurs[i, j].Show();
((Button)Mineurs[i, j]).ContextMenuStrip = cms;
((Button)Mineurs[i, j]).Image = mines.Properties.Resources.videMouseNormal;
((Button)Mineurs[i, j]).Image.Tag = 0;
((Button)Mineurs[i, j]).Click += new EventHandler(Bouton_Click);
((Button)Mineurs[i, j]).MouseHover += new EventHandler(Bouton_MouseHover);
((Button)Mineurs[i, j]).MouseDown += new MouseEventHandler(Bouton_MouseDown);
((Button)Mineurs[i, j]).MouseUp += new MouseEventHandler(Bouton_MouseUp);
}
haut += 25;
}
this.Height = 162 + nbreLignes * 25;
this.Width = 10 + nbreColonnes * 25;
JrImage.Left = (this.Width / 2) - (JrImage.Width / 2);
JrImage.Image = mines.Properties.Resources.jrNormal;
JrImage.Tag = "jrNormal";
timerPerdu.Enabled = false;
}
void Bouton_MouseUp(object sender, MouseEventArgs e)
{
JrImage.Image = mines.Properties.Resources.jrNormal;
}
void Bouton_MouseDown(object sender, MouseEventArgs e)
{
JrImage.Image = mines.Properties.Resources.JrEtonné;
JrImage.Tag = "jrEtonné";
}
void Bouton_MouseHover(object sender, EventArgs e)
{
le_Focus_Actuel = ((Button)sender).Tag.ToString();
}
void Bouton_Click(object sender, EventArgs e)
{
if (((Button)sender).Image.Tag.ToString() != "1")
{
if (TempsAffich.Text == "0")
{
TempsAffich.Text = "1";
TimerTemps.Enabled = true;
}
bool EstMine = false;
string Tag = ((Button)sender).Tag.ToString();
int abs = int.Parse(((Button)sender).Tag.ToString().Substring(0, 2));
int ord = int.Parse(((Button)sender).Tag.ToString().Substring(2, 2));
foreach (string valeur in Mines)
{
if (valeur == Tag)
{
EstMine = true;
break;
}
}
if (EstMine)
{
TimerTemps.Enabled = false;
JrImage.Image = mines.Properties.Resources.jrDecu;
JrImage.Tag = "jrDecu";
timerPerdu.Enabled = true;
timerDecouvrirMines.Enabled = true;
DecouvrirMines();
Perdu nouveau = new Perdu(this);
nouveau.ShowDialog();
}
else
{
((Button)sender).Hide();
NbreCaseRestant--;
Deminer(abs, ord);
if (NbreCaseRestant == Mines.Length)
{
TimerTemps.Enabled = false;
JrImage.Image = mines.Properties.Resources.jrWin1;
JrImage.Tag = "jrWin1";
gagne leNouveau = new gagne(this);
leNouveau.ShowDialog();
}
}
}
}
void DecouvrirMines()
{
foreach (string valeur in Mines)
{
}
}
private void Deminer(int abs, int ord)
{
Panel lePanel = (Panel)vide[abs, ord];
int AbsBorneInf, AbsBorneSup, OrdBorneInf, OrdBorneSup;
if (abs == 0)
AbsBorneInf = abs;
else
AbsBorneInf = abs - 1;
if (abs == Colonnes - 1)
AbsBorneSup = abs;
else
AbsBorneSup = abs + 1;
if (ord == 0)
OrdBorneInf = ord;
else
OrdBorneInf = ord - 1;
if (ord == Lignes - 1)
OrdBorneSup = ord;
else
OrdBorneSup = ord + 1;
int nbreMines = 0;
lePanel.Show();
for (int i = AbsBorneInf; i <= AbsBorneSup; i++)
{
for (int j = OrdBorneInf; j <= OrdBorneSup; j++)
{
if (valeurTag(i, j) != ((Button)Mineurs[abs, ord]).Tag.ToString())
{
foreach (string value in Mines)
{
if (((Button)Mineurs[i, j]).Tag.ToString() == value)
nbreMines++;
}
}
}
}
Label numMine = new Label();
numMine.BackColor = Color.Beige;
numMine.BorderStyle = BorderStyle.Fixed3D;
numMine.Parent = lePanel;
numMine.Dock = DockStyle.Fill;
if (nbreMines != 0)
{
numMine.TextAlign = ContentAlignment.MiddleCenter;
numMine.Font = new Font("Arial", 13);
numMine.Text = nbreMines + "";
#region switch couleur
switch (nbreMines)
{
case 1:
numMine.ForeColor = Color.Blue;
break;
case 2:
numMine.ForeColor = Color.Green;
break;
case 3:
numMine.ForeColor = Color.SkyBlue;
break;
case 4:
numMine.ForeColor = Color.Tomato;
break;
case 5:
numMine.ForeColor = Color.Orange;
break;
case 6:
numMine.ForeColor = Color.OrangeRed;
break;
case 7:
numMine.ForeColor = Color.Red;
break;
default:
numMine.ForeColor = Color.Violet;
break;
}
#endregion
}
else
RecursifVide(abs, ord, AbsBorneInf, AbsBorneSup, OrdBorneInf, OrdBorneSup);
}
string valeurTag(int i, int j)
{
string valeurTag;
if (i >= 10)
valeurTag = "" + i;
else
valeurTag = "0" + i;
if (j >= 10)
valeurTag += j;
else
valeurTag += "0" + j;
return valeurTag;
}
void RecursifVide(int abscisse, int ordonnee, int a, int b, int c, int d)
{
for (int i = a; i <= b; i++)
{
for (int j = c; j <= d; j++)
{
if (valeurTag(i, j) != ((Button)Mineurs[abscisse, ordonnee]).Tag.ToString())
{
if (((Button)Mineurs[i, j]).Visible)
{
((Button)Mineurs[i, j]).Hide();
NbreCaseRestant--;
Deminer(i, j);
}
}
}
}
}
void Conversion(int taille)
{
double valeurEntiere;
int abs;
int ord;
for (int i = 0; i < taille; i++)
{
if ((Mines1[i] % Colonnes) == 0)
{
valeurEntiere = Mines1[i] / Colonnes;
ord = int.Parse(Math.Floor(valeurEntiere) + "") - 1;
abs = Colonnes - 1;
}
else
{
valeurEntiere = Mines1[i] / Colonnes;
ord = int.Parse(Math.Floor(valeurEntiere) + "");
abs = (Mines1[i] % Colonnes) - 1;
}
Mines[i] =
valeurTag(abs, ord);
}
}
public void MinesAleatoire(int nbreMines, int nbreCases)
{
bool EstTrouve;
int indice = 0;
Mines1 = new int[nbreMines];
Mines = new string[nbreMines];
Random Alea = new Random();
int valeurTest;
do
{
EstTrouve = false;
valeurTest = Alea.Next(1, nbreCases + 1);
foreach (int valeur in Mines1)
{
if (valeur == valeurTest)
{
EstTrouve = true;
break;
}
}
if (!EstTrouve)
{
Mines1[indice] = valeurTest;
indice++;
}
}
while (indice < nbreMines);
Conversion(nbreMines);
}
int BaseMineEnBaseDix(int abscisse, int ordonnee)
{
return (ordonnee * Colonnes) + abscisse + 1;
}
private void optionsToolStripMenuItem1_Click(object sender, EventArgs e)
{
l_option.ShowDialog();
}
private void TimerTemps_Tick(object sender, EventArgs e)
{
temps++;
if (TempsAffich.Text != "999")
TempsAffich.Text = ((int.Parse(TempsAffich.Text)) + 1).ToString();
else
TimerTemps.Enabled = false;
}
private void cms_Opening(object sender, CancelEventArgs e)
{
int abs = int.Parse(le_Focus_Actuel.Substring(0, 2));
int ord = int.Parse(le_Focus_Actuel.Substring(2, 2));
cms.Close();
if (((Button)Mineurs[abs, ord]).Image.Tag.ToString() == "0")
{
((Button)Mineurs[abs, ord]).Image = mines.Properties.Resources.DrapeauNormal;
((Button)Mineurs[abs, ord]).Image.Tag = 1;
nbreMinesAffich.Text = (int.Parse(nbreMinesAffich.Text) - 1) + "";
}
else if (((Button)Mineurs[abs, ord]).Image.Tag.ToString() == "1")
{
((Button)Mineurs[abs, ord]).Image = mines.Properties.Resources.QuestionNormal;
((Button)Mineurs[abs, ord]).Image.Tag = 2;
nbreMinesAffich.Text = (int.Parse(nbreMinesAffich.Text) + 1) + "";
}
else
{
((Button)Mineurs[abs, ord]).Image = mines.Properties.Resources.videMouseNormal;
((Button)Mineurs[abs, ord]).Image.Tag = 0;
}
}
private void newMenu_Click(object sender, EventArgs e)
{
AfficherMines(Lignes, Colonnes, Mines.Length);
MinesAleatoire(Mines.Length, Lignes * Colonnes);
}
private void quitter_Click(object sender, EventArgs e)
{
this.Close();
}
private void nouveauToolStripMenuItem_Click(object sender, EventArgs e)
{
TimerTemps.Enabled = false;
if (MessageBox.Show("Voulez-vous quitter la partie ?", "Attention", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
AfficherMines(Lignes, Colonnes, Mines.Length);
MinesAleatoire(Mines.Length, Lignes * Colonnes);
}
else
{
TimerTemps.Enabled = true;
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
}
private void menuTSOptions_Click(object sender, EventArgs e)
{
new Options(this).ShowDialog();
}
private void timerPerdu_Tick(object sender, EventArgs e)
{
if(JrImage.Tag.ToString()=="jrDecu")
{
JrImage.Image = mines.Properties.Resources.jrDecu2;
JrImage.Tag = "jrDecu2";
}
else
{
JrImage.Image = mines.Properties.Resources.jrDecu;
JrImage.Tag = "jrDecu";
}
}
private void timerDecouvrirMines_Tick(object sender, EventArgs e)
{
if (minesDecouvertes < Mines.Length)
{
int abs = int.Parse(Mines[minesDecouvertes].Substring(0, 2));
int ord = int.Parse(Mines[minesDecouvertes].Substring(2, 2));
((Button)Mineurs[abs, ord]).Image = mines.Properties.Resources.Mines;
minesDecouvertes++;
}
else
timerDecouvrirMines.Enabled = false;
}
private void menuTSQuitter_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Voulez-vous vraiment quitter le jeu ?", "Avertissement", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Application.Exit();
}
}
}
}
Conclusion :
Le reste dans le fichier joint
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.