Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursovaya_rabota.doc
Скачиваний:
5
Добавлен:
21.12.2018
Размер:
368.13 Кб
Скачать

2 Описание программного обеспечения

2.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;//и меняем направление

}

2.2 Общие сведения

Наименование программы: игра-аркада «Батут».

Разработчик: Севрюкова А.В., ИКИТ СФУ, ФИВТ, КИ 10-15.

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

Получается, что, играя в логические игры, активизируется мышление игрока.

2.2.1 Список файлов

batut.exe - файл для запуска программы.

batut.sln - файл проекта на языке C++.

Resources - папка с ресурсами для игры (картинки, звуки).

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

Процессор: Pentium IV и выше.

RAM: 16Mb и выше.

Видеокарта: 4Mb и выше.

Свободное дисковое пространство: 40Mb.

2.3 Состав программы

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); //и обводим этот блок

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]