//classe Puissance4 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Puissance4 { public partial class Puissance4 : Form { public static int TAILLE_JETON=50; private Grille g; private Jeton nouveauJeton; private Jeton jetonMove; private Timer descente; private Color couleurCourante; private bool etat; public Puissance4() { InitializeComponent(); this.g = new Grille(65,70); etat=false; descente = new Timer(); } protected override void OnPaint(PaintEventArgs e) { if (etat == false) ecran.Text = ("C'est aux jaunes de jouer ..."); else ecran.Text = ("C'est aux rouges de jouer ..."); base.OnPaint(e); if (nouveauJeton != null) { this.nouveauJeton.dessiner(e.Graphics); base.OnPaint(e); } else base.OnPaint(e); this.g.dessiner(e.Graphics); if (jetonMove != null) this.jetonMove.dessiner(e.Graphics); } private void Quitter_Click(object sender, EventArgs e) { if (MessageBox.Show("Souhaitez-vous vraiment quitter le jeu ?", "Quitter", MessageBoxButtons.OKCancel) == DialogResult.OK) Close(); } private void Rejouer_Click(object sender, EventArgs e) { InitializeComponent(); this.g = new Grille(65, 70); etat = false; descente = new Timer(); } private Point emplacement_to_coordonnees(Point empl) { if ((empl.X <= 415 && empl.X >= 65) && (empl.Y <= 370 && empl.Y >= 70)) { empl.X = (empl.X - 65) / TAILLE_JETON; empl.Y = (empl.Y - 70) / TAILLE_JETON; } else { empl.X=-1; empl.Y=-1; } return empl; } private Point click_to_depart(Point click) { if ((click.X <= 415 && click.X >= 65) && (click.Y <= 370 && click.Y >= 70)) { int i = (click.X - 65) / TAILLE_JETON; switch (i) { case 0: click.X = 65; break; case 1: click.X = 115; break; case 2: click.X = 165; break; case 3: click.X = 215; break; case 4: click.X = 265; break; case 5: click.X = 315; break; case 6: click.X = 365; break; } click.Y = 70; } else { click.X = -1; click.Y = -1; } return click; } private bool case_Suivante(Jeton jeton) { Point empl; empl = emplacement_to_coordonnees(jeton.Emplacement); if (empl.Y == 5) return false; if (g.get_jeton(empl.X,empl.Y + 1) == null) return true; else return false; } private void descente_Tick(object sender, EventArgs e) { Point empl; if ((nouveauJeton.Emplacement.Y - 70) % 50 == 0) { if (case_Suivante(nouveauJeton)) { empl = nouveauJeton.Emplacement; empl.Y += 10; nouveauJeton.Emplacement = empl; } else { empl = emplacement_to_coordonnees(nouveauJeton.Emplacement); g.set_jetons(nouveauJeton, empl.X, empl.Y); descente.Stop(); } } else { empl = nouveauJeton.Emplacement; empl.Y += 10; nouveauJeton.Emplacement = empl; } } private void click_jeton(object sender, MouseEventArgs e) { Point click = new Point(e.X, e.Y); click = click_to_depart(click); if (click.X != -1) { if (etat) { couleurCourante = Color.Red; etat = false; } else { couleurCourante = Color.Yellow; etat = true; } descente.Start(); nouveauJeton = new Jeton(couleurCourante, click); descente.Tick += new EventHandler(descente_Tick); } } private void move_jeton(object sender, MouseEventArgs e) { Point empl = new Point(); empl.X = e.X; empl.Y = e.Y; empl = click_to_depart(empl); empl.Y -= TAILLE_JETON; if (couleurCourante == Color.Yellow) jetonMove = new Jeton(Color.Red, empl); else jetonMove = new Jeton(Color.Yellow, empl); } } } //classe jeton using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; namespace Puissance4 { class Jeton { private Point emplacement; private Color couleur; public Point Emplacement { get { return this.emplacement; } set { this.emplacement = value; } } public Color Couleur { get { return this.couleur; } set { this.couleur = value; } } public Jeton() { couleur = Color.Red; emplacement = new Point(65,70); } public Jeton(Color c, Point e) { couleur = c; emplacement = e; } public void dessiner(Graphics g) { Brush pinceau; pinceau = new SolidBrush(couleur); Rectangle rect; rect = new Rectangle(emplacement.X, emplacement.Y, Puissance4.TAILLE_JETON - 4, Puissance4.TAILLE_JETON - 4); //rect.Height = Puissance4.TAILLE_JETON; //rect.Width = Puissance4.TAILLE_JETON; //rect.Location = emplacement; Pen stylo = new Pen(couleur, 3); g.DrawEllipse(stylo, rect); g.FillEllipse(pinceau, rect); } } } // classe grille using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; namespace Puissance4 { class Grille { private Jeton[][] jetons; private Point emplacement; public Grille(int x, int y) { jetons = new Jeton[7][]; for (int j = 0; j <= 6; j++) { jetons[j] = new Jeton[6]; } for (int i = 0; i <= 6; i++) { for (int j = 0; j <= 5; j++) { jetons[i][j] = null; } } emplacement.X = x; emplacement.Y = y; } public Jeton get_jeton(int i, int j) { return jetons[i][j]; } public void set_jetons(Jeton jeton, int i, int j) { jetons[i][j] = jeton; } public Point get_emp() { return emplacement; } public void set_emp(int x, int y) { emplacement.X = x; emplacement.Y = y; } public void dessiner(Graphics g) { Pen stylo = new Pen(Color.Black, 3); //emplacement.X = x; //emplacement.Y = y; for (int j = 0; j <= 6; j++) { Point[] point = { new Point(emplacement.X, emplacement.Y + j*Puissance4.TAILLE_JETON), new Point(emplacement.X + 7*Puissance4.TAILLE_JETON, emplacement.Y + j*Puissance4.TAILLE_JETON) }; g.DrawLines(stylo, point); } for (int i = 0; i <= 7; i++) { Point[] point = { new Point(emplacement.X + i*Puissance4.TAILLE_JETON, emplacement.Y), new Point(emplacement.X + i*Puissance4.TAILLE_JETON, emplacement.Y + 6*Puissance4.TAILLE_JETON) }; g.DrawLines(stylo, point); } for (int i = 0; i <= 6; i++) { for (int j = 0; j <= 5; j++) { if (jetons[i][j] != null) { jetons[i][j].dessiner(g); } } } } } }