Игра "Арканоид"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.02.2012
Размер файла 371,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Национальный исследовательский Томский политехнический университет

Институт кибернетики

Направление 230100 «Информатика и вычислительная техника»

Кафедра вычислительной техники

«Программирование на языке высокого уровня»

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

«ИГРА АРКАНОИД»

Выполнил:

студент гр. 8В01

Ю.К.Баштовой

Проверил:

ассистент кафедры ИПС

Т.К. Погребная

Оглавление

1. Введение

1.1 Наименование продукта

1.2 Краткая характеристика области применения

2. Основание для разработки

2.1 Документ, на основании которого ведется разработка

2.2 Организация, утвердившая документ

3. Назначение разработки

4. Требование к разработке

4.1 Требования к функциональным характеристикам

4.2 Требования к надежности

4.3 Требования к составу и параметрам технических средств

4.4 Требования к информационной и программной совместимости

5. Требования к программной документации

6. Порядок контроля и приёмки

Проект программы

1. Введение

2. Проработка программных средств

3. Способ реализации

3.1 Введённые класс и структуры

3.2 Переопределение стандартных операций для абстрактных типов данных

4. Руководство по использованию

5. Тестирование программы

6. Заключение

7. Список использованных источников

Приложение. Листинг программы

1. ВВЕДЕНИЕ

1.1 Наименование продукта

Программная реализация игры- «АРКАНОИД».

1.2 Краткая характеристика области применения

Игра «Арканоид» представляет собой однопользовательскую игру. Предназначена для развлечения пользователей.

2. ОСНОВАНИЕ ДЛЯ РАЗРАБОТКИ

2.1 Документ, на основании которого ведется разработка

Задание на курсовую работу по дисциплине «Программирование на языке высокого уровня».

2.2 Организация, утвердившая документ

Томский политехнический университет.

3. НАЗНАЧЕНИЕ РАЗРАБОТКИ

Программа относится к разряду развлекательных. Она дает любителям компьютерных игр провести свободное.

4. ТРЕБОВАНИЯ К РАЗРАБОТКЕ

4.1 Требования к функциональным характеристикам

Программа должна осуществлять управление с помощью клавиатуры.

Программа должна иметь возможность записывать и хранить рекорды игроков.

4.2 Требования к надежности

Программа не должна самостоятельно завершаться или выдавать ошибку при корректных действиях пользователя.

4.3 Требования к составу и параметрам технических средств

Для функционирования программы «Арканоид» необходим компьютер IBM PC совместимый и следующие технические средства:

· процессор Intel или совместимый;

· объем свободной оперативной памяти 16 Мб;

· объем необходимой памяти на жестком диске 32 Мб;

· стандартный VGA-монитор или совместимый, с поддерживаемым разрешением от 1024х768;

· 3D-ускоритель с объёмом оперативной памяти больше 32 Мб

· стандартная клавиатура;

· манипулятор «мышь».

4.4Требования к информационной и программной совместимости

Для функционирования программы «Арканоид» необходимо наличие операционной любой системы. Язык интерфейса - русский.

5. ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ

Предварительный состав программной документации:

· «Техническое задание», текст программы с комментариями, описание алгоритма и программы.

· «Руководство пользователя».

6. ПОРЯДОК КОНТРОЛЯ И ПРИЕМКИ

Приемка должна осуществляться в соответствии с документами «Техническое задание».

Проект программы

1. Введение

Данная курсовая работа является примером реализации задачи игры «Акрканоид», написанной с применением объектно-ориентированного программирования на языке высокого уровня С++. На экране отображается игровое поле, а также текущая статистика игры..

Цель курсовой работы по дисциплине «Программирование на языке высокого уровня» состоит в закреплении и углублении знаний и навыков, полученных при изучении дисциплины. Курсовая работа представляет собой индивидуальное задание повышенной сложности по разработке программы на изучаемом языке высокого уровня.

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

2. Проработка программных средств

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

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

Основные среды языка C++: Visual C++, C++ Builder, Borland C++.

Таким образом, для разработки программы была выбрана среда программирования Visual Studio 2010. Для использования двухмерной и трёхмерной графики было выбрано API - OpenGL.

3. Способ реализации

Основные функции

Virtual void draw( )- виртуальная функция рисования;

void draw( )- фунуция отрисовки;

void calculate( )- функция пересчета координат;

void __fastcall TForm1::Button1Click(TObject *Sender) - функция, дающая старт игры при нажатии на кнопку;

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift) - функция, обработки нажатия клавиш влево и вправо, изменяющая скорость платформы;

void __fastcall TForm1::Timer1Timer(TObject *Sender) - функция, перерисовки объектов по таймеру;

void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift) - функция обработки отпускания мыши, для определения конца движения платформы;

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)- функция, запускающая шар при нажатии на клавишу;

void __fastcall TForm1::Button3Click(TObject *Sender) - функция, отображения рекордов,считанных из файла;

Классы

class Base - базовый класс, от которого наследуются, все классы объектов в игре : class Block, class Player, class Ball;

class Block - класс, описвающий блоки, которые надо разбить в игре;

class Player - класс, описывающий ракетку игрока,которой игрок отбивает мячик;

class Ball - класс, описывающий мячик, который разбивает блоки;

Деструкторы

~Block() - деструктор, котрый увелиивает счет, когда игрок разбивает блоки мячиком;

~Ball() - деструктор, отнимающий жизни и проверяющий конец игры

РУКОВОДСТВО ПО ИСПОЛЬЗОВАНИЮ

Процедура установки

Установка игры осуществляется копированием её программных файлов в каталог на жестком диске.

Процедура удаления

Удаление игры может быть произведено путем удаления её каталога с жесткого диска.

Запуск программы

Запуск осуществляется путем запуска исполняемого файла arcanoid.exe из директории программы на жестком диске.

В программе реализован графический интерфейс. При загрузке программы отображается главное меню программы со следующими пунктами:

1. Играть

2. Лучший результат

3. Справка

4. Выход

Навигация по меню осуществляется с помощью мыши. Для выбора пункта меню пользователю необходимо навести курсор на нужный пункт и нажать левую кнопку мыши.

Рис. 1. Главное меню

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

Правила игры: игровое поле содержит блоки различного цвета. Суть игры - с помощью мячика разбить больше блоков.

За каждый удаленный блок вам начисляются очки. Количество очков за удаленный блок 100, за блок который поменял цвет 50.

Количество очков, количество жизней и кнопка «Главное меню» отображаются в верхней части экрана.

Игра заканчивается, когда пользователь выбивает все блоки. Программа автоматически переводит игру на следующий уровень. Также игра может закончиться, если у пользователя кончатся жизни. Если количество очков набранное пользователем в процессе игры попадает в таблицу рекордов, то программа предлагает ввести имя игрока. По окончании ввода пользователю необходимо нажать клавишу «Enter».

Рис. 3. Игровой процесс

При выборе пользователем пункта «Records» открывается окно с таблицей рекордов и кнопкой ОК. Нажатие левой кнопки мыши на кнопке ОК возвращает в главное меню.

Рис. 4. Окно «Рекорды»

При выборе пользователем пункта «Справка» открывается окно со справкой. Для выхода необходимо навести курсор на кнопку «Продолжить» и нажать левую кнопку мыши.

Рис. 5. Окно «Справка»

При выборе пункта Exit происходит выход из программы.

4. Тестирование программы

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

5. ЗАКЛЮЧЕНИЕ

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

В целом данная работа помогла лучше освоить язык С++ и улучшить свои навыки программирования.

6. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

программа данное операция информационный

Андре Ламот - Программирование игр для Windows.

ПРИЛОЖЕНИЕ. Листинг программы

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <stdlib.h>

#include <iostream.h>

#include <fstream.h>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

class Ball;

class Block;

class Player;

Ball* ball;

Block** bl;

Player* pl;

int N;

int lvl = 1;

//базовый класс, от которого наследуются все классы

//объектов в игре (кубики, мяч, игрок)

class Base {

public:

int x;

int y;

virtual void draw() = 0; //Виртуальная функция рисования

Base(int x, int y) {

this->x = x;

this->y = y;

}

};

//Класс описывающий кубики, которые ндао разбивать

class Block: public Base {

public:

int type;

Block(int x, int y, int type):Base(x, y) {

this->type = type;

}

//Деструктор который увеличивает счет

~Block() {

Form1->Label2->Caption = StrToInt(Form1->Label2->Caption) + 100;

}

//отрисовка кубика исходя из его типа и координат

void draw() {

Form1->Image1->Canvas->Brush->Color = type == 1 ? clRed: clBlue;

Form1->Image1->Canvas->Rectangle(x-10, y-10, x+10, y+10);

Form1->Image1->Canvas->Brush->Color = clWhite;

}

};

//Класс описывающий платформу игрока

class Player: public Base {

public:

int vx;

bool cather;

Player(int x, int y):Base(x, y) {

vx = 0;

cather = false;

}

//пересчет координат платформы исходи из её скорости по горизонтали

void calculate() {

if (vx!= 0) {

x += vx;

} else {

return;

}

if (x > 330) {

x = 330;

vx = 0;

}

if (x < 20) {

x = 20;

vx = 0;

}

}

//отрисовка платформы в текущих координатах

void draw() {

Form1->Image1->Canvas->Pen->Color = cather ? clRed: clBlack;

Form1->Image1->Canvas->MoveTo(x - 20, y + 3);

Form1->Image1->Canvas->LineTo(x - 10, y - 3);

Form1->Image1->Canvas->LineTo(x + 10, y - 3);

Form1->Image1->Canvas->LineTo(x + 20, y + 3);

Form1->Image1->Canvas->LineTo(x - 20, y + 3);

Form1->Image1->Canvas->Pen->Color = clBlack;

}

};

//Класс описывающий мячик, который сбивает кубики

class Ball: public Base {

public:

int vx;

int vy;

Ball(int x, int y):Base(x, y) {

this->vx = 6;

this->vy = -6;

}

//Деструктор, отнимающий жизни и проверяющий конец игры

~Ball() {

Form1->Label4->Caption = StrToInt(Form1->Label4->Caption) - 1;

if (StrToInt(Form1->Label4->Caption) == 0) {

ShowMessage("GAME OVER!");

Form1->Button1Click(NULL);

}

ball = NULL;

}

//пересчет координат исходя из скоростей мяча

//проверка ударения об стены, платформу и кубик

void calculate() {

x += vx;

y += vy;

if (x < 6 || x > Form1->Image1->Width - 6) {

vx = -vx;

x += vx;

}

if (y < 6) {

y = 6;

vy = -vy;

}

if (y > Form1->Image1->Height) {

delete ball;

}

if (pl->y - y < 9 &&

abs(x - pl->x) < 20) {

if (pl->cather) {

ball = NULL;

pl->cather = false;

return;

}

if (abs(x - pl->x) > 10) {

vx = -vx;

}

y = pl->y - 3;

vy = -vy;

}

//проверка ударения об кубик

for (int i = 0; i < N; i++) {

if (bl[i] && abs(x - bl[i]->x) < 13 && abs(y - bl[i]->y) < 13) {

if (abs(x - vx - bl[i]->x) > abs(y - vy - bl[i]->y)) {

vx = -vx;

}else {

vy = -vy;

}

if (bl[i]->type == 0) {

delete bl[i];

bl[i] = NULL;

}else {

bl[i]->type--;

Form1->Label2->Caption = StrToInt(Form1->Label2->Caption) + 50;

}

}

}

}

//отрисовка мяча в текущих координатах

void draw() {

Form1->Image1->Canvas->Ellipse(x-3, y-3, x+3, y+3);

}

};

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//Старт игры, который происходит при нажатии на кнопку

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//Добавление нового рекорда в файл путем считывания старых

//и определение положения нового рекорда в данном списке

//Вызывается при повторном запуске игры из главного меню

ifstream fin("record.txt");

int score[3];

char str[3][10];

for (int i = 0; i < 3; i++) {

fin >> str[i];

fin >> score[i];

}

fin.close();

int scr = StrToInt(Form1->Label2->Caption);

if (scr > score[2]) {

if (scr > score[1]) {

if (scr > score[0]) {

for (int i = 0; i < 2; i++) {

score[2-i] = score[1-i];

strcpy(str[2-i], str[1-i]);

}

strcpy(str[0], InputBox("Арканоид", "Введите свое имя", "Игрок").c_str());

score[0] = scr;

}else {

score[2] = score[1];

strcpy(str[2], str[1]);

strcpy(str[1], InputBox("Арканоид", "Введите свое имя", "Игрок").c_str());

score[1] = scr;

}

}else {

strcpy(str[2], InputBox("Арканоид", "Введите свое имя", "Игрок").c_str());

score[2] = scr;

}

}

ofstream fout("record.txt");

for (int i = 0; i < 3; i++) {

fout << str[i] << " ";

fout << score[i] << endl;

}

fout.close();

delete ball;

delete pl;

for (int i = 0; i < N; i++) {

delete bl[i];

}

delete[] bl;

Image1->Visible = false;

Timer1->Enabled = false;

Button1->Visible = false;

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Memo1->Visible = false;

Button2->Visible = true;

Button3->Visible = true;

Button4->Visible = true;

Button5->Visible = true;

}

//Функция обработки нажатий клавиш влево/вправо

//изменяющая скорость платформы

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if (Key == VK_LEFT) {

if (pl != NULL) {

pl->vx = -10;

}

}

if (Key == VK_RIGHT) {

if (pl != NULL) {

pl->vx = 10;

}

}

}

//Перерисовка обьектов по таймеру

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Image1->Canvas->Rectangle(0, 0, Image1->Width, Image1->Height);

if (pl != NULL) {

pl->calculate();

pl->draw();

}

bool flag = true;

for (int i = 0; i < N; i++) {

if (bl[i] != NULL) {

bl[i]->draw();

flag = false;

}

}

//переход к следующему лвлу

if (flag) {

if (lvl == 1) {

ifstream fin("2lvl.txt");

fin >> N;

bl = new Block*[N];

int x, y, type;

for(int i = 0; i < N; i++){

fin>>x;

fin>>y;

fin>>type;

bl[i] = new Block(x, y, type);

bl[i]->draw();

}

fin.close();

ball = NULL;

lvl++;

} else if (lvl == 2) {

ifstream fin("3lvl.txt");

fin >> N;

bl = new Block*[N];

int x, y, type;

for(int i = 0; i < N; i++){

fin>>x;

fin>>y;

fin>>type;

bl[i] = new Block(x, y, type);

bl[i]->draw();

}

fin.close();

ball = NULL;

lvl++;

}else {

delete ball;

delete pl;

for (int i = 0; i < N; i++) {

delete bl[i];

}

delete[] bl;

Image1->Visible = false;

Timer1->Enabled = false;

Button1->Visible = false;

Label1->Visible = false;

Label2->Visible = false;

Label3->Visible = false;

Label4->Visible = false;

Button2->Visible = true;

Button3->Visible = true;

Button4->Visible = true;

}

}

if (ball != NULL) {

ball->calculate();

if (ball != NULL) ball->draw();

}

}

//Содание формы

void __fastcall TForm1::FormCreate(TObject *Sender)

{

randomize();

Image1->Canvas->Pen->Color = clBlack;

Image1->Canvas->Rectangle(0, 0, Image1->Width, Image1->Height);

}

//Функция обработки отпускания мыши, для определения конца движения платформы

void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if (pl != NULL) {

pl->vx = 0;

}

}

//Перевод фокуса на скрытый текст, для функционирования управления с помощью кнопок перемещения

void __fastcall TForm1::Button1KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

Edit1->SetFocus();

}

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Form1->Close();

}

//Старт игры, при котором происходит считывание уровня из файла и инициализация переменных

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Image1->Canvas->Rectangle(0, 0, Image1->Width, Image1->Height);

Image1->Visible = true;

Timer1->Enabled = true;

Button1->Visible = true;

Label1->Visible = true;

Label2->Visible = true;

Label3->Visible = true;

Label4->Visible = true;

Button2->Visible = false;

Button3->Visible = false;

Button4->Visible = false;

Button5->Visible = false;

Label2->Caption = 0;

Label4->Caption = 3;

ifstream fin("1lvl.txt");

fin >> N;

bl = new Block*[N];

int x, y, type;

for(int i = 0; i < N; i++){

fin>>x;

fin>>y;

fin>>type;

bl[i] = new Block(x, y, type);

bl[i]->draw();

}

fin.close();

pl = new Player(200, 350);

pl->draw();

Edit1->SetFocus();

}

//Запуск шара

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

if (Key == 32) {

if (ball == NULL) {

ball = new Ball(pl->x, pl->y - 3);

} else {

pl->cather = !pl->cather;

}

}

}

//Функция отображения рекордов, считанных из файла

void __fastcall TForm1::Button3Click(TObject *Sender)

{

ifstream fin("record.txt");

int score;

char str[10];

AnsiString st = "РЕКОРДЫ:\n";

for (int i = 0; i < 3; i++) {

fin >> str;

fin >> score;

st = st + str + " " + IntToStr(score) + "\n";

}

fin.close();

ShowMessage(st);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Memo1->Visible = true;

Button6->Visible = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Memo1->Visible = false;

Button6->Visible = false;

}

//---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • Создание базы данных для управления мебельным магазином: постановка задачи, требования к информационно-программной совместимости, составу и параметрам технических средств, документации. Разработка базы данных: структура таблиц, клиентское приложение.

    курсовая работа [1,8 M], добавлен 10.02.2013

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

    курсовая работа [496,0 K], добавлен 03.12.2010

  • Общие сведения об электронных учебниках, структура и функции. Обзор методов решения поставленной задачи и обоснование их выбора. Требования к информационной и программной совместимости, составу и параметрам технических средств. Характеристика программы.

    курсовая работа [3,0 M], добавлен 20.09.2014

  • Требования к составу и параметрам технических средств, информационной и программной совместимости. Разработка функциональных моделей автоматизированной системы "Деятельность бетонно-растворного узла". Интерфейс Web-приложения, руководство пользователя.

    курсовая работа [4,6 M], добавлен 04.10.2014

  • Требования к функциональным характеристикам, составу и параметрам технических средств, информационной и программной совместимости. Описание программы: общие сведения, логическая структура. Средства и порядок испытаний. Входные и выходные данные.

    курсовая работа [6,3 M], добавлен 12.01.2015

  • Назначение и цели создания системы. Требования к программе или программному изделию, к информационной и программной совместимости, к составу и параметрам технических средств. Алгоритм Rijndael. Назначение и условия применения программного продукта.

    дипломная работа [1,3 M], добавлен 01.03.2009

  • Этапы решения задачи классификации цифр арабского алфавита на основе нейронных сетей: выбор класса, структуры и пакета нейронной сети, ее обучение, требования к информационной и программной совместимости, составу и параметрам технических средств.

    реферат [111,6 K], добавлен 19.10.2010

  • Разработка игровой программы "разгадывания кроссворда". Создание схемы хранения данных, изучение возможности среды программирования. Требования к функциональным характеристикам, составу и параметрам технических средств, информационной совместимости.

    курсовая работа [403,9 K], добавлен 26.03.2015

  • Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.

    курсовая работа [1,5 M], добавлен 17.11.2010

  • Анализ создания информационной системы. Анализ существующих систем управления базами данных ремонтно-строительной фирмы. Требования к составу и параметрам технических средств. Структура программной системы. Описание входной и выходной информации.

    курсовая работа [409,9 K], добавлен 29.04.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.