Вот хочу вам показать, как создать такую несложную игру на языке C#.
Для начала сделаем саму форму. Нам нужно: игровое поле(9 кнопок), кнопка "Start"(для рестарта игры), 3 текстовых поля( указатель хода, номер игры, счет игры). Вот у меня получилось то, что вы видите на скрине.
Переходим к самому коду. У нас будет 3 функции: Game() - главная, которая отвечает за хода в игре; who_vin() - объявляет победителя; refresch() - очищает игровое поле, начинает новую игру.
Сначала объявляем глобальные переменные в классе:
Функции готовы. Далее перейдем к командам, то есть нашему полю(кнопкам):
Ну и на последок функция которая работает сразу при старте программы:
private void Form1_Load(object sender, EventArgs e)
Вот сам исходник:
Скачать
Для начала сделаем саму форму. Нам нужно: игровое поле(9 кнопок), кнопка "Start"(для рестарта игры), 3 текстовых поля( указатель хода, номер игры, счет игры). Вот у меня получилось то, что вы видите на скрине.
Переходим к самому коду. У нас будет 3 функции: Game() - главная, которая отвечает за хода в игре; who_vin() - объявляет победителя; refresch() - очищает игровое поле, начинает новую игру.
Сначала объявляем глобальные переменные в классе:
Дальше переходим к самим функциям:public partial class Form1 : Form
{int i; //счетчик ходовint num_game = 0; // номер игрыint Ovin = 0; // количество побед Оint Xvin = 0; // количество побед Хstring[] arr = new string[10]; // массив, который хранит расположение Х и О на игровом полеstring t = "X"; // переменная которая показывает чей ход происходит}
public string Game(int j) // принимает номер клетки поля
{
string fakeT; // переменная следущего хода
if (i % 2 == 1) // узнает чей ход сделан (Х - непарный ход)
{
t = "X";
fakeT = "O";
}
else {
t = "O";
fakeT = "X";
}
fakeT = "Ходит " + fakeT;
arr[j] = t;
i += 1;
label1.Text = fakeT;// пишет кто следущий ходит
return t; // возвращает отметку на поле Х или О
}
public void who_vin()
{
if ((arr[1] == "X" & arr[2] == "X" & arr[3] == "X") | (arr[1] == "X" & arr[5] == "X" & arr[9] == "X") | (arr[1] == "X" & arr[4] == "X" & arr[7] == "X") | (arr[2] == "X" & arr[5] == "X" & arr[8] == "X") | (arr[3] == "X" & arr[6] == "X" & arr[9] == "X") | (arr[3] == "X" & arr[5] == "X" & arr[7] == "X") | (arr[4] == "X" & arr[5] == "X" & arr[6] == "X") | (arr[7] == "X" & arr[8] == "X" & arr[9] == "X"))
{ // за таких обстоятельств побеждает Х
Xvin += 1; // начисляем ему победу
label3.Text = "X : O\n" + Xvin.ToString() + " : " + Ovin.ToString(); // обновляем табло побед
MessageBox.Show(" X VIN!"); // выводим окошечко, которое говорит нам о победе
refresch();// чистим поле, начинаем новую игру
}
if ((arr[1] == "O" & arr[2] == "O" & arr[3] == "O") | (arr[1] == "O" & arr[5] == "O" & arr[9] == "O") | (arr[1] == "O" & arr[4] == "O" & arr[7] == "O") | (arr[2] == "O" & arr[5] == "O" & arr[8] == "O") | (arr[3] == "O" & arr[6] == "O" & arr[9] == "O") | (arr[3] == "O" & arr[5] == "O" & arr[7] == "O") | (arr[4] == "O" & arr[5] == "O" & arr[6] == "O") | (arr[7] == "O" & arr[8] == "O" & arr[9] == "O"))
{// за таких обстоятельств побеждает О, следущие действия аналогичны
Ovin += 1;
label3.Text = "X : O\n" + Xvin.ToString() + " : " + Ovin.ToString();
MessageBox.Show(" O VIN!");
refresch();
}
if ((arr[1] != "") & (arr[2] != "") & (arr[3] != "") & (arr[4] != "") & (arr[5] != "") & (arr[7] != "") & (arr[8] != "") & (arr[9] != ""))
{// Ничья, тоесть все поле заполнено, а победителя нет
MessageBox.Show(" Ничья! :)"); // объявляем ничью
refresch();// чистим поле
}
}
public void refresch()
{
button1.Text = "";
button2.Text = "";
button3.Text = "";
button4.Text = "";
button5.Text = "";
button6.Text = "";
button7.Text = "";
button8.Text = "";
button9.Text = "";// почистили каждую клетку поля
label1.Text = "";//табло следующего хода
for (i = 0; i < 10; i += 1) // массив ходов
{
arr[i] = "";
}
i = 1; // номер хода
num_game += 1; // добавляем к номеру игры
label2.Text = num_game + " игра"; // обновляем табло с номером игры
}
private void button10_Click(object sender, EventArgs e) // Кнопка "Start" чистит поле
{
refresch();
}
private void button1_Click(object sender, EventArgs e) // первая клетка поля
{
if (button1.Text == "X" | button1.Text == "O") // если клетка уже заполненая
{
MessageBox.Show(" Нельзя! :нуну:");// предупреждаем, что нельзя
}
else { button1.Text = Game(1); who_vin(); }// если все хорошо, запускаем 2 функции. задаем клетке отметку Х или О
}
private void button2_Click(object sender, EventArgs e) // вторая клетка поля. действия аналогичны, и со следующими
{
if (button2.Text == "X" | button2.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button2.Text = Game(2); who_vin(); }
}
private void button3_Click(object sender, EventArgs e)
{
if (button3.Text == "X" | button3.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button3.Text = Game(3); who_vin(); }
}
private void button4_Click(object sender, EventArgs e)
{
if (button4.Text == "X" | button4.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button4.Text = Game(4); who_vin(); }
}
private void button5_Click(object sender, EventArgs e)
{
if (button5.Text == "X" | button5.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button5.Text = Game(5); who_vin(); }
}
private void button6_Click(object sender, EventArgs e)
{
if (button6.Text == "X" | button6.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button6.Text = Game(6); who_vin(); }
}
private void button7_Click(object sender, EventArgs e)
{
if (button7.Text == "X" | button7.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button7.Text = Game(7); who_vin(); }
}
private void button8_Click(object sender, EventArgs e)
{
if (button8.Text == "X" | button8.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button8.Text = Game(8); who_vin(); }
}
private void button9_Click(object sender, EventArgs e)
{
if (button9.Text == "X" | button9.Text == "O")
{
MessageBox.Show(" Нельзя! :нуну:");
}
else { button9.Text = Game(9); who_vin(); }
}
private void Form1_Load(object sender, EventArgs e)
{
refresch();// чистим поле перед игрой
label3.Text = "X : O\n" + Xvin.ToString() + " : " + Ovin.ToString(); // задаем счетчик
}
Вот и все. :)Вот сам исходник:
Скачать
4 коммент.:
А если размерность поля будет составлять не 3x3 , а 10x10 ( просто допустим это ), у вас в if будет кода больше, чем на этой странице текста. Составьте проверку победителя через Tag =)
Образец того, как не надо писать программы
Разве существует понятие "Глобальные переменные" в классах?!
или...
for (int i = 0; i < 3; i++)
{
if (((arr[0 + i * 3] == arr[1 + i * 3]) && (arr[1 + i * 3] == arr[2 + i * 3])) ||
((arr[0 + i] == arr[3 + i]) && (arr[3 + i] == arr[6 + i]))) { flag = true; }
}
if ((arr[0] == arr[4] && arr[4] == arr[8]) || (arr[2] == arr[4] && arr[4] == arr[6])) { flag = true; }
return flag;
Отправить комментарий