O artigo dessa semana é só para podermos descontrair um pouco, mas sem sair do foco do blog, portanto mostro como estender as características de um componente nativo [nesse caso um label], com novos métodos e características.

Escolhi o Jogo da Velha [Tic Tac Toe], pois é um jogo muito simples e divertido, nesse exemplo mostro como utilizar o teclado e o mouse para jogar.

Espero que gostem.


Fazer o download dos arquivos:

[C#] Jogo da Velha


Segue o código:

[sections] [section title=”Código Fonte C#”]

using System;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Windows.Forms;

namespace Jogo_da_Velha
{
public partial class Form1 : Form
{
private Int16 _empates;
private bool _vez;

private Int16 _vitorias0;
private Int16 _vitoriasX;

public Form1()
{
InitializeComponent();
}

public string AssemblyTitle
{
get
{
object[] attributes =
Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (AssemblyTitleAttribute), false);
if (attributes.Length > 0)
{
var titleAttribute = (AssemblyTitleAttribute) attributes[0];
if (titleAttribute.Title != "")
{
return titleAttribute.Title;
}
}
return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}

public string AssemblyVersion
{
get { return Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
}

private void TstClick(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Left:
if (((LabelExtend) (sender)).Text.Length == 0)
{
((LabelExtend) (sender)).Text = (_vez ? "X" : "0");
((LabelExtend) (sender)).BorderStyle = BorderStyle.Fixed3D;
_vez = !_vez;
foreach (object x in groupBox1.Controls)
{
if (x.GetType().ToString().Contains("Label"))
{
((LabelExtend) (x)).Vez = _vez;
}
}
label16.Text = (_vez ? "X" : "0");
label16.BackColor = (_vez ? Color.LightBlue : Color.LightGreen);
label16.ForeColor = (_vez ? Color.DarkBlue : Color.DarkGreen);
Verifica_Jogo();
}
break;
}
}

private void Verifica_Jogo()
{
if (((label1.Text == label2.Text) && (label2.Text == label3.Text) && (label1.Text != "") &&
(label2.Text != "") && (label3.Text != "")) ||
((label4.Text == label5.Text) && (label5.Text == label6.Text) && (label4.Text != "") &&
(label5.Text != "") && (label6.Text != "")) ||
((label7.Text == label8.Text) && (label8.Text == label9.Text) && (label7.Text != "") &&
(label8.Text != "") && (label9.Text != "")) ||
((label1.Text == label5.Text) && (label5.Text == label9.Text) && (label1.Text != "") &&
(label5.Text != "") && (label9.Text != "")) ||
((label3.Text == label5.Text) && (label5.Text == label7.Text) && (label3.Text != "") &&
(label5.Text != "") && (label7.Text != "")) ||
((label1.Text == label4.Text) && (label4.Text == label7.Text) && (label1.Text != "") &&
(label4.Text != "") && (label7.Text != "")) ||
((label2.Text == label5.Text) && (label5.Text == label8.Text) && (label2.Text != "") &&
(label5.Text != "") && (label8.Text != "")) ||
((label3.Text == label6.Text) && (label6.Text == label9.Text) && (label3.Text != "") &&
(label6.Text != "") && (label9.Text != "")))
{
MessageBox.Show("Você Ganhou: " + (_vez == false ? "X" : "0"), "Ganhou!!!", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);

if (_vez)
{
_vitorias0++;
}
else
{
_vitoriasX++;
}
// limpa a tela
Limpa_Tela();
}
else if ((label1.Text != "") &&
(label2.Text != "") &&
(label3.Text != "") &&
(label4.Text != "") &&
(label5.Text != "") &&
(label6.Text != "") &&
(label7.Text != "") &&
(label8.Text != "") &&
(label9.Text != ""))
{
MessageBox.Show("Empatou ", "Empate!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
_empates++;
// limpa a tela
Limpa_Tela();
}
}

private void Limpa_Tela()
{
foreach (object x in groupBox1.Controls)
{
if (x.GetType().ToString().Contains("Label"))
{
((LabelExtend) (x)).ResetText();
((LabelExtend) (x)).BackColor = Color.White;
((LabelExtend) (x)).BorderStyle = BorderStyle.FixedSingle;
}
}
label12.Text = _vitoriasX.ToString("00#");
label13.Text = _vitorias0.ToString("00#");
label14.Text = _empates.ToString("00#");
groupBox1.Text = "Jogo: " + (_vitoriasX + _vitorias0 + _empates + 1).ToString("000#");
label16.Text = (_vez ? "X" : "0");
label16.BackColor = (_vez ? Color.LightBlue : Color.LightGreen);
label16.ForeColor = (_vez ? Color.DarkBlue : Color.DarkGreen);
}

private void Form1_Load(object sender, EventArgs e)
{
Text = AssemblyTitle + " – Versão: " + AssemblyVersion;
// limpa a tela
Limpa_Tela();
}

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
foreach (object x in groupBox1.Controls)
{
if (x.GetType().ToString().Contains("Label"))
{
if (((LabelExtend) (x)).BorderStyle != BorderStyle.Fixed3D)
{
if (((LabelExtend) (x)).Key(char.ToUpper(e.KeyChar)))
{
((LabelExtend) (x)).Text = (_vez ? "X" : "0");
((LabelExtend) (x)).BorderStyle = BorderStyle.Fixed3D;
((LabelExtend) (x)).BackColor = (_vez ? Color.LightBlue : Color.LightGreen);
((LabelExtend) (x)).ForeColor = (_vez ? Color.DarkBlue : Color.DarkGreen);
_vez = !_vez;
foreach (object y in groupBox1.Controls)
{
if (y.GetType().ToString().Contains("Label"))
{
((LabelExtend) (y)).Vez = _vez;
}
}
label16.Text = (_vez ? "X" : "0");
label16.BackColor = (_vez ? Color.LightBlue : Color.LightGreen);
label16.ForeColor = (_vez ? Color.DarkBlue : Color.DarkGreen);
Verifica_Jogo();
return;
}
}
}
}
}
}

internal class LabelExtend : Label
{
private Char _teclaO;
private Char _teclaX;

public LabelExtend()
{
TeclaO = ‘A’;
TeclaX = ‘X’;
MostraTecla = false;
}

public Char TeclaX
{
get { return _teclaX; }
set { _teclaX = char.ToUpper(value); }
}

public Char TeclaO
{
get { return _teclaO; }
set { _teclaO = char.ToUpper(value); }
}

public bool MostraTecla { get; set; }
public bool Vez { get; set; }

protected override void OnPaint(PaintEventArgs e)
{
if (MostraTecla)
{
e.Graphics.DrawString(TeclaX.ToString(CultureInfo.InvariantCulture),
new Font("Arial", 10, FontStyle.Bold), new SolidBrush(Color.Blue), new PointF(0, 0));
e.Graphics.DrawString(TeclaO.ToString(CultureInfo.InvariantCulture),
new Font("Arial", 10, FontStyle.Bold), new SolidBrush(Color.Green),
new PointF(Height – 15, Width – 20));
}
base.OnPaint(e);
}

protected override void OnMouseLeave(EventArgs e)
{
if (Text.Length == 0)
BackColor = Color.White;
base.OnMouseLeave(e);
}

protected override void OnMouseEnter(EventArgs e)
{
if (Text.Length == 0)
{
BackColor = (Vez ? Color.LightBlue : Color.LightGreen);
ForeColor = (Vez ? Color.DarkBlue : Color.DarkGreen);
}
base.OnMouseEnter(e);
}

public bool Key(Char key)
{
return (key.CompareTo(Vez ? TeclaX : TeclaO) == 0);
}
}
}

[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Jogo da Velha
Tags:                                     

Deixe uma resposta

%d blogueiros gostam disto: