ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.09.2024

Просмотров: 22

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Міністерство освіти і науки, молоді та спорту України

Сумський державний університет

Машинобудівний коледж

“Погоджено”

Глава циклової комісії спеціальності 5.05010101

______________________

“____”________________

“Затверджую”

Завідувач відділенням

спеціальності 5.05010101

______________________

“____”________________

КУРСОВА РОБОТА

Зпредмету_____“Об'єктно-орієнтоване програмування”________ _____________________________________________________

СПЕЦІАЛЬНІСТЬ 5.05010101

“Обслуговування програмних систем і комплексів”

ПОЯСНЮВАЛЬНА ЗАПИСКА

Тема:____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Студент

Група

Керівник проекту

__________________

__________________

__________________

__________________

__________________

2013

Зміст

1 Постановка задачі ………………………………………………………………………

2 Алгоритм розробки програми …………………………………………………………

3 Практична реалізація ………………………………………………………………..…

3.1 Опис структури даних та вимоги до неї …………………………………………

3.2 Опис стандартних функцій, що використовувалися у програмі ………………..

3.3 Опис функцій користувача …………………………………………………...…..

3.4 Опис файлів та їх призначення …………………………………………………..

4 Інструкції для роботи з програмою …………………………………………………...

5 Приклади тестування та результати роботи програми ……………………………..

Висновки ………………………………………………………………………………...

Література ……………………………………………………………………………….

Додаток А ……………………………….………………………………………………


Додаток Б ……………………………….………………………………………………

Додаток В ……………………………….………………………………………………

Додаток Г ……………………………….………………………………………………

1 Постановка задачі

Практичне завдання

Створити програму «Гра в тетріс» на базі об’єктно орієнтованого середовища C++ Builder.

Вимоги до програми

Програма повинна мати зручне меню для виконання поставлених завдань. Виконання завдань здійснюється шляхом вибору відповідного пункту меню.Основні пункти меню програми:

  • початок гри;

  • довідка для користувача;

  • меню яке видає інформаціо про гру;

  • вихід із гри;

Всі функції повинні бути розміщенні у відповідних модулях.

2 Алгоритм розробки програми

1. Створити файли: основний файл з програмою та файли модулів для виконання поставлених задач.

2. В основному файлі підключити всі модулі та реалізувати зручне меню для роботи з програмою.

3. Реалізувати функції для виконання поставлених задач:

3.1. Реалізувати функцію яка дозволить у грі підвищувати рівні.

3.2. Реалізувати функцію вибору фігури.

3.3. Реалізуватифункцію керування фігурами.

3.4. Реалізувати функцію опису програми.

3.5. Реалізувати функцію завершення гри.

3 Практична реалізація

3.1 Опис структури даних та вимоги до них

int TimeLevel – змінна для візначення часу на кожен рівень.

int Score – змінна для підрахунку очків.

int SkillLevel – змінна для визначення рівня гри.

int SkillSpd – змінна для визначення швидкості падіння фігур.

int xNextPiece -змінна для визначення наступної фігури.

3.2 Опис стандартних функцій, що використовувалися у програмі

void __fastcall Form::FormCreate(TObject *Sender) – функція обробки події створення форми.

void __fastcall Form::ButtonClick(TObject *Sender) – функція обробки події натиснення на кнопку.

void __fastcall Form::EditKeyPress(TObject *Sender,Key) – функція обробки події вводу значення в поле.

void __fastcallShow(TObject *Sender) – функція відображення елементів форми на екрані.

void __fastcall Hide(TObject *Sender) – функція не відображення елементів форми на екрані.


void __fastcall Hide(TObject *Sender) - функція закриття форми.

void __fastcall ShowMessage(AnsiString Value) – функція відображення повідомлення.

3.3 Опис функційкористувача

void __fastcall TfrmMain::StickPiece(void) – функція фіксування фігури.

void __fastcall TfrmMain::RemoveRow(int Row) – функція видалення лінії.

bool __fastcall TfrmMain::Collision(int direction)–функція для злиття фігур.

void __fastcall TfrmMain::sbRotateClick(TObject *Sender) –функція перевороту фігури.

void __fastcall TfrmMain::NewPiece(int Type)–функція вибору та відображення наступної фігури.

3.4 Опис модулів та їх призначення

Main.h – модуль основної програми. Виводить вікно основної програми, яка об’єднує всі інші модулі та керує виконанням основної програми.

Piece.h – модуль, де описані фігури.

Unit1.h – модульдовідки.

Unit2.h – модуль виводу інформації про программу.

4 Інструкції для роботи з програмою

Для початку роботи запустіть файлTetris.EXE, після чогоз’явитися на екрані з’явиться вікно програми, в верхній частині якоїзнаходиться меню. Для виконання завдань, виберіть відповідний пункт меню.

Пункти меню:

  1. Игра. Вибравши цей пункт перед Вами з’явиться два підпункти:

  • Новая. Вибравши цей підпункт почнеться нова гра.

  • Выход. Вибравши цей підпункт програма завершить роботу.

  1. Справка.Вибравши цей пункт перед Вами з’явиться два підпункти:

  • Справка. Вибравши цей підпункт перед Вами з’явиться вікно, де буде описано за що відповідає кожна клавіша та як керувати фігурами.

  • О программе.Вибравши цей підпункт перед Вами з’явиться вікно, де буде написано назву гри та її версію.


5 Приклади тестування та результати роботи програми

Рис.1Старотове вікно прогорами.

Рис.2 Початок нової гри.

Рис.3 Процес гри.

Рис.4 Завершення гри.

Висновки

Під час розробки курсового проекту язакріпив, поглибив та узагальнив знання, якими оволодів під час вивчення курсу, в набутті навичок використання основ алгоритмізації та програмування на алгоритмічних мовах високого рівня з використанням принципів об’єктно-орієнтованого проектування та програмування в середовищі «BorlandC++ Builder». Я застосував навички, набуті протягом навчання длястворення програми, для роботи з різними функціями. Ця програма дозволяєкористувачуграти в «Тетріс». Та під час гри користувач заробляєте очки та його рівень зростає.

Підвівши підсумки я зрозумів, що «BorlandC++ Builder» є гнучкою та алгоритмічною мовою програмування, і добре підходить як для початківця так і для досвідченого програміста. Широкий набір функцій та модульність дозволяє швидко та якісно створювати програмний продукт. Знання основ алгоритмізації та програмування з використанням принципів об’єктно-орієнтованого проектування ПЗ різних задач на ЕОМ необхідно для подальшого використання у розробці програмного забезпечення сучасних складних технічних систем та комп’ютерних систем управління.

Література

  1. Архангельский А.Я. Программирование в C++ Builder, 7 изд.,Бином,2010. — 1304 с.

  2. Бобровский С. Самоучитель программирования на C++ в системе C++ Builder. ДЕСС, 2003. — 810 с.

  3. Культин Н.Б. Самоучитель C++ Builder., Высшая школа,2006. — 380 с.

  4. Архангельский А.Я. C++ Builder 6 справочное пособие, 2005. — 635 с.

  5. Алексанкин Т.А. BorlandC++, 2003— 540 с.

  6. Ермолаев В., Сорока Т. C++ BuilderКнига рецептов, 2003. — 560 с.

  7. Культин Н.Б. C++ Builderв задачах и примерах, 2000. — 400 с.

  8. Бобровский С. Технологии C++ Builder.,2005. — 490 с.

  9. Парта С. Язык программирования C++ Лекции и упражениния, 1999. – 630 с.


Додаток а

#include <vcl.h>

#pragma hdrstop

#include "Main.h"

#include "Piece.h"

#include "Unit1.h"

#include "Unit2.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

const int MaxTiles = 320;

tPiece *Piece = NULL;

tPiece *nPiece = NULL;

TPanel *BoardTile[MaxTiles];

int BoardColHeight[MaxTiles * 16];

int BoardWidth;

int TimeLevel = 1000;

int Score = 0;

int DropHeight = 0;

int SkillLevel = 1;

int PieceCount = 0;

int SkillPcs[] = { 15, 30, 45, 60, 75, 90, 105, 120, 135, 150 };

int SkillSpd[] = { 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100 };

int xNextPiece = 0;

int vubor = 0;

int Piecetype = 10;

bool debug = false;

TColor BaseColor;

TfrmMain *frmMain;

__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {

randomize();

if(debug) BaseColor = clGray;

else BaseColor = clBlack;

BoardWidth = (Board->Width / 25);

for(int x = 0; x < MaxTiles; x++) {

BoardTile[x] = new TPanel(this);

BoardTile[x]->Height = 25;

BoardTile[x]->Width = 25;

Board->InsertControl(BoardTile[x]);

div_t N = div(x, BoardWidth);

BoardTile[x]->Left = N.rem * 25;

BoardTile[x]->Top = N.quot * 25;

if(debug) BoardTile[x]->Caption = x;

ShowTile(x, BaseColor, debug);

}}

void __fastcall TfrmMain::FormCreate(TObject *Sender) {

FeatureTestButton->Hide();

//Form1->Hide();

{

Panel1->Canvas->Brush->Color=clBlue;

Panel1->Canvas->Brush->Style=bsCross;

Panel1->Canvas->RoundRect(25,25,225,225,15,15);

}

return;}

void __fastcall TfrmMain::RemoveRow(int Row) {

// test->Caption = "Removed Row " + AnsiString(Row) + " ";

// for(int x = 0; x < BoardWidth; x++) ShowTile(Row + x, BaseColor, false);

int Start = Row + BoardWidth - 1;

int End = BoardWidth;

for(int x = Start; x > End; --x) {

int Target = x;

int Source = x - BoardWidth;

ShowTile(Target, BoardTile[Source]->Color, BoardTile[Source]->Color != BaseColor);

}

return;

}

void __fastcall TfrmMain::StickPiece(void) {

int ScoreAdd = SkillLevel * Piece->Blocks;

PieceTimer->Enabled = false;

int Corner = (Piece->Left / 25) + (BoardWidth * (Piece->Top / 25));

for(int x = 0; x < Piece->Blocks; x++) {

if(Piece->Divs[x]->Color == BaseColor) continue;

div_t N = div(x, (Piece->Width / 25));

int Tile = Corner + N.rem + (N.quot * BoardWidth);

ShowTile(Tile, Piece->Divs[x]->Color, true);

}

// Check for lines

int RowCount = 0;

for(int x = 0; x < (MaxTiles / BoardWidth); x++) {

int Row = x * BoardWidth;

bool RowDone = true;

for(int y = 0; y < BoardWidth; y++) if(BoardTile[Row + y]->Color == BaseColor) RowDone = false;

if(RowDone) {

RemoveRow(Row); RowCount++;

ScoreAdd = ScoreAdd + (BoardWidth * RowCount * SkillLevel);

}

// test->Caption = "Added " + AnsiString(ScoreAdd) + " ";

}

// Check for End Game

if(Piece->Top < 0) {

PieceTimer->Enabled = false;

sndPlaySound("EndGame.wav", SND_ASYNC | SND_FILENAME);

int result = Application->MessageBox("Играть еще ?", "Игра окончена!", MB_YESNO);

if(result == 6) btnStartClick(this);

return;

}

// Check Level

if(++PieceCount > SkillPcs[SkillLevel - 1]) {;

TimeLevel = SkillSpd[SkillLevel++];

test->Caption = "Level " + AnsiString(SkillLevel);

Beep();