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

Технические и пользовательские характеристики игры, требования к программному обеспечению и среде разработки C#. Составление блок-схемы алгоритма, uml-диаграммы и текста программы, тестирование корректности компьютерного кода и результатов его работы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 05.03.2013
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

Разработал

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

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

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

Бачмага А. А.

2012

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

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

ЗАДАНИЕ

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

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

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

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

Срок сдачи законченного проекта 20.04.2012

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

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

Введение

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

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

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

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

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

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

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

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

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

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

6 В. Е. Осипов. Методические указания к курсовому проекту. - Омск.: ОмГТУ, 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).

Размещено на Allbest.ru


Подобные документы

  • Проект программы "Крестики-нолики". Блок-схема алгоритма. Описание работы программного продукта. Инструкция по инсталляции. Инструкция программисту, возможность доработки с целью упрощения исполняемых кодов. Инструкция по проверке и тестированию.

    курсовая работа [235,8 K], добавлен 05.12.2009

  • Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.

    контрольная работа [380,0 K], добавлен 28.04.2014

  • Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

    курсовая работа [821,5 K], добавлен 13.02.2012

  • Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.

    курсовая работа [236,5 K], добавлен 27.01.2014

  • Разработка консольного приложения: описание и сценарий использования программы, интерфейс пользователя. Поэтапное описание создание кода компьютерной игры "Крестики нолики". Функциональные и нефункциональные требования, описание исключительных ситуаций.

    методичка [819,6 K], добавлен 12.05.2013

  • Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.

    курсовая работа [352,8 K], добавлен 14.04.2011

  • Разработка популярной развлекательной игры крестики-нолики. Возможность играть с компьютером, который играет согласно созданному алгоритму. Новые возможности Visual Studio. Легкое усвоение программы. Удобный интерфейс - "визитная карточка" приложения.

    курсовая работа [74,6 K], добавлен 20.12.2009

  • Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.

    курсовая работа [281,5 K], добавлен 30.01.2018

  • Общая характеристика языков программирования. Краткий обзор C, C++, Java, PHP, Python, Delphi и Visual Basic. Процесс разработки программы игра "Крестики и нолики" с помощью AppWizard. Компиляция и компоновка модулей, определение интерфейса приложения.

    курсовая работа [2,5 M], добавлен 27.05.2014

  • Программный продукт для игры "Крестики-нолики". Описание пользовательского интерфейса. Факт базы данных, определяющий состояние счёта. Предикат изменяющий состояние игрового процесса и подсчитывающий количество занятых ячеек поля. Исходный код программы.

    курсовая работа [34,6 K], добавлен 19.05.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.