Файл: Методические указания по курсовому и дипломному проектированиюдля студентов специальности 200800 Проектирование и технология рэс.rtf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 22

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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


Разработал

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

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

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

Бачмага А. А.

2012

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

Кафедра "Конструирование и производство радиоаппаратуры"
ЗАДАНИЕ

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

«Основы информатизации проектирования электронных средств»
Студент гр. КРБ-111 Рыжкосвкий Максим Леонидович

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

“Игра крестики-нолики”
Цель и назначение разработки

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ 5

. ЗАДАНИЕ 5

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

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

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

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

6 ТЕСТИРОВАНИЕ ПРОГРАММЫ 23

ВЫВОД 24

ЛИТЕРАТУРА 25
ВВЕДЕНИЕ
Крестики-нолики - логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или большего размера (вплоть до «бесконечного поля»). Игроки по очереди ставят на свободные клетки поля 3х3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 3 свои фигуры по вертикали, горизонтали или диагонали, выигрывает. Первый ход делает игрок, ставящий крестики.
1 ЗАДАНИЕ
Написать игру в «крестики-нолики» на поле 3 на 3. Человек играет против компьютера. Реализовать всю игру. Отображение игрового поля в виде текста и ввод хода с клавиатуры - по Вашему усмотрению.
2 КРАТКАЯ ТЕОРИЯ
Графический интерфейс поля игры выполняется путем добавления на форму приложения девяти кнопок. Свойство Text класса Button возможно использовать для вывода знака игрока (крестик или нолик), причем красиво смотрятся знаки при применении шрифта AR BLANCA. Ход пользователя в какую-нибудь клетку вызывает событие ButtonX_Click(), где запоминается индекс этой клетки (X - индекс клетки).

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

[1], представлен ниже:

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

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

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

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

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

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

Когда наступает очередь хода компьютера, он должен проверить ценность позиции каждой пустой клетки и выполнить наиболее «дорогой» ход.
3 БЛОК-СХЕМА АЛГОРИТМА


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

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


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


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


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



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


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


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



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



Рисунок 10. Блок-схема подпрограммы проверки выигрышных комбинаций
4 UML - ДИАГРАММА


Рисунок 11. UML - диаграмма
5 ТЕКСТ ПРОГРАММЫ
using System;

using System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;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();

}

//Метод активации поля: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()

{(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";.Enabled = false;

break;2: if (znakPC == 2) btn02.Text = "X"; else if (znakPC == 1) btn02.Text = "O";.Enabled = false;

break;3: if (znakPC == 2) btn10.Text = "X"; else if (znakPC == 1) btn10.Text = "O";

btn10.Enabled = false;

break;4: if (znakPC == 2) btn11.Text = "X"; else if (znakPC == 1) btn11.Text = "O";

btn11.Enabled = false;

break;5: if (znakPC == 2) btn12.Text = "X"; else if (znakPC == 1) btn12.Text = "O";

btn12.Enabled = false;

break;6: if (znakPC == 2) btn20.Text = "X"; else if (znakPC == 1) btn20.Text = "O";

btn20.Enabled = false;

break;7: if (znakPC == 2) btn21.Text = "X"; else if (znakPC == 1) btn21.Text = "O";

btn21.Enabled = false;

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