Sono nuovo sul forum e programmo da relativamente poco ,ho fatto un tris in visual studio con bottoni e pannelli , inizialmente ideato solo per due giocatori.Ho avuto la necessità di inserire anche il fattore cpu nel caso si cliccasse su un determinato bottone , ma non riesco a fare visualizzare il turno della CPU anche se non riesco a riscontare problemi nel mio codice(non mi interessa che sia intelligente , mi basta che inserisca il testo O nel bottone) . Riporto il codice del mio form1.cs : (Grazie in anticipo )
namespace Tris4._0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
/*viene utilizzato per aggiungere un gestore ad un evento (solo nel panel1) dove poi
chiamiamo la fuznione btn_click*/
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
c.Click += new System.EventHandler(btn_click);
}
}
}
// variabili che permettono di contare il turno e le vittore dei giocatori
string[] caselle = new string[9] { "button1", "button2", "button3", "button4", "button5", "button6", "button7", "button8", "button9" };
Random rnd = new Random();
bool turno = true;
int counter = 0;
int counter2 = 0;
int XeO = 0;
int giocatore = 2;
// Creaimo le azioni per i bottoni , prima controlliamo se siano vuoti
public void btn_click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if (btn.Text.Equals(""))
{
if (XeO % 2 == 0)
{
btn.Text = "X";
btn.ForeColor = Color.Blue;
label1.Text = "O turn ";
Vittoria();
turno = !turno;
}
else
{
btn.Text = "O";
btn.ForeColor = Color.White;
label1.Text = "X turn ";
Vittoria();
turno = !turno;
}
XeO++;
if (win == false && giocatore == 1)
{
CPU();
Vittoria();
}
win = false;
}
}
bool win = false;
/* Funzione che permette di trovare il vincitore, controlla con i valori sentinelli tutti i casi possibili
per la vittoria di un giocatore*/
public void Vittoria()
{
if (!button1.Text.Equals("") && button1.Text.Equals(button2.Text) && button1.Text.Equals(button3.Text))
{
Effetti(button1, button2, button3);
win = true;
}
if (!button4.Text.Equals("") && button4.Text.Equals(button5.Text) && button4.Text.Equals(button6.Text))
{
Effetti(button4, button5, button6);
win = true;
}
if (!button7.Text.Equals("") && button7.Text.Equals(button8.Text) && button7.Text.Equals(button9.Text))
{
Effetti(button7, button8, button9);
win = true;
}
if (!button1.Text.Equals("") && button1.Text.Equals(button4.Text) && button1.Text.Equals(button7.Text))
{
Effetti(button1, button4, button7);
win = true;
}
if (!button2.Text.Equals("") && button2.Text.Equals(button5.Text) && button2.Text.Equals(button8.Text))
{
Effetti(button2, button5, button8);
win = true;
}
if (!button3.Text.Equals("") && button3.Text.Equals(button6.Text) && button3.Text.Equals(button9.Text))
{
Effetti(button3, button6, button9);
win = true;
}
if (!button1.Text.Equals("") && button1.Text.Equals(button5.Text) && button1.Text.Equals(button9.Text))
{
Effetti(button1, button5, button9);
win = true;
}
if (!button3.Text.Equals("") && button3.Text.Equals(button5.Text) && button3.Text.Equals(button7.Text))
{
Effetti(button3, button5, button7);
win = true;
}
//contatore del punteggio
if (win == true)
{
if (XeO % 2 == 0)
{
counter++;
label3.Text = counter.ToString();
}
else
{
counter2++;
label5.Text = counter2.ToString();
}
//disattivare i bottoni (sul pannello 1) dopo essere sicuro che ci sia un vincitore
foreach (Control c in panel1.Controls)
{
panel1.Enabled = false;
}
}
//in caso di pareggio controlla se siano stati premuti tutti i bottoni e se la variabile è falsa
if (CounterTurni() == 9 && win == false)
{
label1.Text = "No Winner";
}
}
//Contatore dei turni per visualizzare la scritta corretta sulla label dei turni
public int CounterTurni()
{
int NTurni = 0;
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
NTurni += c.Text.Length;
}
}
return NTurni;
}
//Risaltare il vincitore e mostrare i messaggi
public void Effetti(Button b1, Button b2, Button b3)
{
b1.BackColor = Color.Green;
b2.BackColor = Color.Green;
b3.BackColor = Color.Green;
b1.ForeColor = Color.White;
b2.ForeColor = Color.White;
b3.ForeColor = Color.White;
label1.Text = b1.Text + " Win";
MessageBox.Show(b1.Text + " Win");
}
private void label2_Click(object sender, EventArgs e)
{
}
private void button10_Click(object sender, EventArgs e)
{
XeO = 0;
win = false;
label1.Text = "Play";
label3.Text = counter.ToString();
label5.Text = counter2.ToString();
panel1.Enabled = true;
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
c.Text = "";
c.BackColor = Color.Salmon;
}
}
}
private void CPU()
{
int i = rnd.Next(0, ; //indice per il bottone da premere per la cpu
foreach (Control c in Controls.OfType<Button>())
{
if (caselle == c.Name)
{
if (c.Enabled == true)
{
if (!turno)
{
c.Text = "O";
c.Enabled = false;
turno = !turno;
XeO++;
}
break;
}
else
{
CPU();
}
}
}
}
private void vsCPUToolStripMenuItem_Click(object sender, EventArgs e)
{
XeO = 0;
win = false;
label1.Text = "Play";
label3.Text = counter.ToString();
label5.Text = counter2.ToString();
panel1.Enabled = true;
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
c.Text = "";
c.BackColor = Color.Salmon;
}
}
giocatore = 1;
}
private void vsToolStripMenuItem_Click(object sender, EventArgs e)
{
XeO = 0;
win = false;
label1.Text = "Play";
label3.Text = counter.ToString();
label5.Text = counter2.ToString();
panel1.Enabled = true;
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
c.Text = "";
c.BackColor = Color.Salmon;
}
}
}
}
}