Файл: Методические указания по курсовому и дипломному проектированиюдля студентов специальности 200800 Проектирование и технология рэс.rtf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 23
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
{
index = 6;
if (znak == 2) btn20.Text = "X"; else if (znak == 1) btn20.Text = "O";
btn20.Enabled = false;
mozg();
}
private void btn21_Click(object sender, EventArgs e)
{
index = 7;
if (znak == 2) btn21.Text = "X"; else if (znak == 1) btn21.Text = "O";
btn21.Enabled = false;
mozg();
}
private void btn22_Click(object sender, EventArgs e)
{
index = 8;
if (znak == 2) btn22.Text = "X"; else if (znak == 1) btn22.Text = "O";
btn22.Enabled = false;
mozg();
}
//Метод «мозга» игры:
mozg()
{
bool znakNull =false, znakKrest = false;
if (first)
{
pole[index] = znak;
proverka();
}
first = true;
if (Enable)
{
int temp = 0, indexNull = 0;
bool zero = false, flag = true;
////////////////////////////////// Два знака компьютера в ряду
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == znakPC) temp++;
if (pole[i + 3 * k] == 0) { zero = true; indexNull = i + 3 * k; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == znakPC) temp++;
if (pole[i * 3 + k] == 0) { zero = true; indexNull = i * 3 + k; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == znakPC) temp++;
if (pole[i * 4] == 0) { zero = true; indexNull = i * 4; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == znakPC) temp++;
if (pole[(i + 1) * 2] == 0) { zero = true; indexNull = (i + 1) * 2; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
///////////////////////////////////////////////Два знака пользователя в ряду
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == znak) temp++;
if (pole[i + 3 * k] == 0) { zero = true; indexNull = i + 3 * k; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == znak) temp++;
if (pole[i * 3 + k] == 0) { zero = true; indexNull = i * 3 + k; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == znak) temp++;
if (pole[i * 4] == 0) { zero = true; indexNull = i * 4; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == znak) temp++;
if (pole[(i + 1) * 2] == 0) { zero = true; indexNull = (i + 1) * 2; }
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
//////////////////////////////////////////////Один знак компьютера в ряду и две пустые клетки
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == 0) { temp++; indexNull = i + 3 * k; }
if (pole[i + 3 * k] == znakPC) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == 0) { temp++; indexNull = i * 3 + k; }
if (pole[i * 3 + k] == znakPC) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == 0) { temp++; indexNull = i * 4; }
if (pole[i * 4] == znakPC) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == 0) { temp++; indexNull = (i + 1) * 2; }
if (pole[(i + 1) * 2] == znakPC) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
//////////////////////////////////////////////////Один знак пользователя и две пустые клетки
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == 0) { temp++; indexNull = i + 3 * k; }
if (pole[i + 3 * k] == znak) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == 0) { temp++; indexNull = i * 3 + k; }
if (pole[i * 3 + k] == znak) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == 0) { temp++; indexNull = i * 4; }
if (pole[i * 4] == znak) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == 0) { temp++; indexNull = (i + 1) * 2; }
if (pole[(i + 1) * 2] == znak) zero = true;
}
if (temp == 2 && zero && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
/////////////////////////////////////////////////////////////////////////Пустые 3 клетки
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == 0) { temp++; indexNull = i + 3 * k; }
}
if (temp == 3 && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == 0) { temp++; indexNull = i * 3 + k; }
}
if (temp == 3 && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == 0) { temp++; indexNull = i * 4; }
}
if (temp == 3 && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; temp = 0;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == 0) { temp++; indexNull = (i + 1) * 2; }
}
if (temp == 3 && flag) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
////////////////////////////////////////////////////////В ряду есть знак компьютера и пользователя
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; znakNull=false; znakKrest=false;
for (int i = 0; i < 3; i++)
{
if (pole[i + 3 * k] == znakPC ) znakNull=true;
if (pole[i + 3 * k] == znak) znakKrest = true;
if (pole[i + 3 * k] == 0) { zero = true; indexNull = i + 3 * k; }
}
if ( zero && flag && znakKrest && znakNull) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
for (int k = 0; k < 3; k++)
{
zero = false; znakNull=false; znakKrest=false;
for (int i = 0; i < 3; i++)
{
if (pole[i * 3 + k] == 0) {zero = true; indexNull = i * 3 + k; }
if (pole[i * 3 + k] == znak) znakKrest = true;
if (pole[i * 3 + k] == znakPC) znakNull = true;
}
if ( zero && flag && znakKrest && znakNull) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
if (flag)
{
zero = false; znakNull=false; znakKrest=false;
for (int i = 0; i < 3; i++)
{
if (pole[i * 4] == 0) {zero = true; indexNull = i * 4; }
if (pole[i * 4] == znak) znakKrest = true;
if (pole[i * 4] == znakPC) znakNull = true;
}
if (zero && flag && znakKrest && znakNull) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
if (flag)
{
zero = false; znakNull=false; znakKrest=false;
for (int i = 0; i < 3; i++)
{
if (pole[(i + 1) * 2] == 0) {zero = true; indexNull = (i + 1) * 2; }
if (pole[(i + 1) * 2] == znak) znakKrest = true;
if (pole[(i + 1) * 2] == znakPC) znakNull = true;
}
if ( zero && flag && znakKrest && znakNull) { index = indexNull; pole[index] = znakPC; Updatepole(); flag = false; }
}
}
proverka();
bool nicja =true;
for (int i = 0; i < 9; i++) if (pole[i] == 0) nicja = false;
if (nicja)
{
MessageBox.Show(" Ничья! "); Enable = false;
Enabledpole();
}
}
//Метод проверки выигрыша:
void proverka()
{(pole[0] == znak && pole[1] == znak && pole[2] == znak && Enable) znak_victory();(pole[3] == znak && pole[4] == znak && pole[5] == znak && Enable) znak_victory();(pole[6] == znak && pole[7] == znak && pole[8] == znak && Enable) znak_victory();(pole[0] == znak && pole[3] == znak && pole[6] == znak && Enable) znak_victory();(pole[1] == znak && pole[4] == znak && pole[7] == znak && Enable) znak_victory();(pole[2] == znak && pole[5] == znak && pole[8] == znak && Enable) znak_victory();(pole[0] == znak && pole[4] == znak && pole[8] == znak && Enable) znak_victory();(pole[2] == znak && pole[4] == znak && pole[6] == znak && Enable) znak_victory();
(pole[0] == znakPC && pole[1] == znakPC && pole[2] == znakPC && Enable) znakPC_victory();(pole[3] == znakPC && pole[4] == znakPC && pole[5] == znakPC && Enable) znakPC_victory();(pole[6] == znakPC && pole[7] == znakPC && pole[8] == znakPC && Enable) znakPC_victory();(pole[0] == znakPC && pole[3] == znakPC && pole[6] == znakPC && Enable) znakPC_victory();(pole[1] == znakPC && pole[4] == znakPC && pole[7] == znakPC && Enable) znakPC_victory();(pole[2] == znakPC && pole[5] == znakPC && pole[8] == znakPC && Enable) znakPC_victory();(pole[0] == znakPC && pole[4] == znakPC && pole[8] == znakPC && Enable) znakPC_victory();(pole[2] == znakPC && pole[4] == znakPC && pole[6] == znakPC && Enable) znakPC_victory();
}
//Методы вывода сообщения о победителе:
void znak_victory()
{.Show("Ваша взяла!"); Vuser++; lbUser.Text = Vuser.ToString(); Enable = false;();
}
znakPC_victory()
{.Show("Я Вас обыграл!"); Vpc++; lbPC.Text = Vpc.ToString(); Enable = false;
Enabledpole();
}
}
}
6 ТЕСТИРОВАНИЕ ПРОГРАММЫ
Рисунок 12. Тестирование возможности выигрыша пользователя
игра алгоритм программа
Рисунок 13. Тестирование возможности ничьи
Рисунок 14. Тестирование возможности выигрыша компьютера
ВЫВОД
Благодаря методу оценки эффективности хода была реализована игра «крестики-нолики». Анализ знаков ряда поля проводился с помощью оператора if. Эффективность хода, соответствует очередности выполнения алгоритма оценки соответствующей позиции, согласно представленному в краткой теории алгоритму.
Правильность работы программы была проверена в ходе экспериментальных игр с компьютером. В результате чего было отмечено, что при установке двух фишек пользователя в ряду, компьютер закроет опасную для него позицию; при недостатке в ряду одного знака компьютера - выполняется соответствующий ход, что приводит к выигрышу компьютера. Аналогичным образом, верно отрабатываются и прочие пункты алгоритма оценки эффективности хода. Таким образом, написанную мной программу можно считать полностью рабочей, а задание курсовой работы выполненным.
Список литературы
1 Гурский Д.А., Гурский Ю.А., Flash 8 и ActionScript. Библиотека пользователя (+CD). - СПБ.:Питер, 2006. 528 с.:ил. - (Серия «Библиотека пользователя»).
2 Кариев Ч. А. Разработка Windows-приложений на основе Visual C#. - М.: БИНОМ (Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру), 2007
Нейгел, Кристиан, Ивьен, Билл, Глинн, Джей, Скиннер, Морган, Уотсон, Карли. C# 2005 и платформа .NET 3.0 для профессионалов. : Пер. с англ. - М. : ООО «И.Д. Вильямс», 2008. - 1376+416 (на