Разработка консольного приложения, представляющего собой игру "Крестики нолики" с компьютером с поддержкой контейнерных классов STL
Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.01.2014 |
Размер файла | 236,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Интерфейс пользователя и сценарии использования программы
2. Функциональные требования
3. Нефункциональные требования
4. Файловые интерфейсы
5. Исключительные ситуации
6. Контейнеры STL
7. Код игры с комментариями
Введение
Разрабатывается консольное приложения, представляющего собой игру "Крестики нолики" с компьютером с поддержкой контейнерных классов STL.
1. Интерфейс пользователя и сценарии использования
В начале игры предлагается выбор кто будет ходить первым: вы или компьютер и допустимые ответы y или n. В меню отображаются цифры в клетках которые отвечают за клетки игровой доски. Пользователи вводят числа от 1 до 9 в строке и для отображения символа нужно нажать Enter. Если пользователь вводит 1 то символ отобразится в левой нижней клетке, а если введёт 5 символ нолика отобразится в средней клетке если клетка занята запрос повторяется. Если сложилась выигрышная комбинация из крестиков или ноликов на экране отображается победитель и запрос на то, хочет ли пользователь повторить игру и допустимые ответы y или n.
интерфейс игра программа компьютер
2. Функциональные требования
Для запуска игры нужно дважды кликнуть на исполняемом файле с названием игры с расширением exe. Для начала игры нужно выбрать каким по счету ты будешь играть и ввести y если первым и n если вторым и нажать ентер Enter. Для игры нужно использовать кнопки клавиатуры от 1 до 9, если будут введены другие числа то появится сообщение в котором говорится, что клетка занята и пользователь ввёл число от 1 до 9.
3. Нефункциональные требования
Приложение игра работает под операционной системой Windows и Linux с установленным wine. Приложение работает быстро и поскольку эта небольшая программа консольное приложение то требования для Персонального компьютера на котором будит использоваться минимальны.
4. Исключительные ситуации
Если ввести символ буквы программа перестаёт работать и сваливается в "штопор". Если такое случится то нужно срочно закрыть программу нажав красный крестик вверху окна. Почему программа реагирует именно так, решения не нашёл. Решение: добавить дополнительную проверку для символов букв, числа символов числа, самих символов, что бы при вводе таких символов появлялось сообщение Ваш ход? 1-9.
5. Поэтапное описание создание кода игры
Введение в объектно-ориентированное программирование.
Объектно-ориентированное программирование представляет собой чуть более автоматизированный способ программирования. Объектно-ориентированные программы - это не просто процедурные программы, переведенные на новый синтаксис. Они должны строится на новой философии разработки. Для них требуется новая стратегия программирования, которую часто бывает трудно освоить. сновная идея ООП: программа состоит из группы объектов, часто связанных между собой. В С++ объекты описываются при помощи нового типа данных class.
Класс включает в себя набор переменных (данных) и операций (методов или функций-членов), которые действуют на эти переменные. Полученными объектами можно управлять при помощи сообщений. В ООП объекты включают в себя не только данные (данные-члены), но и методы (функции-члены) воздействия на эти данные. Эти две части в сочетании образуют функциональную единицу программы. Другими словами, объекты содержат данные и методы работы с этими данными. Ниже приведены три основных преимущества объектно-ориентированных программ по сравнению с эквивалентными программами, разработанными сверху вниз.
Сопровождение программы. Программы проще читать и понимать, ООП позволяет управлять сложностью программы, оставляя видимыми программисту только существенные детали.
Модификация программы (добавление или исключение возможностей). Вы можете часто делать дополнения или исключения в программе, например при работе с базой данных, просто добавляя и исключая объекты. Новые объекты могут наследовать все свойства базовых объектов, необходимо только добавить или убрать отличающиеся свойства. Повторное использование. Можно сохранить грамотно разработанный объект в наборе полезных программ и затем вставить его в новую программу с небольшими изменениями или без изменений.
Основные термины и положения ООП.
Функция это кусок кода, который можно неоднократно вызывать из любого места программы состоящая из 2-х частей: объявление функции(прототип функции) содержит информацию о типе и определения. Формат прототипа функции состоит:
<тип результата> <название функции>
([<тип> [<название параметра1>][,..,<тип> [<название параметраN>]]]
параметр <тип результата> задаёт тип значения, которое возвращает функция с помощью оператора return. Если функция не возвращает никакого значения, то вместо типа указывается ключевое слово void. Название функции должно быть допустимым индетификатором. После названия функции, внутри круглых скобок указывается тип и название параметра через запятую. Название параметров в прототипе функций можно не задавать вообще. Если функция не принимает параметров, то указываются только круглые скобки()или внутри задаётся ключивое слово void (void). После объявления функции должна стоять точка с запятой(;) Определение функции содержит описание типа и название параметров и реализацию:
<тип результата> <название функции>
([<тип> [<название параметра1>]
[,..,<тип> [<название параметраN>]]]
{
<тело функции>
return возвращаемое_значение;
}
В отличие от прототипа в определении функции после типа обязательно должно быть указанно название параметра, которое является локальной переменной и она создаётся при вызове функции, а после выхода из функции удаляется. Таким образом, локальная переменная видна только в внутри функции.
После описания параметров, внутри фигурных скобок размещаются инструкции, которые будут выполнятся при каждом вызове функции. Фигурные скобки {} указываются в любом случае, даже если тело функции состоит только из одной инструкции. Точка с запятой(;) после закрывающей фигурной скобки не указывается.
Вернуть значение из функции позваляет оператор return. После исполнения этого оператора выполнение функии останавливается и управление передаётся обратно в точку вызова функции.
Если перед названием функии указанно ключевое слово void, то оператора return может не быть, а если неоходимо досрочно прервать выполнение функции, то оператор return указывается без возвращаемого значения.
При вызове функции из программы указывается название функции, после которого в круглых скобках передаются значения. Если функция не пренимает параметров, то указываются только круглые скобки. Если функция фозвращает значение, то его можно присвоить переменной или проигнорировать.
Количество и тип параметров в определении функции должны совпадать с количеством и типом параметров при вызове. Переданные значения присваиваются переменным, расположенным в той же позиции в определении функции. Объявление фукции должно распологатся перед вызовом и тогда название функции всегда является глобальным идентификатором.
В небольших программах допускается объявление функциё не указывать, при условии, что определение функций расположенно перед функцией main().Функция main()так же не требует объявления т.к. она вызывается первой.
При увеличении количества фукций объявление фукций следует размещать в начале программы перед функцией main(),а определения после функции main() и в этом случае порядок следования определений функций не имеет значения.
При увеличении размеров программ объявление функций выносят в заголовочный файл с расширением h(иногда hpp), а определения функций размещаются в одноимённом файле с расширением срр. Все файлы распологаются в одной папке с основным файлом, содержащем функцию main()и в дальнейшем с помощью дерективы #include заголовочный файл подключают во всех остальных файлах.
Инкапсуляция данных. Этот термин включает в себя логическое связывание данных с конкретной операцией. Она так же означает, что они являются не -глобальными доступными всей программе, а локальными - доступными только малой ее части. Инкапсуляция также автоматически подразумевает защиту данных. Именно для этого предназначена структура class в С++. В классе управление функциональными деталями объекта осуществляется при помощи спецификаторов private, public, protected.
Иерархия классов. В общем случае можно представить себе иерархию классов как родословную в генеалогическом древе, где класс С++ представляет собой шаблон для создания классов-потомков. Объекты, полученные из описания класса, называют экземплярами этого класса. Можно создать иерархию классов с классом-родителем и несколькими классами-потомками. Основой для этого являются производные классы.
Наследование. Наследование в ООП позволяет классу получать свойства другого класса объектов. Родительский класс служит шаблоном для производного класса; этот шаблон можно менять различными способами. Наследование является важным положением, поскольку оно позволяет повторно использовать определение класса без значительных изменений в коде.
Полиморфизм. Строится на описанной выше концепции наследования. Программа посылает одно и тоже сообщение как объекту родительского класса, так и всем объектам производных классов. И родительский класс, и классы-потомки ответят на сообщение соответствующим образом. Полиморфизм дает возможность дополнять уже существующие части программы.
Виртуальные функции определяются в родительском классе, а в производных классах происходит доопределение этих функций и для них создаются новые реализации. При работе с виртуальными функциями сообщения передаются как указатели, которые указывают на объект вместо прямой передачи объекту. Виртуальные функции используют таблицу для адресной информации. Эта таблица инициализируется во время выполнения при помощи конструктора. Конструктор вызывается каждый раз, когда создается объект его класса. Задача конструктора в данном случае состоит в связывании виртуальной функции с таблицей адресной информации. Во время компиляции адрес виртуальной функции неизвестен; вместо этого ей отводится позиция в таблице адресов.
Циклы. Операторы цикла(for)позволяют выполнить одни и те же инструкции многократно. Цикл(for)выполняется до тех пор пока <условие> не вернёт false(ложь) и если это не произойдёт цикл будит бесконечным. for(<начальное_значение> присваивает переменной-счётчику начальное значение; <условие> содержит логическое выражение и пока логическое выражение возвращает true(истина) выполняются инструкции внутри цикла; <приращивание> задаёт изменение переменной-счётчика на каждой интерации на указанное ++ означает увеличить на 1)
while Выполнение выражений в цикле продолжается до тех пор, пока логическое выражение истинно.
ООП полностью принадлежит к миру С++, поскольку в С нет основного ядра- абстрактного типа данных class. Поэтому переписать процедурно-ориентированную программу как объектно-ориентированную гораздо сложнее, чем просто подставить вместо одного ключевого слова другое.
ООП представляет собой технику программирования, которая позволяет рассматривать основные идеи как множество объектов. Используя объекты, можно представить задачи, которые необходимо выполнить, их взаимодействие и любые заданные условия, которые должны быть соблюдены.
Структура данных часто образует основы объектов.
Таким образом в С или С++ тип struct может образовывать элементарный объект. Связь с объектом можно организовать при помощи сообщений. Использование сообщений похоже на вызов функций в процедурно-ориентированной программе. Когда объект получает сообщение, вступают в действие методы, содержащиеся в объекте. Методы (их иногда называют функциями - членами) аналогичны функциям процедурно-ориентированного программирования. Тем не менее метод является частью объекта, а не чем-то отдельным, как было бы в процедурном аналоге.
С++ -язык предметно-ориентированного программирования. Язык С++ поддерживает процедурную и объектно-ориентированную парадигмы программирования.
Объектно-ориентированное программирование - это новый способ подхода к программированию. Такое программирование, взяв лучшие черты структурного программирования, дополняет его новыми идеями, которые переводят в новое качество подход к созданию программ.
Наиболее важное понятие языков объектно-ориентированного программирования -это понятие объекта (object). Объект - это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции, т. е. объект в Borland C++ объединяет в себе данные и функции, обрабатывающие эти данные. Одним из самых главных понятий языка С++ является понятие класса. В языке С++ для того, чтобы определить объект, надо сначала определить его форму с помощью ключевого слова Ближайшей аналогией класса является структура. Память выделяется объекту только тогда, когда класс используется для его создания. Любой объект языка С++ имеет одинаковые атрибуты и функциональность с другими объектами того же класса. За создание своих классов и поведение объектов этих классов полную ответственность несет сам программист. Работая в некоторой среде, программист получает доступ к обширным библиотекам стандартных классов. Обычно, объект находится в некотором уникальном состоянии, определяемом текущими значениями его атрибутов. Функциональность объектного класса определяется возможными операциями над экземпляром этого класса.
Структуры. Структура-группа данных различных типов и(или) назначения, которые представляют собой единый информационный элемент.
Поскольку в объектах также можно хранить группы разнотипных данных, то они тоже содержат структуры. Отличие структуры от класса в том, что в структуре нет закрытых и защищенных членов. Все члены структуры открыты.
Объявление структуры аналогично объявлению класса но вместо ключевого слова class ставится ключевое слово Struct :
struct идентификатор
{
Объявление данных или объектов
};
Объявлений структуры не подразумевает создание объекта или переменной. Объявление-это просто описание будущего объекта, в данном случае змейки. Чтобы использовать объект определенного класса или переменную определенного типа их сначала необходимо объявить в качестве объекта этого класса или переменной этого типа.
Аналогично для использования структурной переменной необходимо объявить переменную этой структуры.
Графический интерфейс.
Пользовательский интерфейс-это средства общения пользователя с вашей программой, которые могут включать в себя изображения, звуки и текст. Ориентируясь на среднего пользователя интерфейс должен быть простым и удобным. Это снизит вероятность ошибок.
6. Контейнеры STL
Стандартная библиотека шаблонов (STL) предоставляет несколько контейнеров для хранения коллекцию связанных объектов. Контейнеры все классы шаблонов, позволяющее определить, какие объекты разрешены в контейнерах. Этот раздел предоставляет обзор контейнеров STL, помогающие решить, который наилучшим образом подходящий для своего контейнера. Контейнеры STL можно разбить на категории 3, контейнеры последовательности, ассоциативные контейнеры и адаптеры контейнера. Эти категории и коллекции, которые принадлежат каждой категории, приведены здесь. Более подробные сведения можно найти в документации ссылки для контейнеров.
Контейнеры последовательности
Контейнеры последовательности поддерживают исходный порядок, вставляемых элементов. Это позволяет определить место вставки элемента в контейнере.
deque контейнер двойн-завершенной очереди () позволяет для быстрого вставок и удалений в начале и конце контейнера. Также можно случайно получить доступ к любой элемент быстро.
list предоставляет контейнер для быстрого вставок и удалений в любом месте в контейнере, но нельзя случайно получить доступ к элементу в контейнере.
vector контейнер ведет себя как массив, но будет увеличиваться автоматически по мере необходимости.
Ассоциативные контейнеры.
При указании характеристикой ассоциативных контейнеров, что элементы вставляются в стандартный заказ, как отсортированный по возрастанию. Ассоциативные контейнеры можно группировать в 2 подмножеств: сопоставления и наборы. A mapиногда называют словарь, состоящий из пары " ключ-значение ". Ключ, используемый для упорядочения последовательности, а каким-либо образом, связанные с этим ключом. Например, a map может содержать уникальные ключи представления машинное каждое слово в текст и значениях, представляющее количество раз, машинное слово встречается в тексте. A set порядок по возрастанию просто контейнер уникальных элементов. Оба map и set разрешить только один экземпляр ключа или элемента, который необходимо вставить в контейнер. Если несколько экземпляров элементов необходимы, воспользуйтесь multimap OR multiset. Оба итератора сопоставления и поддержки двунаправленной наборов. Пока не часть стандарта STL, формальный hash_map и hash_set часто используется для повышения при поиске раз. Эти контейнеры хранят их элементы, такие как хэш-таблицы, каждая запись в таблице, содержащий список связанный двунаправленным элементов. Для обеспечения наиболее быстрые время поиска, убедитесь, что алгоритм хэширования для элементов возвращает равномерно распределенные значения хэша. Дополнительные сведения о ассоциативных контейнерах см. в следующей таблице.
Адаптеры контейнера
Адаптеры контейнера просто изменения приведенных выше контейнеров. Адаптеры контейнера не поддерживают итераторы.
priority_queue контейнер упорядочивал те, что элемент с самым высоким значением всегда является первым в очереди.
queue контейнер следовать семантике FIFO (ранее пришел - первым вышел "). Первый элемент inserted (отправлянно) в очередь первое для удаления (извлекается).
stack контейнер следовать семантике LIFO (последнего in, out). Последний элемент для вставки (отправлянно) в стек первый элемент, удаляемый (извлекается).
Поскольку адаптеры контейнера не поддерживают итераторы, их нельзя использовать с алгоритмом STL.
Требования для элементов контейнера.
Элементы, добавленные в контейнер STL могут иметь любой тип объекта, который предоставляет открытый конструктор копии, открытый деструктор и открытый оператор присваивания. Деструктор не может создать исключение. Кроме того, ассоциативные как контейнеры set и map иметь открытый оператор сравнения быть определены, который по умолчанию operator<. Некоторые операции в контейнерах также могут потребовать открытого конструктора по умолчанию и открытого equivalence оператора.
7. Код игры с комментариями
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
/*
ввод констант
создание функций
создается пустая доска
вывод инструкций на дисплей
компьютер получает x
игрок получает o
спросить игрока, если он хочет ходить первым.
если игрок ходит первым
игрок получает x
компьютер получает o
Если вторым то
компьютер получает x
игрок получает o
вывод доски на дисплей
если никто не победит и ничья
принимается решение по действию
если игрок ходит
игрок ставит позицию на доску
если компьютер ходит
высчитывается лучший ход
компьютер ставит выбранную позицию на доску
обновление доски
определение победителя
вывод победителя на экран
спросить игрока хочет ли он повторить игру
если да
начнется игра
если нет
игра окончена
*/
const char EMPTY = ' ';
const char x = 'X';
const char o = 'O';
const char TIE = 'T';
const char NONE = 'N';
void instructions();
char askYesNo(string question);
int askNumber(string question, int high, int low = 1);
void displayBoard(const vector<char>* const board);
char winner(const vector<char>* const board);
bool isLegal(int move, const vector<char>* const board);
int humanMove(const vector<char>* const board, char human);
int computerMove(vector<char> board, char comp);
void announceWinner(char winner, char human, char comp);
char playAgain(string question);
void playGame();
int main()
{
setlocale (LC_ALL,".1251");
int move;
const int NUM_SQUARES = 9;
vector<char> board(NUM_SQUARES, EMPTY);
instructions();
char computer = x;
char human = o;
char ans = askYesNo("Вы хотите ходить первым?");
if (ans == 'y')
{
human = x;
computer = o;
}
char turn = x;
displayBoard(&board);
while (winner(&board) == NONE)
{
if (turn == human)
{
move = humanMove(&board, human);
board[move] = human;
}
else
{
move = computerMove(board, computer);
board[move] = computer;
}
displayBoard(&board);
if (turn == human)
{
turn = computer;
}
else { turn = human; }
}
announceWinner(winner(&board), human, computer);
ans = playAgain("Вы хотите повторить игру? (y/n): ");
if (ans == 'y')
{
cout << endl;
playGame();
}
else
{
cout << "Спасибо за игру!";
return 0;
}
}
void playGame()
{
main();
}
char playAgain(string question)
{
char ans = 'n';
cout << question;
cin >> ans;
return ans;
}
void instructions()
{
cout << "Добро пожаловать в игру Крестики нолики.\n";
cout << "Введите число от 0 - 8. Номера\n";
cout << "расставляйте в ячейки приведенные в примере:\n\n";
cout << "1 | 2 | 3\n";
cout << "---------\n";
cout << "4 | 5 | 6\n";
cout << "---------\n";
cout << "7 | 8 | 9\n\n";
cout << "Приготовься. Игра сейчас начнется.\n\n";
}
char askYesNo(string question)
{
char response;
do
{
cout << question << "(y/n): ";
cin >> response;
} while (response != 'y' && response != 'n');
return response;
}
int askNumber(string question, int high, int low)
{
int number;
do
{
cout << question << "("<< low << "- "<< high << "): ";
cin >> number;
} while (number > high || number < low);
return number+1;
}
void displayBoard(const vector<char>* const board)
{
cout << "\n\t" << (*board)[0] << " | "<< (*board)[1] << " | "<< (*board)[2];
cout << "\n\t" << "---------";
cout << "\n\t" << (*board)[3] << " | "<< (*board)[4] << " | "<< (*board)[5];
cout << "\n\t" << "---------";
cout << "\n\t" << (*board)[6] << " | "<< (*board)[7] << " | "<< (*board)[8];
cout << "\n\n";
}
char winner(const vector<char>* const board)
{
// все возможные варианты побед
const int WINNING_ROWS[8][3] = { {0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{0, 3, 6},
{1, 4, 7},
{2, 5, 8},
{0, 4, 8},
{2, 4, 6}
};
const int TOTAL_ROWS = 8;
// если в ряду есть три одинаковых знчения (не пустые),
// тогда есть победитель
for(int row = 0; row < TOTAL_ROWS; ++row)
{
if ( ((*board)[WINNING_ROWS[row][0]] != EMPTY) &&
((*board)[WINNING_ROWS[row][0]] == (*board)[WINNING_ROWS[row][1]]) &&
((*board)[WINNING_ROWS[row][1]] == (*board)[WINNING_ROWS[row][2]]) )
{
return (*board)[WINNING_ROWS[row][0]];
}
}
// так как никто не победил, проверяется ничья (пустые квадраты)
if (count(board->begin(), board->end(), EMPTY) == 0)
return TIE;
// так как никто не победил, и не ничья, игра продолжается
return NONE;
}
inline bool isLegal(int move, const vector<char>* const board)
{
return ((*board)[move] == EMPTY);
}
int humanMove(const vector<char>* const board, char human)
{
int move = askNumber("Ваш ход?", (board->size()));
while (!isLegal(move-2, board))
{
cout << "\nЭта клетка занята.\n";
move = askNumber("Ваш ход?", (board->size()));
}
cout << "Прекрасно...\n";
return move-2;
}
int computerMove(vector<char> board, char computer)
{
cout << "Я поставлю число в квадрат ";
// если компьютер может победить на следующем ходе, делается ход.
for(unsigned int move = 0; move < board.size(); ++move)
{
if (isLegal(move, &board))
{
board[move] = computer;
if (winner(&board) == computer)
{
cout << move+1 << endl;
return move;
}
// делана проверка движения , его отмена.
board[move] = EMPTY;
}
}
// если игрок может победить на следующем ходе, блокировать это движение.
char human;
if (computer == x)
{
human = o;
}
else { human = x; }
for(unsigned int move = 0; move < board.size(); ++move)
{
if (isLegal(move, &board))
{
board[move] = human;
if (winner(&board) == human)
{
cout << move+1 << endl;
return move;
}
// сделана проверка движения , его отмена.
board[move] = EMPTY;
}
}
// лучшие шаги что-бы сделать ход
const int BEST_MOVES[] = {5, 1, 3, 7, 9, 2, 4, 6, 8};
// так как никто не может победить на следующем движении, выбрать лучший открытый квадрат.
for(unsigned int i = 0; i < board.size(); ++i)
{
int move = BEST_MOVES[i];
if (isLegal(move-1, &board))
{
cout << move << endl;
return move-1;
}
}
return 0;
}
void announceWinner(char winner, char human, char computer)
{
if (winner == computer)
{
cout << "Компьютер" << " Выиграл!\n";
}
else if (winner == human)
{
cout << "Игрок" << " Выиграл!\n";
}
else
{
cout << "Ничья.\n";
}
}
Список рекомендуемой литературы
1. Начальный курс С и С++.: Учебник. /Б. И. Березин. Москва:"ДИАЛОГ-МИФИ",1999г.
2. Язык программирования С++.: Учебник. /. Страуструп. Киев:"ДиаСофт", 1993 г.
3. Введение в язык С++: Учебник. / Бьярн Страустрап.
- СПб.: 1995.
4. Структуры и алгоритмы обработки данных: Учебник. / Матьяш В.А., Путилов В.А., Фильчаков В.В. , Щёкин С.В. - Апатиты, КФ Петр ГУ, 2000
5. С++ /Дэвис Стефан Р.,4-е издание : Пер. с англ.:- М.: Издательский дом "Вильямс",2003
6. Основы программирования: Учеб. Для сред. проф. образования /И.Г.Семакин, А.П.Шестаков. - М., 2006.
7. С++ экспресс курс: Учебник. /Лаптев В.В. - СПб.: БХВ- Петербург 2004.
8. С++ учебный курс: Учебник. /Франка П. - СПб.: Питер 2005.
9. Модели и структуры данных:/ Учебное пособие/ Д.Далека, А.С. Деревянко, О.Г.Кравец, Л.Е. Тимановская -Харьков: ХГПУ, 2000
10. Высшая математика для экономистов: учебник для студентов вузов/Н.Ш.Кремер,3-е издание.-М.:ЮНИТИ-ДАНА,2006
Размещено на Allbest.ru
Подобные документы
Разработка консольного приложения: описание и сценарий использования программы, интерфейс пользователя. Поэтапное описание создание кода компьютерной игры "Крестики нолики". Функциональные и нефункциональные требования, описание исключительных ситуаций.
методичка [819,6 K], добавлен 12.05.2013Разработка популярной развлекательной игры крестики-нолики. Возможность играть с компьютером, который играет согласно созданному алгоритму. Новые возможности Visual Studio. Легкое усвоение программы. Удобный интерфейс - "визитная карточка" приложения.
курсовая работа [74,6 K], добавлен 20.12.2009Проект программы "Крестики-нолики". Блок-схема алгоритма. Описание работы программного продукта. Инструкция по инсталляции. Инструкция программисту, возможность доработки с целью упрощения исполняемых кодов. Инструкция по проверке и тестированию.
курсовая работа [235,8 K], добавлен 05.12.2009Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.
контрольная работа [380,0 K], добавлен 28.04.2014Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.
курсовая работа [352,8 K], добавлен 14.04.2011Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция 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Технические и пользовательские характеристики игры, требования к программному обеспечению и среде разработки C#. Составление блок-схемы алгоритма, uml-диаграммы и текста программы, тестирование корректности компьютерного кода и результатов его работы.
курсовая работа [1,8 M], добавлен 05.03.2013