Файл: Методические указания по курсовому и дипломному проектированиюдля студентов специальности 200800 Проектирование и технология рэс.rtf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 108
Скачиваний: 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# с использованием компилятора VisualStudio 2010 фирмы Microsoft.Дополнительные требования.1 Игра должна быть опробована в действии, проверены возможности выигрыша, проигрыша и ничьи.Задание принято к исполнению “ ___ ” _______________2012г.Руководитель работы ст. преподаватель___________ А.А. БачмагаСтудент гр. КРБ-111 __________________________ М. Л. РыжковскийОГЛАВЛЕНИЕВВЕДЕНИЕ 5. ЗАДАНИЕ 52 КРАТКАЯ ТЕОРИЯ 53 БЛОК-СХЕМА АЛГОРИТМА 74 UML ДИАГРАММА 12ТЕКСТ ПРОГРАММЫ 136 ТЕСТИРОВАНИЕ ПРОГРАММЫ 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 ТЕКСТ ПРОГРАММЫusingSystem;using System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Krestiki{ public partial class Form1 : Form {//Инициализация программы:intznak = 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)
.2 Поле использовать, стандартное: размером 3 на 3 клетки.3 Реализовать информирование пользователя о результатах раунда, конце игры..4 Предоставить возможность выбора пользовательской фишки на поле (крестик или нолик).5 Требования к программному обеспечению.5.1 Начало новой игры с использованием горячего сочетания клавиш.5.2 Удобный и простой интерфейс. .5.3 Программирование программы игры должно быть выполнено на языке C# с использованием компилятора VisualStudio 2010 фирмы Microsoft.Дополнительные требования.1 Игра должна быть опробована в действии, проверены возможности выигрыша, проигрыша и ничьи.Задание принято к исполнению “ ___ ” _______________2012г.Руководитель работы ст. преподаватель___________ А.А. БачмагаСтудент гр. КРБ-111 __________________________ М. Л. РыжковскийОГЛАВЛЕНИЕВВЕДЕНИЕ 5. ЗАДАНИЕ 52 КРАТКАЯ ТЕОРИЯ 53 БЛОК-СХЕМА АЛГОРИТМА 74 UML ДИАГРАММА 12ТЕКСТ ПРОГРАММЫ 136 ТЕСТИРОВАНИЕ ПРОГРАММЫ 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 ТЕКСТ ПРОГРАММЫusingSystem;using System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Krestiki{ public partial class Form1 : Form {//Инициализация программы:intznak = 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)