ЗАДАНИЕ
При написании программы были поставлены следующие задачи:
- программа должна иметь поле, где будут расставлены выбиваемые кирпичи и ракетка с шариком;
- реализовать меню, включающее в себя выбор уровня, начало игры, таблицу рекордов и выход из игры;
- реализовать движение ракетки с шариком влево и вправо, не разрешая выход за границы игрового поля;
- рассчитать угол отражения шарика, в зависимости от места его падения на ракетку.
КАЛЕНДАРНЫЙ ГРАФИК
выполнения курсовой работы
Наименование и содержание этапа (раздела) | Срок выполнения |
Постановка задачи. Изучение необходимой учебной и научно-технической литературы | 03.09.2011 – 24.09.20011 |
Разработка структуры данных и алгоритма решения задачи | 17.09.2011 – 08.10.2011 |
Написание текста программы | 01.10.2011 – 19.11.2011 |
Тестирование и отладка программного продукта | 29.10.2011 – 19.11.2011 |
Оформление отчета о проделанной работе | 26.11.2011 – 03.12.2011 |
Сдача работы руководителю и защита работы | 03.12.2011 – 24.12.2011 |
СОДЕРЖАНИЕ
Введение..................................................................................................... 5
1 Решение задачи....................................................................................... 6
2 Описание программного обеспечения................................................... 7
2.1 Программная реализация................................................................ 7
2.2 Общие сведения................................................................................ 9
2.2.1 Список файлов......................................................................... 9
2.2.2 Технические требования.......................................................... 9
2.3 Состав программы............................................................................ 10
2.4 Алгоритм........................................................................................... 13
Заключение................................................................................................. 17
Список использованных источников........................................................ 18
Приложение А Руководство системного программиста.......................... 19
Приложение Б Руководство пользователя............................................... 20
ВВЕДЕНИЕ
Данная программа представляет собой полностью реализованную компьютерную аркадную игру «Батут» в режиме компьютер-игрок. Целью этой игры является прохождение максимально большого количества уровней и набора максимального количества очков. Уровень считается пройденным, если удалось разбить все кирпичи на поле отраженным ударами шариком.
Игра подойдет детям для развития координации движений, развивает быструю реакцию и глазомер.
Решение задачи
Языки высокого уровня были разработаны для ускорения процесса программирования, на них иногда достаточно написать всего один оператор для решения реальной задачи. Очевидно, что эти языки гораздо удобнее с точки зрения программистов по сравнению с языками ассемблера и машинными кодами. Язык программирования С++ относится к числу наиболее мощных, гибких и наиболее распространенных языков программирования высокого уровня, поэтому я и выбрала именно этот язык для написания игры.
При запуске программы пользователю предоставляется меню, с помощью которого он может выбрать нужный ему раздел (рисунок 1). Для осуществления простоты навигации и ”лёгкого” интерфейса предусмотрены вложенные подменю. После завершения работы программа возвращается в главное меню.
Рисунок 1 – Главное меню, новая игра
Описание программного обеспечения
Программная реализация
Программа написана на языке C++. Этот язык выбран по причине того, что он является наиболее гибким, удобным и к тому же наиболее понятным. Все функции находятся в пределах одного файла. Программа состоит из формы, которая является диалоговым окном игры, и формы, через которую записываются результаты выполнения уровней.
Также прописаны карты, созданные нами (рисунок 2).
Рисунок 2 – Выбор карты
Данный программный продукт предусматривает наличие файла: batut.exe.
Движение мяча определяет попадание мяча по кирпичику. Так как суть игры в том, чтобы сбить все кирпичики, нужно привести часть кода, чтобы показать, как реализуется направление мяча.
Перемещение шарика осуществляется по координатам x и y (учитывается количество жизней):
ball.x+=ball_d.x; //перемещение мячика
ball.y+=ball_d.y;
if(ball.y+ball_s/2>400) //если мяч упал до низа (проигрыш)
{
heals--; // -1 жизнь
label1->Text="x"+Convert::ToString(heals); //обновляем отображение жизней
if(heals) //если еще есть жизни
{
board.set((400-board_w)/2,400-board_h);//перемещаем доску и мяч в исходное состояние
ball.set(400/2,300);
ball_d.set(0,4); //задаем направление мяча
}
else
{
timer2->Stop();//останавливаем таймер игры
textBox2->Visible=1;//делаем видимое поле для ввода имени
}
}
if(ball.x+ball_s/2>400 || ball.x-ball_s/2<0) //отскок мяча от левой и правой стенок
{
ball_d.x*=-1; //меняем направление по Х
}
if(ball.y-ball_s/2<0)//отскок мяча от потолка
{
ball_d.y*=-1;
}
if(ball.y+ball_s/2>board.y && ball.x>board.x && ball.x<board.x+board_w)//удар мяча об доску
{
float x;
x=(((ball.x-board.x)*600)/(board_w*100))-3; // изменяем угол отражения (сильнее или слабее) на значение от -3 до 3
ball_d.x+=x;
if(ball_d.x>3)//если приращение по модулю больше 3
ball_d.x=3;
if(ball_d.x<-3)
ball_d.x=-3;
ball_d.y=4-abs(ball_d.x);//преращение по У расчитываем как 4(скорость) - приращенеи по Х
ball_d.y*=-1;//и меняем направление
}
Общие сведения
Наименование программы: игра-аркада «Батут».
Разработчик: Севрюкова А.В., ИКИТ СФУ, ФИВТ, КИ 10-15.
Назначение программы: Как правило, такие игры не требуют определенной стратегии, важна лишь скорость реакции, четкость движений и отличный глазомер. Таким образом, игра предназначена для тренировки рук и скорости.
Получается, что, играя в логические игры, активизируется мышление игрока.
Список файлов
batut.exe - файл для запуска программы.
batut.sln - файл проекта на языке C++.
Resources - папка с ресурсами для игры (картинки, звуки).
Технические требования
Процессор: Pentium IV и выше.
RAM: 16Mb и выше.
Видеокарта: 4Mb и выше.
Свободное дисковое пространство: 40Mb.
Состав программы
struct XY - структура координат поля игры.
board, ball – координаты шарика и ракетки, приращения их движения.
board_d, ball_d – приращени движения шарика и ракетки.
static int Score – счет, для записи в таблицу рекордов.
static int heals – количество жизней.
array<String^>^ file – массив уровней.
static int **bricks; - массив из выбиваемых кирпичей.
Results=new rec[11] – массив результатов.
В данном фрагменте кода рисуются кирпичи (блоки). Описывается выбивание кирпичей, осуществляется пересчет очков и определяется направление шарика, после удара о блок:
int left,right,top,bottom,i,j;
int b_r=ball_s/2;
SolidBrush^ Brick_Brush = gcnew SolidBrush(Color::Green); //кисть для блоков
Pen^ Brick_Pen=gcnew Pen(Color::DarkGreen); //кисть для обводки блоков
bool can_change=1; for(i=0;i<10;i++) //проход по массиву с блоками
{for(j=0;j<10;j++)
{ top=i*brick_h; //опеределение границ текущего блока
bottom=top+brick_h;
left=j*brick_w;
right=left+brick_w;
if((ball.x-b_r<right && ball.x+b_r>left)&&(ball.y+b_r>top && ball.y-b_r<bottom)) //если мячик коснулся блока
{ if(bricks[i][j]==2) //если блок типа 2
{ bricks[i][j]=1; //делаем его типом 1
Score+=100; //добавляем 100 очков
textBox1->Text=Score.ToString();
if(can_change)//если за текущее перемещение мяча он еще не был отражен
{if(ball.x+b_r>left && ball.x+b_r<left+5) //определяем сторону блока, куда коснулся мяч
{
ball_d.x*=-1;//отскок мяча
}
if(ball.x-b_r<right && ball.x-b_r>right-5)
{
ball_d.x*=-1;
}
if(ball.y+b_r>top && ball.y+b_r<top+5)
{
ball_d.y*=-1;
}
if(ball.y-b_r<bottom && ball.y-b_r>bottom-5)
{
ball_d.y*=-1;}
can_change=0; //больше за текущее перемещение мяча, мы не сможем поменять его направление
}
} else
if(bricks[i][j]==1) //если тип блока 1
{coutn--;//вычитаем из количества блоков 1
bricks[i][j]=0;//убираем его
Score+=100;
textBox1->Text=Score.ToString();
if(can_change) {
if(ball.x+b_r>left && ball.x+b_r<left+5)
{
ball_d.x*=-1;
}
if(ball.x-b_r<right && ball.x-b_r>right-5)
{ ball_d.x*=-1;
}
if(ball.y+b_r>top && ball.y+b_r<top+5)
{
ball_d.y*=-1;
}
if(ball.y-b_r<bottom && ball.y-b_r>bottom-5)
{
ball_d.y*=-1;
}
can_change=0;
}
}
}
if(bricks[i][j]!=0) //если блок не 0, т.е. есть
{
switch(bricks[i][j]) //выбор типа блока
{
case 1:
Brick_Brush->Color=Color::Green; //рисуем зеленым
g->FillRectangle(Brick_Brush,left,top,brick_w,brick_h);
break;
case 2:
Brick_Brush->Color=Color::Blue; //и синим соответственно
g->FillRectangle(Brick_Brush,left,top,brick_w,brick_h);
break;
}
g->DrawRectangle(Brick_Pen,left,top,brick_w,brick_h); //и обводим этот блок
}
}
}
Алгоритм
При запуске программы открывается окно игры с заставкой (рисунок 1). Сверху имеется вкладка «Игра», включающаяся в себя разделы «Новая игра», «Результаты» и «Выход». Зайдя в раздел «Новая игра», можно выбрать уровень, либо начать игру сначала. При выборе «Играть!» в разделе «Новая игра», начинается игровой процесс, где пользователю предстоит, управляя отскакивающим от ракетки шариком, разбивать кирпичи (рисунок 3).
Рисунок 3 – Начало игры
Рисунок 4 – Игровой процесс
При прохождении игры или проигрыше открывается поле для ввода имени, куда можно вписать свое имя, для того, чтобы впоследствии его можно было найти в таблице рекордов (рисунок 5).
Рисунок 5 – Запись в таблицу рекордов
После ввода имени откроется окно с лучшими результатами предыдущих игроков (рисунок 6). Также таблицу рекордов можно посмотреть, зайдя в раздел «Игра»/ «Результаты». При нажатии «Выйти» программа закрывается.
Рисунок 6 – Просмотр таблицу рекордов
Рисунок 7 – Блок-схема организации главного меню
ЗАКЛЮЧЕНИЕ
Разработанный программный продукт удовлетворяет всем указанным в начале отчета требованиям.
Основными достоинствами продукта являются простота использования, так как программа рассчитана на неподготовленного пользователя к работе со сложным интерфейсом пользователя.
Перспективы развития данного продукта связаны с усовершенствованием интерфейса. Также изменения могут касаться и того, чтобы усложнить поставленную задачу. Например, сделать падающие бонусы, которые могут превращать игрока в различных могущественных существ, которые быстрее разбивают кирпичи. Конечно же, вариантов развития не мало.
В настоящее время разработанный программный продукт может использоваться по назначению.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Егорова, Е.В. Программирование на языке высокого уровня. Часть II: учеб. / Е.В. Егорова. – Барнаул: изд-во Дрофа, 1998 – 176 с.
2 Павловская, Т.А. С/С++ программирование на языке высокого уровня: учеб. / Т.А. Павловская. – СПб.: изд-во Питер, 2009 – 203 с.
3 Лафоре, Р. Объектно-ориентированное программирование в С++, классика Computer Science. / Р. Лафоре. – СПб.: изд-во Питер, 2004 – 187 с.
4 Давыдов, В.Г. Технологии программирования С++ / В.Г. Давыдов – СПб.: изд-во БХВ-Петербург, 2005 – 305 с.
5 Шилдт, Г. С/С++. Справочник программиста / Г.Шилдт. – М.: изд-во Вильямс, 2007 – 593 с.
ПРИЛОЖЕНИЕ А