Крестики-нолики: Не удаётся вставить изображения крестика, нолика и фона для кнопок - 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д