Крестики-нолики: Не удаётся вставить изображения крестика, нолика и фона для кнопок - C#
Формулировка задачи:
Здравствуйте!
Я недавно изучаю С#. Хочу написать игру "Крестики-нолики". За основу взяла чужой код с видеоурока.
Не удаётся вставить изображения крестика, нолика и фона для кнопок. Ошибка: "Неявное преобразование типа "string" в "System.Drawing.Image" невозможно"". Т.е. при запуске игры, нажимая на кнопки полей, не появляются изображения крестика или нолика.
И не появляется свойство ImageLocation.
И ещё одна проблемка. Если я ставлю, например, "крестик"-"нолик"-"крестик" по диагонали, вертикали или же горизонтали один за другим, выскакивает MessageBox "Нолики выиграли" при том, что на самом деле не выиграл ещё никто.
Вот код. Помогите найти ошибки.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication52
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string x = "крестик.jpg"; //изображения крестика, нолика и фона
string o = "нолик.jpg";
string f = "фон.jpg";
int temp; //количество ходов
int flag; //кто сейчас ходит. По умолчанию 1, ибо снчала ходят крестики.
int[] m_1 = new int[9] {0,0,0,0,0,0,0,0,0}; //места клеткок, в которые будут помещены крестики и нолики
int[] m_2 = new int[9] {2,2,2,2,2,2,2,2,2 }; // массив для проверки заполения крестиком или ноликом
public void New_game()
{
flag = 1;
temp = 0;
for (int i = 0; i < 9; i++) //очистка полей
{
m_1[i] = 0;
m_2[i] = 2;
button1.ImageLocation = f; //установка фона на кнопках
button2.ImageLocation = f;
button3.ImageLocation = f;
button4.ImageLocation = f;
button5.ImageLocation = f;
button6.ImageLocation = f;
button7.ImageLocation = f;
button8.ImageLocation = f;
button9.ImageLocation = f;
}
}
public void pobeda_x() //если победили крестики
{
MessageBox.Show("Победили крестики ");
New_game();
}
public void pobeda_o() //если победили нолики
{
MessageBox.Show("Победили нолики ");
New_game();
}
public void proverka()
{
if (flag == 1 && temp < 9) //если ход крестиков и кол-во ходов меньше 9
{
if (m_2[0] == 1 && m_2[1] == 1 && m_2[2] == 1) //если 1,2 и 3 кнопки — крестики
{
pobeda_x();
}
if (m_2[3] == 1 && m_2[4] == 1 && m_2[5] == 1) //4,5,6
{
pobeda_x();
}
if (m_2[6] == 1 && m_2[7] == 1 && m_2[8] == 1) //7,8,9
{
pobeda_x();
}
if (m_2[0] == 1 && m_2[3] == 1 && m_2[6] == 1) //вертикаль
{
pobeda_x();
}
if (m_2[1] == 1 && m_2[4] == 1 && m_2[7] == 1)
{
pobeda_x();
}
if (m_2[2] == 1 && m_2[5] == 1 && m_2[8] == 1)
{
pobeda_x();
}
if (m_2[0] == 1 && m_2[4] == 1 && m_2[8] == 1) //диагональ
{
pobeda_x();
}
if (m_2[2] == 1 && m_2[4] == 1 && m_2[6] == 1)
{
pobeda_x();
}
//то же самое для ноликов
if (m_2[0] == 0 && m_2[1] == 0 && m_2[2] == 0)
{
pobeda_o();
}
if (m_2[3] == 0 && m_2[4] == 0 && m_2[5] == 0)
{
pobeda_o();
}
if (m_2[6] == 0 && m_2[7] == 0 && m_2[8] == 0)
{
pobeda_o();
}
if (m_2[0] == 0 && m_2[3] == 0 && m_2[6] == 0)
{
pobeda_o();
}
if (m_2[1] == 0 && m_2[4] == 0 && m_2[7] == 0)
{
pobeda_o();
}
if (m_2[2] == 0 && m_2[5] == 0 && m_2[8] == 0)
{
pobeda_o();
}
if (m_2[0] == 0 && m_2[4] == 0 && m_2[8] == 0)
{
pobeda_o();
}
if (m_2[2] == 0 && m_2[4] == 0 && m_2[6] == 0)
{
pobeda_o();
}
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close(); //выход
}
private void новаяToolStripMenuItem_Click(object sender, EventArgs e)
{
New_game(); //новая игра
}
private void button1_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[0] == 0) //если ходит крестик и поле не занято
{
button1.ImageLocation = x; //появляется изображение крестика
flag = 0; //следующий ход — нолика
m_1[0] = 0;
m_2[0] = 1; //теперь здесь крестик
temp++; //кол-во ходов увеличивается на 1
proverka(); //проверяется, вдруг кто-то выиграл
}
if (flag == 0 && m_1[0] == 0) //то же и для ноликов
{
button1.ImageLocation = o;
flag = 1;
m_1[0] = 0;
m_2[0] = 0;
temp++;
proverka();
}
}
private void button2_Click(object sender, EventArgs e) //и так для каждой кнопки
{
if (flag == 1 && m_1[1] == 0)
{
button2.ImageLocation = x;
flag = 0;
m_1[1] = 0;
m_2[1] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[1] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[1] = 0;
m_2[1] = 0;
temp++;
proverka();
}
}
private void button3_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[2] == 0)
{
button3.ImageLocation = x;
flag = 0;
m_1[2] = 0;
m_2[2] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[2] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[2] = 0;
m_2[2] = 0;
temp++;
proverka();
}
}
private void button4_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[3] == 0)
{
button4.ImageLocation = x;
flag = 0;
m_1[3] = 0;
m_2[3] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[3] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[3] = 0;
m_2[3] = 0;
temp++;
proverka();
}
}
private void button5_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[4] == 0)
{
button5.ImageLocation = x;
flag = 0;
m_1[4] = 0;
m_2[4] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[4] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[4] = 0;
m_2[4] = 0;
temp++;
proverka();
}
}
private void button6_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[5] == 0)
{
button6.ImageLocation = x;
flag = 0;
m_1[5] = 0;
m_2[5] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[5] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[5] = 0;
m_2[5] = 0;
temp++;
proverka();
}
}
private void button7_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[6] == 0)
{
button7.ImageLocation = x;
flag = 0;
m_1[6] = 0;
m_2[6] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[6] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[6] = 0;
m_2[6] = 0;
temp++;
proverka();
}
}
private void button8_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[7] == 0)
{
button8.ImageLocation = x;
flag = 0;
m_1[7] = 0;
m_2[7] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[7] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[7] = 0;
m_2[7] = 0;
temp++;
proverka();
}
}
private void button9_Click(object sender, EventArgs e)
{
if (flag == 1 && m_1[8] == 0)
{
button9.ImageLocation = x;
flag = 0;
m_1[8] = 0;
m_2[8] = 1;
temp++;
proverka();
}
if (flag == 0 && m_1[8] == 0)
{
button1.ImageLocation = o;
flag = 1;
m_1[8] = 0;
m_2[8] = 0;
temp++;
proverka();
}
}
}
}Решение задачи: «Крестики-нолики: Не удаётся вставить изображения крестика, нолика и фона для кнопок»
textual
Листинг программы
for (int i = 1; i <=9; i++) Controls["Button"+i].ImageLocation = f;