Разработка игры "крестики-нолики"

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Омский государственный технический университет

Кафедра «Конструирование и производство радиоаппаратуры»

Курсовая работа по дисциплине

«Основы информатизации проектирования электронных средств»

Разработал

Студент группы КРБ-111

Рыжковский М.Л.

Проверил ст. преподаватель

Бачмага А. А.

2012

Омский государственный технический университет

Кафедра «Конструирование и производство радиоаппаратуры»

ЗАДАНИЕ

на курсовое проектирование по дисциплине

«Основы информатизации проектирования электронных средств»

Студент гр. КРБ-111 Рыжкосвкий Максим Леонидович

Тема проекта: «Игра крестики-нолики»

Срок сдачи законченного проекта 20. 04. 2012

Исходные данные к проекту (см. приложение)

Содержание расчетно-пояснительной записки (перечень подлежащих разработке вопросов):

Введение

1 Игра крестики нолики, правила

2 Разработка программы

А) Оформление поля игры

Б) Алгоритм определения эффективного хода

Основная рекомендуемая литература:

1 Д. Кнут Искусство программирования, том 3. Сортировка и поиск 2-е изд. — М.: Изд. дом «Вильямс», 2007. — ISBN 0−201−89 685−0

2 А. Волков. Численные методы. — М.: Наука, 1989

3 А. Ахо, Д. Хопкрофт, Дж. Ульман. Структуры данных и алгоритмы — М.: Изд. дом «Вильямс», 2000

4 Т. Кормен, С. Лейзерсон, Р. Ривест, К. Штайн. Алгоритмы: построение и анализ. 2-е изд. — М.: Изд. дом «Вильямс», 2005

5 Учебная документация студента. Методические указания по курсовому и дипломному проектированиюдля студентов специальности 200 800 «Проектирование и технология РЭС», — Омск.: ОмГТУ, 1998. — 24 с.

В. Е. Осипов. Методические указания к курсовому проекту. — Омск.: ОмГТУ, 2005.

Дата выдачи задания «____"________________________

Зав. кафедрой ___________________________ В.И. Левченко

Руководитель ст. преподаватель _____________ А.А. Бачмага

Подпись студента ___________________________ К.С. Сергеичев

Исходные данные к проекту

«Игра крестики-нолики»

1 Цель и назначение разработки

1.1 Написать игру в «крестики-нолики»

1.2 Предоставить возможность игры для пользователя

2 Технические требования

2.1 Игра должна производиться между компьютером и пользователем

2.2 Поле использовать, стандартное: размером 3 на 3 клетки

2.3 Реализовать информирование пользователя о результатах раунда, конце игры.

2.4 Предоставить возможность выбора пользовательской фишки на поле (крестик или нолик)

2.5 Требования к программному обеспечению

2.5.1 Начало новой игры с использованием горячего сочетания клавиш

2.5.2 Удобный и простой интерфейс.

2.5.3 Программирование программы игры должно быть выполнено на языке C# с использованием компилятора Visual Studio 2010 фирмы Microsoft.

3 Дополнительные требования

3.1 Игра должна быть опробована в действии, проверены возможности выигрыша, проигрыша и ничьи.

Задание принято к исполнению «___ «_______________2012г.

Руководитель работы ст. преподаватель___________ А.А. Бачмага

Студент гр. КРБ-111 __________________________ М. Л. Рыжковский

ОГЛАВЛЕНИЕ

  • ВВЕДЕНИЕ 5
  • 1. ЗАДАНИЕ 5
  • 2 КРАТКАЯ ТЕОРИЯ 5
  • 3 БЛОК-СХЕМА АЛГОРИТМА 7
  • 4 UML ДИАГРАММА 12
  • 5 ТЕКСТ ПРОГРАММЫ 13
  • 6 ТЕСТИРОВАНИЕ ПРОГРАММЫ 23
  • ВЫВОД 24
  • ЛИТЕРАТУРА 25

ВВЕДЕНИЕ

Крестики-нолики -- логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или большего размера (вплоть до «бесконечного поля»). Игроки по очереди ставят на свободные клетки поля 3×3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 свои фигуры по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики.

1 ЗАДАНИЕ

Написать игру в «крестики-нолики» на поле 3 на 3. Человек играет против компьютера. Реализовать всю игру. Отображение игрового поля в виде текста и ввод хода с клавиатуры — по Вашему усмотрению.

2 КРАТКАЯ ТЕОРИЯ

Графический интерфейс поля игры выполняется путем добавления на форму приложения девяти кнопок. Свойство Text класса Button возможно использовать для вывода знака игрока (крестик или нолик), причем красиво смотрятся знаки при применении шрифта AR BLANCA. Ход пользователя в какую-нибудь клетку вызывает событие ButtonX_Click (), где запоминается индекс этой клетки (X — индекс клетки).

Для реализации алгоритма данной игры требуется анализировать возможные ходы и оценивать их эффективность, выбирая наиболее удачный. Так как клеток в ряду только три, создать иерархию ценности возможных позиций совсем не сложно. Алгоритм оценки ценности, взятый из [1], представлен ниже:

1. Высший приоритет должен быть у ситуации, когда ход в данную клетку может победно завершить игру. Она возникает, если в соответствующем ряду компьютером уже закрыты две клетки.

2. Второй по приоритету будет комбинация двух знаков противника и свободной клетки в одном ряду. Она означает, что на следующем ходу игра может закончиться проигрышем компьютера. Поэтому, если нельзя победить на этом ходу, опасную позицию следует закрыть.

3. На третьем месте в иерархии находится позиция, когда в ряду стоит один знак компьютера и две клетки свободны. Значит, потенциально, через два хода можно победить.

4. Четвертую позицию необходимо комбинации «знак противника и две свободные клетки» так как она грозит возможным проигрышем через два хода.

5. Пятое место занимает строка из пустых клеток. Здесь до победы далеко, но она вполне возможна.

6. Последняя позиция соответствует комбинации знака противника, знака компьютера и свободной клетки. Такая комбинация не может закончить игру ни победой, ни проигрышем, поэтому совершать заполнение такого ряда нужно в последнюю очередь.

Когда наступает очередь хода компьютера, он должен проверить ценность позиции каждой пустой клетки и выполнить наиболее «дорогой» ход.

3 БЛОК-СХЕМА АЛГОРИТМА

Рисунок 1. Блок-схема основной программы

Рисунок 2. Блок-схема подпрограммы очистки поля

Рисунок 3. Блок-схема подпрограммы активации поля

Рисунок 4. Блок-схемы событий меню программы

Рисунок 5. Блок-схема подпрограммы новой игры

Рисунок 6. Блок-схема события ButtonX_Click

Рисунок 7. Блок-схема подпрограммы обновления поля

Рисунок 8. Блок-схемы подпрограмм результата игры

Рисунок 9. Блок-схема подпрограммы «Мозг игры»

Рисунок 10. Блок-схема подпрограммы проверки выигрышных комбинаций

4 UML — ДИАГРАММА

Рисунок 11. UML — диаграмма

5 ТЕКСТ ПРОГРАММЫ

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace Krestiki

{

public partial class Form1: Form

{

//Инициализация программы:

int znak = 0, znakPC = 0, Vuser = 0, Vpc = 0;

int[] pole;

int index = 0;

bool Enable = false;

bool first = true;

public Form1()

{

InitializeComponent ();

Clearpole ();

pole = new int[9];

}

//События меню программы:

private void btnExit_Click (object sender, EventArgs e)

{

Application. Exit ();

}

private void btnNewKrestik_Click (object sender, EventArgs e)

{

// Пользователь выбрал крестик, компьютеру достался нолик

znak = 2;

znakPC = 1;

first = true;

NewGame ();

}

private void btnNewNull_Click (object sender, EventArgs e)

{

// Пользователь выбрал нолик, компьютеру достался крестик и право первого хода

znak = 1;

znakPC = 2;

first = false;

NewGame ();

}

//Метод активации поля:

void Enabledpole ()

{

btn00. Enabled = Enable;

btn01. Enabled = Enable;

btn02. Enabled = Enable;

btn10. Enabled = Enable;

btn11. Enabled = Enable;

btn12. Enabled = Enable;

btn20. Enabled = Enable;

btn21. Enabled = Enable;

btn22. Enabled = Enable;

}

//Метод очистки поля:

void Clearpole ()

{

btn00. Text = ««;

btn01. Text = ««;

btn02. Text = ««;

btn10. Text = ««;

btn11. Text = ««;

btn12. Text = ««;

btn20. Text = ««;

btn21. Text = ««;

btn22. Text = ««;

}

//Метод обновления поля после хода компьютера:

void Updatepole ()

{

switch (index)

{

case 0: if (znakPC == 2) btn00. Text = «X»; else if (znakPC == 1) btn00. Text = «O»;

btn00. Enabled = false;

break;

case 1: if (znakPC == 2) btn01. Text = «X»; else if (znakPC == 1) btn01. Text = «O»;

btn01. Enabled = false;

break;

case 2: if (znakPC == 2) btn02. Text = «X»; else if (znakPC == 1) btn02. Text = «O»;

btn02. Enabled = false;

break;

case 3: if (znakPC == 2) btn10. Text = «X»; else if (znakPC == 1) btn10. Text = «O»;

btn10. Enabled = false;

break;

case 4: if (znakPC == 2) btn11. Text = «X»; else if (znakPC == 1) btn11. Text = «O»;

btn11. Enabled = false;

break;

case 5: if (znakPC == 2) btn12. Text = «X»; else if (znakPC == 1) btn12. Text = «O»;

btn12. Enabled = false;

break;

case 6: if (znakPC == 2) btn20. Text = «X»; else if (znakPC == 1) btn20. Text = «O»;

btn20. Enabled = false;

break;

case 7: if (znakPC == 2) btn21. Text = «X»; else if (znakPC == 1) btn21. Text = «O»;

btn21. Enabled = false;

break;

case 8: if (znakPC == 2) btn22. Text = «X»; else if (znakPC == 1) btn22. Text = «O»;

btn22. Enabled = false;

break;

}

}

//Метод начала новой игры:

void NewGame ()

{

Clearpole ();

lbStep. Text = ««;

for (int i = 0; i < 9; i++) pole[i] = 0;

Enable = true;

Enabledpole ();

if (!first)mozg ();

}

//Событие ButtonX_Click ():

private void btn00_Click (object sender, EventArgs e)

{

index = 0;

if (znak == 2) btn00. Text = «X»; else if (znak == 1) btn00. Text = «O»;

btn00. Enabled = false;

mozg ();

}

private void btn01_Click (object sender, EventArgs e)

{

index = 1;

if (znak == 2) btn01. Text = «X»; else if (znak == 1) btn01. Text = «O»;

btn01. Enabled = false;

mozg ();

}

private void btn02_Click (object sender, EventArgs e)

{

index = 2;

if (znak == 2) btn02. Text = «X»; else if (znak == 1) btn02. Text = «O»;

btn02. Enabled = false;

mozg ();

}

private void btn10_Click (object sender, EventArgs e)

{

index = 3;

if (znak == 2) btn10. Text = «X»; else if (znak == 1) btn10. Text = «O»;

btn10. Enabled = false;

mozg ();

}

private void btn11_Click (object sender, EventArgs e)

{

index = 4;

if (znak == 2) btn11. Text = «X»; else if (znak == 1) btn11. Text = «O»;

btn11. Enabled = false;

mozg ();

}

private void btn12_Click (object sender, EventArgs e)

{

index = 5;

if (znak == 2) btn12. Text = «X»; else if (znak == 1) btn12. Text = «O»;

btn12. Enabled = false;

mozg ();

}

private void btn20_Click (object sender, EventArgs e)

{

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 ();

}

//Метод «мозга» игры:

void 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 ()

{

if (pole[0] == znak & & pole[1] == znak & & pole[2] == znak & & Enable) znak_victory ();

if (pole[3] == znak & & pole[4] == znak & & pole[5] == znak & & Enable) znak_victory ();

if (pole[6] == znak & & pole[7] == znak & & pole[8] == znak & & Enable) znak_victory ();

if (pole[0] == znak & & pole[3] == znak & & pole[6] == znak & & Enable) znak_victory ();

if (pole[1] == znak & & pole[4] == znak & & pole[7] == znak & & Enable) znak_victory ();

if (pole[2] == znak & & pole[5] == znak & & pole[8] == znak & & Enable) znak_victory ();

if (pole[0] == znak & & pole[4] == znak & & pole[8] == znak & & Enable) znak_victory ();

if (pole[2] == znak & & pole[4] == znak & & pole[6] == znak & & Enable) znak_victory ();

if (pole[0] == znakPC & & pole[1] == znakPC & & pole[2] == znakPC & & Enable) znakPC_victory ();

if (pole[3] == znakPC & & pole[4] == znakPC & & pole[5] == znakPC & & Enable) znakPC_victory ();

if (pole[6] == znakPC & & pole[7] == znakPC & & pole[8] == znakPC & & Enable) znakPC_victory ();

if (pole[0] == znakPC & & pole[3] == znakPC & & pole[6] == znakPC & & Enable) znakPC_victory ();

if (pole[1] == znakPC & & pole[4] == znakPC & & pole[7] == znakPC & & Enable) znakPC_victory ();

if (pole[2] == znakPC & & pole[5] == znakPC & & pole[8] == znakPC & & Enable) znakPC_victory ();

if (pole[0] == znakPC & & pole[4] == znakPC & & pole[8] == znakPC & & Enable) znakPC_victory ();

if (pole[2] == znakPC & & pole[4] == znakPC & & pole[6] == znakPC & & Enable) znakPC_victory ();

}

//Методы вывода сообщения о победителе:

void znak_victory ()

{

MessageBox. Show («Ваша взяла!»); Vuser++; lbUser. Text = Vuser. ToString (); Enable = false;

Enabledpole ();

}

void znakPC_victory ()

{

MessageBox. 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

3 Нейгел, Кристиан, Ивьен, Билл, Глинн, Джей, Скиннер, Морган, Уотсон, Карли. C# 2005 и платформа. NET 3.0 для профессионалов.: Пер. с англ. — М.: ООО «И.Д. Вильямс», 2008. — 1376+416 (на CD) c.: ил. — Парал. тит. англ.

4 Петцольд Ч. Программирование для Microsoft Windows на C#. -- М.: Издательско-торговый дом «Русская Редакция», 2002.

5 Фролов А. В., Фролов Г. В. Графический интерфейс GDI в Microsoft Windows. -- М.: «ДИАЛОГ-МИФИ», 1993. -- (Библиотека системного программиста; Т. 14).

ПоказатьСвернуть
Заполнить форму текущей работой