Автор работы: Пользователь скрыл имя, 08 Марта 2014 в 18:14, курсовая работа
C++ — это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, C++ помимо OOP поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. C++ уже стал универсальным языком для программистов всего мира, языком, на котором будет написано следующее поколение высокоэффективного программного обеспечения. Это единственный серьезный язык, который просто обязан знать любой уважающий себя профессиональный программист.
Введение
1. Теоретическая часть
1.1 Объектно –ориентированное программирование
1.2 Объект
1.3 Класс
1.4 Инкапсуляция
1.5 Наследование
1.6 Полиморфизм
2. Практическая часть
2.1 Постановка задачи
2.2 Интерфейс программы
Заключение
Список используемой литературы
Как известно, ни что в этом мире не дается даром. Применение этого метода ведет к снижению эффективности доступа к элементам объекта. Это обусловлено необходимостью вызова методов для изменения внутренних элементов(переменных) объекта. Однако, при современном уровне развития вычислительной техники, эти потери в эффективности не играют существенной роли.
1.5 Наследование
Наследование - это процесс, посредством которого, один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.
Смысл
и универсальность
В описаниях языков ООП
1.6 Полиморфизм
Полиморфизм - это свойство, которое
позволяет одно и тоже имя
использовать для решения
В общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.
Преимуществом полиморфизма
Применительно к ООП, целью полиморфизма, является использование одного имени для задания общих для класса действий. На практике это означает способность объектов выбирать внутреннюю процедуру (метод) исходя из типа данных, принятых в сообщении.
II. Практическая часть
2.1 Постановка задачи
Поставлена задача о разработке анимации, которая должна реализоваться с использованием инкапсуляции, наследования и полиморфизма. При процедурном подходе требуется описать каждый шаг, каждое действие алгоритма для достижения конечного результата. В программе должна быть реализована основные свойства объектно-ориентированного программирования.
Краткое описание классов.
Класс Bullet (снаряды)
{
public:
float x,y,dx,dy;
void CreateBullet()
{
x=ShipPosX;y=ShipPosY;
dx=10*cos(RADIAN*ShipAngle);
dy=10*sin(RADIAN*ShipAngle);
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->
ZadniyBuffer->Canvas->MoveTo(
ZadniyBuffer->Canvas->LineTo(
}
};
Класс CRock (астероиды)
{
public:
float x,y;
int Figure[50];
float Angle;
float Spin;
float XSpeed,YSpeed;
int Tip;
void CreateAsteroid(int t)
{
Tip=t;
XSpeed=random(4)+(random(9)/
YSpeed=random(4)+(random(9)/
Spin=random(10)-5;
for(int i=0;i<20;i++)
{
if(Tip==1)Figure[i]=random(10)
if(Tip==2)Figure[i]=random(10)
if(Tip==3)Figure[i]=random(5)+
}
}
void Move()
{
x+=XSpeed;y+=YSpeed;
Angle+=Spin;
if(x>440)x=-40;if(x<-40)x=440;
if(y>440)y=-40;if(y<-40)y=440;
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->
float tAng=0;
int tx=cos(RADIAN*(Angle+tAng))*
int ty=sin(RADIAN*(Angle+tAng))*
ZadniyBuffer->Canvas->MoveTo(
for(int i=0;i<20;i++,tAng+=19)
{
int tx=cos(RADIAN*(Angle+tAng))*
int ty=sin(RADIAN*(Angle+tAng))*
ZadniyBuffer->Canvas->LineTo(
}
}
};
Интерфейс программы выглядит следующим образом:
Заключение
В результате
проделанной работы была
В процессе выполнения курсовой работы были освоены и закреплены навыки объектно-ориентированного программирования. Навыки, приобретенные мною в ходе выполнения курсового проекта помогут в дальнейшем при выполнении курсовых дипломного проекта.
В результате выполнения проекта была реализована игра «Астероиды», используя объектно ориентированное программирование. Программное средство разработано в среде программирования – С++.
Учебник для ВУЗов. – М : Изд. МГТУ им Н.Э. Баумана. 2001г. – 320: ил.
Листинг программы
//----------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
const float RADIAN=0.01744444444;
TForm1 *Form1;
Graphics::TBitmap*
float ShipPosX,ShipPosY;
float ShipAngle;
float ShipSpeed;
bool LEFT,RIGHT,UP;
TList*Bullets;
TList*Asteroids;
class Bullet
{
public:
float x,y,dx,dy;
void CreateBullet()
{
x=ShipPosX;y=ShipPosY;
dx=10*cos(RADIAN*ShipAngle);
dy=10*sin(RADIAN*ShipAngle);
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->
ZadniyBuffer->Canvas->MoveTo(
ZadniyBuffer->Canvas->LineTo(
}
};
class CRock
{
public:
float x,y;
int Figure[50];
float Angle;
float Spin;
float XSpeed,YSpeed;
int Tip;
void CreateAsteroid(int t)
{
Tip=t;
XSpeed=random(4)+(random(9)/
YSpeed=random(4)+(random(9)/
Spin=random(10)-5;
for(int i=0;i<20;i++)
{
if(Tip==1)Figure[i]=random(10)
if(Tip==2)Figure[i]=random(10)
if(Tip==3)Figure[i]=random(5)+
}
}
void Move()
{
x+=XSpeed;y+=YSpeed;
Angle+=Spin;
if(x>440)x=-40;if(x<-40)x=440;
if(y>440)y=-40;if(y<-40)y=440;
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->
float tAng=0;
int tx=cos(RADIAN*(Angle+tAng))*
int ty=sin(RADIAN*(Angle+tAng))*
ZadniyBuffer->Canvas->MoveTo(
for(int i=0;i<20;i++,tAng+=19)
{
int tx=cos(RADIAN*(Angle+tAng))*
int ty=sin(RADIAN*(Angle+tAng))*
ZadniyBuffer->Canvas->LineTo(
}
}
};
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
randomize();
ZadniyBuffer=new Graphics::TBitmap();
ZadniyBuffer->Width =400;
ZadniyBuffer->Height=400;
ZadniyBuffer->Canvas->Pen->
Bullets =new TList();
Asteroids=new TList();
LEFT=false;RIGHT=false;
ShipPosX=200;ShipPosY=200;
ShipAngle=0;
ShipSpeed=0;
for(int i=0;i<4;i++)
{
CRock*a=new CRock();
a->x=random(400);
a->y=40;
a->CreateAsteroid(1);
Asteroids->Add((void*)a);
}
}
//----------------------------
void TForm1::CLS()
{
ZadniyBuffer->Canvas->Brush->
ZadniyBuffer->Canvas->
}
void __fastcall TForm1::CopyToScreen()
{
Canvas->Draw(0,0,ZadniyBuffer)
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(LEFT)ShipAngle-=3;
if(RIGHT)ShipAngle+=3;
MoveShip();
CLS();
DrawShip();
MoveAndDrawBullets();
MoveAndDrawAsteroids();
ZadniyBuffer->Canvas->Font->
ZadniyBuffer->Canvas->
CopyToScreen();
if(IsShipBreaked())
{
Timer1->Enabled=false;
ShowMessage("Корабль взорван");
StartNew();
Timer1->Enabled=true;
}
if(Asteroids->Count==0)
{
Timer1->Enabled=false;
ShowMessage("Уровень пройден");
StartNew();
Timer1->Enabled=true;
}
}
//----------------------------
void __fastcall TForm1::DrawShip()
{
ZadniyBuffer->Canvas->Pen->
int tA=0;
int tx=cos(RADIAN*(ShipAngle+tA))*
int ty=sin(RADIAN*(ShipAngle+tA))*
ZadniyBuffer->Canvas->MoveTo(
int l;
for(int i=0;i<4;i++,tA+=120)
{
if((i==0)||(i==3))l=15;else l=10;
int tx=cos(RADIAN*(ShipAngle+tA))*
int ty=sin(RADIAN*(ShipAngle+tA))*
ZadniyBuffer->Canvas->LineTo(
}
}
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) LEFT=true;
if(Key==VK_RIGHT)RIGHT=true;
if(Key==VK_UP)UP=true;
if(Key==VK_SPACE)
{
Bullet*b=new Bullet();
b->CreateBullet();
Bullets->Add((void*)b);
}
}
//----------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) LEFT=false;
if(Key==VK_RIGHT)RIGHT=false;
if(Key==VK_UP)UP=false;
}
//----------------------------
void __fastcall TForm1::MoveShip()
{
if(UP)
{
ShipSpeed+=0.01;
if(ShipSpeed>2)ShipSpeed=4;
}
else
{
ShipSpeed-=0.01;
if(ShipSpeed<0)ShipSpeed=0;
}
ShipPosX+=cos(RADIAN*
ShipPosY+=sin(RADIAN*
if(ShipPosX>410)ShipPosX=-10;
if(ShipPosX<-10)ShipPosX=410;
if(ShipPosY>408)ShipPosY=-10;
if(ShipPosY<-10)ShipPosY=410;
}
void __fastcall TForm1::MoveAndDrawBullets()
{
Bullet*b;
for(int i=0;i<Bullets->Count;i++)
{
b=(Bullet*)Bullets->Items[i];
b->x += b->dx;
b->y += b->dy;
if((b->x>410)||(b->x<-10)||(b-
{
delete b;
Bullets->Delete(i);
b=NULL;
}
if(b!=NULL)b->Draw();
}
}
TForm1::MoveAndDrawAsteroids()
{
CRock*r,*r2;
Bullet*b;
for(int i=0;i<Asteroids->Count;i++)
{
r=(CRock*)Asteroids->Items[i];
if(r!=NULL)
for(int j=0;j<Bullets->Count;j++)
{
b=(Bullet*)Bullets->Items[j];