Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Создание игровой программы на языке C++

Содержание:

ВВЕДЕНИЕ

Целью данной курсовой работы является разработка популярной развлекательной игры крестики – нолики. Программа предоставляет возможность играть с компьютером, который играет согласно созданному алгоритму. В процессе разработки должны быть усвоены некоторые новые возможности языка С++.

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

1. Описание языка программирования

С++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Ключевым понятием С++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

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

Являясь одним из самых популярных языков программирования, язык С++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видеоигры).

1.1 Правила игры

Правила игры состоят в том, что необходимо выстроить линию из пяти крестиков (ноликов) в любом направлении и каким угодно способом (по горизонтали, вертикали или диагонали). Соответственно ваш противник должен выстроить подобную линию быстрее вас или не давать вам построить такую линию. Игра начинается с того, что в любом месте игрового поля ставится крестик , ваш противник ставит нолик , и так до тех пор пока не будет выстроена линия.

В данной программе чтобы выиграть, необходимо первым составить линию.

1.2 Интерфейс пользователя и сценарии использования

Функциональное меню программы представлено на рисунке 1. В верхнем левом углу отображается порядковый номер текущего хода игры. Ниже расположена игровая доска, состоящая из двух полей X и Y, ниже обозначен порядок предоставления хода, участвующим игрокам, а так же предложение на ввод коордиант, соответствующих определенному месту на поле (координаты X и Y)

Рисунок 1 - Стартовое меню программы

При вводе 1 игроком последовательности 1 1 программа переходит к 2 ходу а в поле с координатой X=1 и Y=1 появляется соответствующий маркер первого игрока (рисунок 2)

Рисунок 2 - Переход хода к следующему игроку

В случае правильно собранной линии, позволяющей одному из игроков одержать победу, программа высвечивает имя победителя (рисунок 3)

Рисунок 3 - Окончание игры

В случае если игрока завершилась в ничью, программа выдаст соответствующее сообщение игрокам (рисунок 4)

Рисунок 4 - Обработка исключения в случае ничейного исхода

1.3 Функциональные требования

Для запуска игры нужно дважды кликнуть на исполняемом файле с названием игры с расширением exe. Для продолжения нужно ввести координаты через пробел и нажать Enter. Для игры нужно использовать кнопки клавиатуры от 1 до 3, если будут введены другие числа то ход текущего игрока начинается заново до тех пор, пока игрок не введет корректное значение поля.

1.4 Нефункциональные требования

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

Обоснование выбора языка программирования и среды разработки Embarcadero Rad Studio

При выполнении курсовой работы была возможность выбора языка программирования из языков высокого уровня, таких как Python, Object Раsса1, С++, С и др. Для написания программы был выбран язык С++.

Язык С++ считается языком системного программирования, хотя он удобен и для написания прикладных программ. Среди преимуществ языка С++ следует отметить переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность программ, а также возможность получить программный код, сравнимый по скорости выполнения с программами, написанными на языке ассемблера. Последнее связано с тем, что хотя С++ является языком высокого уровня, имеющим полный набор конструкций структурного программирования, он также обладает набором низкоуровневых средств, обеспечивающих доступ к аппаратным средствам компьютера. С 1989 года язык С++ регламентируется стандартом Американского института национальных стандартов ANSI С.

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

Для разработки программы была выбрана и среда Embarcadero Rad Studio [15]. К будущей среде программирования были предоставлены следующие требования:

  • максимальная простота и доступность. Программа должна иметь дружественный и понятный интерфейс, позволяющий оперативно реагировать на изменения параметров;
  • программа должна иметь понятную и простую установку;
  • программа должна работать быстро.

Все разрабатываемые приложения среды ориентированы на операционные системы линейки Windows и предоставляет разработчику возможности создания необходимого графического интерфейса системы.

Так как подавляющее большинство пользователей персональных компьютеров имеют практические навыки только в ОС Windows, то интерфейс комплекса станет для них привычным в использовании.

Для запуска программы не будет необходимости устанавливать дополнительные библиотеки или устанавливать компилятор, необходимо будет просто установить программу и приступить к работе. Имеющаяся библиотека визуальных компонентов позволяет создать удобный интерфейс для пользователя. Компонентный принцип, используемый в C++, позволяет создавать полноценные Windows-приложения, написав минимальное количество строк кода. Программы, разрабатываемые на языке С++ не имеют в своем составе скрытых строчек кода, которые могут стать причиной утечки или потери информации.

Таким образом, среда Embarcadero Rad Studio и язык программирования C++ полностью удовлетворяют предоставленным требованиям.

2. Поэтапное описание создание кода игры

Создание доски в которой пользователь будит вводить данные. Подключается файл <iostream>, в котором объявлен объект cout, при помощи директивы include. Далее создаётся функция main внутри которой расположены инструкции ограниченные фигурными скобками ( { } ). Перед названием функции указывается тип возвращаемого значения. Ключевое слово int означает, что функция возвращает целое число. Вывод строки на экран с помощью объекта cout. Чтобы исключить конфликт имён все стандартные идентификаторы в языке С++ определены в пространстве имён std. Поэтому перед именем объекта cout необходимо указать название пространства имён. Для удобства в программе будет использоваться строка using namespace std, позволяющая каждый раз по новой не вводить необходимое пространство имен. Таким образом стартовый листинг программы выглядит следующим образом:

#include <iostream>

#include <conio.h>

#include <ctime>

#include <iostream>

#include <Windows.h>

using namespace std;

int main()

{}

Вынесем в качестве глобальных следующие переменные:

const short int A = mapSize, B = mapSize;

short int X, Y, Nmove = 1;

char whoMove = NUL, win = NUL;

char MAP[A][B];

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

Программа случайным образом определяет игрока, который будет ходить с помощью функции:

void randomFirstMove()

{

srand(time(0));

if (rand() & 1)

whoMove = P1;

else

whoMove = P2;

}

где srand - Это инициализация генератора случайных чисел.

Для реализации карты для игры используется функция displayMap:

void displayMap()

{

cout << "Ход № " << Nmove << endl;

cout << endl;

cout << "\t X";

for (int I = 0; I < A; i++)

cout << " " << I + 1 << " ";

cout << endl;

cout << "\tY";

line();

for (int I = 0; I < A; i++)

{

cout << "\t" << I + 1 << "| ";

for (int j = 0; j < B; j++)

{

cout << MAP[i][j] << " | ";

}

cout << endl;

cout << "\t ";

line();

}

cout << endl << endl;

X = Y = 0;

}

Так как в силу некорректной кодировки символов в приложении было принято решение воспользоваться следующими строчками:

setlocale(LC_CTYPE, "Russian");

SetConsoleCP(1251 ) ;

SetConsoleOutputCP(1251);

Для корректного отображения символов необходимо войти в свойтсва окна и во вкладке шрифт выбрать Lucida Console. (рисунок 5)

Рисунок 5 - Выбор необходимо шрифта

Для ввода координат в программе предусмотрена функция input():

bool input()

{

cout << "Ход игрока " << whoMove << endl;

cout << "Введите координату X Y от 1 до " << A << " через пробел: ";

if ((!(cin >> X) || !(cin >> Y)) || ((!(X < (A + 1) && X > 0) || !(Y < (B + 1) && Y > 0))) || (!(MAP[--Y][--X] == NUL)))

{

cin.clear(); while (cin.get() != '\n');

return false;

}

else

return true;

}

Порядок хода игроков определяется следующими функциями, для обработки выбора игрока используется условный оператор if совместно с else, для предоставления игрокам возможности ходить по очереди:

short int move()

{

Nmove++;

if (whoMove == P1)

{

MAP[Y][X] = P1;

return P1;

}

if (whoMove == P2)

{

MAP[Y][X] = P2;

return P2;

}

}

void nextMove()

{

whoMove == P1 ? whoMove = P2 : whoMove = P1;

}

Для повышения быстродействия кода в функцию main() добавляются только функции, после разработки функция main принимает вид:

void winner()

{

system("cls");

displayMap();

if (win != NUL)

cout << "Выиграл игрок " << win << "!\n";

else

cout << "Ничья!\n";

}

int main()

{

setlocale(LC_CTYPE, "Russian");

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

allNull();

randomFirstMove();

do

{

system("cls");

displayMap();

while (!input())

{ system("cls");

displayMap(); }

move();

whoWin();

nextMove();

} while ((win == NUL) && (Nmove < A*A+1));

winner();

_getch();

return 0;

}

Основная функция, определяющая игрока, победившего в текущей игре:

short int whoWin()

{

short int a = 0;

for (int i = 0; i < A; i++)

{

for (int j = 0; j < B - 1; j++)

if ((MAP[i][j] == MAP[i][j + 1]) && (MAP[i][j] != NUL))

a++;

if (a == B - 1)

{

win = whoMove;

return i + 1;//столбцы

}

else

a = 0;

}

a = 0;

for (int i = 0; i < A; i++)

{

for (int j = 0; j < B - 1; j++)

if ((MAP[j][i] == MAP[j + 1][i]) && (MAP[j][i] != NUL))

a++;

if (a == B - 1)

{

win = whoMove;

return i + 4;//строки

}

else

a = 0;

}

for (int i = 0, j = A - 1; i < A; i++, j--)

if ((MAP[i][j] == MAP[i + 1][j - 1]) && (MAP[i][j] != NUL))

a++;

if (a == B - 1)

{

win = whoMove;

return 7;

}

else

a = 0;

for (int i = 0, j = 1; i < A; i++, j++)

if ((MAP[i][i] == MAP[j][j]) && (MAP[i][i] != NUL))

a++;

if (a == B - 1)

{

win = whoMove;

return 8;

}

else

a = 0;

}

После компиляции вышеуказанного кода перед разработчиком появляется стартовое окно программы (рисунок 6)

Рисунок 6 - Окно программы после компиляции проекта

Заключение

Таким образом в рамках курсового проекта было разработано программное средство, реализующее принципы игры Крестики - Нолики. Было проведено исследование компонентов и основных возможней программной среды разработки приложений Embarcadero Rad Studio, изучены процедуры и функции, реализуемые в рамках курсового проекта.

В результате разработки программного средства выявлены следующие недостатки:

Работоспособность приложения только на Windows подобных операционных системах

К достоинствам разработанного приложения можно отнести:

Программа малотребовательна к ресурсам ЭВМ, за счет чего достигается высокая скорость работы.

Список литературы

  1. Начальный курс С и С++.: Учебник. /Б. И. Березин. Москва:"ДИАЛОГ-МИФИ",1999г.
    Язык программирования С++. : Учебник. /. Страуструп. Киев:"ДиаСофт", 1993 г.
  2. Введение в язык С++: Учебник. / Бьярн Страустрап.
  3. – СПб.: 1995.
  4. Структуры и алгоритмы обработки данных: Учебник. / Матьяш В.А., Путилов В.А., Фильчаков В.В. , Щёкин С.В. - Апатиты, КФ Петр ГУ, 2000
  5. С++ /Дэвис Стефан Р.,4-е издание : Пер. с англ.:- М.: Издательский дом «Вильямс»,2003
  6. Основы программирования: Учеб. Для сред. проф. образования /И.Г.Семакин, А.П.Шестаков. – М., 2006.
  7. С++ экспресс курс: Учебник. /Лаптев В.В. – СПб.: БХВ- Петербург 2004.
  8. С++ учебный курс: Учебник. /Франка П. – СПб.: Питер 2005.
  9. МОДЕЛИ И CТРУКТУРЫ ДАННЫХ:/ Учебное пособие/
    Д.Далека, А.С. Деревянко, О.Г.Кравец, Л.Е. Тимановская -Харьков: ХГПУ, 2000

  10. Высшая математика для экономистов: учебник для студентов вузов/Н.Ш.Кремер,3-е издание.-М.:ЮНИТИ-ДАНА,2006