Студопедия — Введение. по курсу “Объектно-ориентированное программирование”
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Введение. по курсу “Объектно-ориентированное программирование”






по курсу “Объектно-ориентированное программирование”

 

Вариант №11

 

 

Выполнила: ст. гр. ПИит-10-1 Соколик Е.А.  
  Проверил:   ст. пр. Шмаков Ю.Д.  

 

Днепропетровск

 

Содержание

 

Содержание _____________________________________________________ 2

Задание _________________________________________________________3

Выполнение _____________________________________________________4

Предметная область ________________________________________4

Диаграмма классов _________________________________________4

Описание классов __________________________________________5

Листинг файла Basketball.pas ________________________________ 6

Листинг файла Unit1.pas ____________________________________11

Результаты работы приложения ______________________________ 16

Выводы __________________________________________________ 17

Список литературы_______________________________________________ 18

 

 

ВАРИАНТ 11

Разработать программу, имитирующую бросок мяча игроком в баскетбольное кольцо. Мяч можно рассматривать как тело, брошенное под углом a, к горизонту со скоростью u.

При этом на тело действует сила притяжения, в случае чего вертикальная координата тела увеличивается до определенного значения, а потом начинает уменьшаться. Если пренебречь сопротивлением воздуха, то координаты тела в момент времени t определяются по формулам:

x(t)=utcosa

y(t)=utsina - gt2/2.

Игрока, мяч и кольцо изобразить стилизированными символами (по усмотрению программиста). Программа должна запрашивать рост игрока. Положение игрока на поле должно управлятся клавишами и ®, а величина угла a - клавишами ­­­ та ¯. Величина скорости u задается с клавиатуры, но при помощи датчика случайных чисел может при каждом броске менятся в пределах ±20% от заданного значения. В случае попадания мяча в щит имитировать отскок мяча.

 

 

Выполнение

 

Предметная область:

 

В качестве предметной области выступает игра в баскетбол. Необходимо разработать приложение, позволяющее имитировать бросок мяча игроком в баскетбольное кольцо. Цель игры – попасть в кольцо. Программа содержит такой набор графических элементов: игрок, мяч, кольцо, щит.

 

Диаграмма классов:

 

Для создания диаграмм классов использовался редактор Model Maker 6.20.

 

Рис.1. Диаграмма классов.

 

 

Описание классов:

 

TObject – класс-предок для всех классов. Содержит конструктор Create и деструктор Destroy.

 

TGElement - класс - графический элемент. Наследуется от TObject. Содержит три атрибута: Canvas –канва, на которой будут рисоваться элементы, x и y – координаты элемента на канве. В конструктор Create в качестве параметра передается канва, на которой будет отображаться элемент. Метод Draw – рисование элемента на канве, метод Erase – «стирание» элемента (прорисовка цветом фона), метод MoveTo – перемещение элемента по канве, в качестве параметров передаются новые координаты x и y.

 

· TPlayer - класс-игрок. Наследуется от TGElement. Содержит 1атрибут: Height - высота игрока (рост). Имеет собственный конструктор, методы – SetHeight – установить высоту, а также переопределенные методы Draw и Erase.

· TBall – класс-мяч. Наследуется от TGElement. Имеет собственный конструктор, а также переопределенные методы Draw и Erase.

· TBasket – класс-корзина. Наследуется от TGElement. Имеет собственный конструктор, а также переопределенные методы Draw и Erase.

· TBoard - класс - щит. Наследуется от TGElement. Имеет собственный конструктор, а также переопределенные методы Draw и Erase.

 

Листинг файла Basketball.pas:

Unit Basketball;

 

interface

 

uses

Graphics;

 

type

TGElement = class (TObject)

private

Canvas: TCanvas;

x: Word;

y: Word;

public

constructor Create(ACanvas: TCanvas);

procedure Draw; virtual;

procedure Erase; virtual;

function GetX: Word; virtual;

function GetY: Word; virtual;

procedure MoveTo(AX: word; AY: word); virtual;

end;

 

TPlayer = class (TGElement)

private

Height: byte;

public

constructor Create(ACanvas: TCanvas);

procedure SetHeight(AHeight: byte);

procedure Draw; override;

procedure Erase; override;

end;

 

TBall = class (TGElement)

constructor Create(ACanvas: TCanvas);

procedure Draw; override;

procedure Erase; override;

end;

 

TBasket = class (TGElement)

constructor Create(ACanvas: TCanvas);

procedure Draw; override;

procedure Erase; override;

end;

 

TBoard = class (TGElement)

constructor Create(ACanvas: TCanvas);

procedure Draw; override;

procedure Erase; override;

end;

 

implementation

 

{

********************************** TGElement ***********************************

}

constructor TGElement.Create(ACanvas: TCanvas);

begin

x:= 0;

y:= 0;

Canvas:= ACanvas;

end;

 

procedure TGElement.Draw;

begin

end;

 

procedure TGElement.Erase;

begin

end;

 

function TGElement.GetX: Word;

begin

result:= x;

end;

 

function TGElement.GetY: Word;

begin

result:= y;

end;

 

procedure TGElement.MoveTo(AX: word; AY: word);

begin

Erase;

x:= AX;

y:= AY;

Draw;

end;

 

{

*********************************** TPlayer ************************************

}

constructor TPlayer.Create(ACanvas: TCanvas);

begin

x:= 0;

y:= 0;

Canvas:= ACanvas;

Height:= 0;

end;

 

procedure TPlayer.SetHeight(AHeight: byte);

begin

Height:= AHeight;

end;

 

procedure TPlayer.Draw;

begin

With Canvas do

begin

Lock;

Pen.Color:= clblack;

Brush.Color:= clwhite;

MoveTo(x, y);

Ellipse(x+1, y, x+27, y+23);

Ellipse(x+17, y+6, x+20, y+9);

MoveTo(x+23, y+18);

LineTo(x+17, y+15);

Ellipse(x, y+23, x+28, y+86);

MoveTo(x+14, y+40);

LineTo(x+37, y+11);

LineTo(x+41, y+11);

LineTo(x+42, y+12);

LineTo(x+42, y+18);

LineTo(x+18, y+48);

 

MoveTo(x+27, y+41);

LineTo(x+49, y+15);

LineTo(x+49, y+10);

LineTo(x+48, y+9);

LineTo(x+45, y+9);

LineTo(x+42, y+12);

 

Rectangle(x+6, y+82, x+23, y+148+2*(Height));

MoveTo(x+18, y+82);

LineTo(x+18, y+148+2*(Height));

 

MoveTo(x+6, y+148+2*(Height));

LineTo(x+6, y+151+2*(Height));

LineTo(x+22, y+151+2*(Height));

LineTo(x+18, y+147+2*(Height));

 

Rectangle(x+6, y+150+2*(Height), x+26, y+153+2*(Height));

MoveTo(x+23, y+148+2*(Height));

LineTo(x+26, y+151+2*(Height));

MoveTo(x+21, y+151+2*(Height));

LineTo(x+21, y+153+2*(Height));

 

Pen.Color:= clwhite;

Rectangle(x+22, y+31, x+26, y+39);

Pen.Color:= clblack;

Unlock;

end;

end;

 

procedure TPlayer.Erase;

begin

With Canvas do

begin

Lock;

Pen.Color:= clwhite;

Brush.Color:= clwhite;

MoveTo(x, y);

Ellipse(x+1, y, x+27, y+23);

Ellipse(x+17, y+6, x+20, y+9);

MoveTo(x+23, y+18);

LineTo(x+17, y+15);

Ellipse(x, y+23, x+28, y+86);

MoveTo(x+14, y+40);

LineTo(x+37, y+11);

LineTo(x+41, y+11);

LineTo(x+42, y+12);

LineTo(x+42, y+18);

LineTo(x+18, y+48);

 

MoveTo(x+27, y+41);

LineTo(x+49, y+15);

LineTo(x+49, y+10);

LineTo(x+48, y+9);

LineTo(x+45, y+9);

LineTo(x+42, y+12);

 

Rectangle(x+6, y+82, x+23, y+148+2*(Height));

MoveTo(x+18, y+82);

LineTo(x+18, y+148+2*(Height));

 

MoveTo(x+6, y+148+2*(Height));

LineTo(x+6, y+151+2*(Height));

LineTo(x+22, y+151+2*(Height));

LineTo(x+18, y+147+2*(Height));

 

Rectangle(x+6, y+150+2*(Height), x+26, y+153+2*(Height));

MoveTo(x+23, y+148+2*(Height));

LineTo(x+26, y+151+2*(Height));

MoveTo(x+21, y+151+2*(Height));

LineTo(x+21, y+153+2*(Height));

 

Pen.Color:= clwhite;

Rectangle(x+22, y+31, x+26, y+39);

Pen.Color:= clblack;

Unlock;

end;

end;

 

{

************************************ TBall *************************************

}

constructor TBall.Create(ACanvas: TCanvas);

begin

x:= 0;

y:= 0;

Canvas:= ACanvas;

end;

 

procedure TBall.Draw;

begin

With Canvas do

begin

Lock;

Pen.Color:= clblack;

Brush.Color:= clred;

MoveTo(x, y);

Ellipse(x, y, x+25, y+25);

Brush.Color:= clwhite;

Unlock;

end;

end;

 

procedure TBall.Erase;

begin

With Canvas do

begin

Lock;

Pen.Color:= clwhite;

Brush.Color:= clwhite;

MoveTo(x, y);

Ellipse(x, y, x+25, y+25);

Unlock;

end;

end;

 

{

*********************************** TBasket ************************************

}

constructor TBasket.Create(ACanvas: TCanvas);

begin

x:= 0;

y:= 0;

Canvas:= ACanvas;

end;

 

procedure TBasket.Draw;

begin

With Canvas do

begin

Lock;

Pen.Color:= clblack;

Brush.Color:= clwhite;

MoveTo(x, y);

Rectangle(x, y, x+50, y+5);

MoveTo(x+50, y+2);

LineTo(x+55, y+2);

Unlock;

end;

end;

 

procedure TBasket.Erase;

begin

With Canvas do

begin

Lock;

Pen.Color:= clwhite;

Brush.Color:= clwhite;

MoveTo(x, y);

Rectangle(x, y, x+50, y+5);

MoveTo(x+50, y+2);

LineTo(x+55, y+2);

Unlock;

end;

end;

 

{

************************************ TBoard ************************************

}

constructor TBoard.Create(ACanvas: TCanvas);

begin

x:= 0;

y:= 0;

Canvas:= ACanvas;

end;

 

procedure TBoard.Draw;

begin

With Canvas do

begin

Lock;

Pen.Color:= clblack;

Brush.Color:= clwhite;

MoveTo(x, y);

Rectangle(x, y, x+5, y+100);

MoveTo(x+5, y+25);

LineTo(x+15, y+25);

MoveTo(x+5, y+75);

LineTo(x+15, y+75);

Rectangle(x+15, y+25, x+25, y+300);

Unlock;

end;

end;

 

procedure TBoard.Erase;

begin

With Canvas do

begin

Lock;

Pen.Color:= clwhite;

Brush.Color:= clwhite;

MoveTo(x, y);

Rectangle(x, y, x+5, y+100);

MoveTo(x+5, y+25);

LineTo(x+30, y+25);

MoveTo(x+5, y+75);

LineTo(x+30, y+75);

Rectangle(x+15, y+25, x+25, y+300);

Unlock;

end;

end;

 

 

end.

 

Листинг файла Unit1.pas:

 

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls, Basketball;

 

type

TFormMain = class(TForm)

TrackPos: TTrackBar;

TrackSize: TTrackBar;

TrackAngle: TTrackBar;

LabelAngle: TLabel;

LabelPos: TLabel;

LabelSize: TLabel;

TimerThrow: TTimer;

EditSpeed: TEdit;

PanelThrow: TPanel;

LabelSpeed: TLabel;

GroupStat: TGroupBox;

LabelThrow: TLabel;

LabelRes: TLabel;

MemoCom: TMemo;

PanelNew: TPanel;

GamePB: TPaintBox;

procedure TrackPosChange(Sender: TObject);

procedure TrackSizeChange(Sender: TObject);

procedure TimerThrowTimer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure TrackAngleChange(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure PanelThrowClick(Sender: TObject);

procedure GamePBPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

FormMain: TFormMain;

angle: byte;

t, v, cosinus, sinus, negsinus: real;

player: TPlayer;

ball: TBall;

basket: TBasket;

board: TBoard;

defx, defy, x, y, throw, resthrow: integer;

ricochet, score: boolean;

 

 

implementation

 

{$R *.dfm}

 

procedure TFormMain.TrackPosChange(Sender: TObject);

var

pos, size: byte;

begin

pos:= TrackPos.Position;

size:= TrackSize.Position;

LabelPos.Caption:= 'Положение:' + IntToStr(pos+1);

player.MoveTo(pos * 21 + 12, player.GetY);

ball.MoveTo(pos * 21 + 45, ball.GetY);

GamePB.OnPaint(self);

end;

 

procedure TFormMain.TrackSizeChange(Sender: TObject);

var

pos, size, pheight: byte;

begin

pos:= TrackPos.Position;

size:= TrackSize.Position;

pheight:= 160 + (10 - size) * 5;

LabelSize.Caption:= 'Рост: ' + IntToStr(pheight);

player.SetHeight(10 - size);

player.MoveTo(player.GetX, 202 - 2*(10 - size));

ball.MoveTo(pos * 21 + 45, 200 - 2*(10 - size));

GamePB.OnPaint(self);

end;

 

procedure TFormMain.TimerThrowTimer(Sender: TObject);

begin

t:= t+ 0.01;

if not ((y > 354) or (x > 580)) then

begin

if ((x >= board.GetX-25) and (x <= 505)) and ((y >= 30) and (y < 125)) then

ricochet:= true;

v:= abs(v - v/50);

if ricochet then

begin

x:= x - round(v*t* cosinus);

y:= y - round(v*t* negsinus - 4.95* t*t);

end

else

begin

x:= x + round(v*t*cosinus);

y:= y - round(v*t*sinus - 4.95* t*t);

end;

if ((x >= basket.GetX+2) and (x <= basket.GetX+25)) and ((y+20 >= basket.GetY) and (y+20 <= basket.GetY+5)) then

score:= true;

ball.MoveTo(x, y);

end

else

begin

TimerThrow.Enabled:= false;

ball.MoveTo(defx, defy);

t:= 0;

if score then

inc(resthrow);

LabelRes.Caption:= 'Попаданий: ' + IntToStr(resthrow);

end;

GamePB.OnPaint(self);

end;

 

procedure TFormMain.FormCreate(Sender: TObject);

var

pos, size, pheight: byte;

begin

Randomize;

player:= TPlayer.Create(GamePB.Canvas);

ball:= TBall.Create(GamePB.Canvas);

basket:= TBasket.Create(GamePB.Canvas);

board:= TBoard.Create(GamePB.Canvas);

 

player.MoveTo(12, 202);

ball.MoveTo(45, 200);

basket.MoveTo(465, 125);

board.MoveTo(520, 55);

GamePB.Canvas.Brush.Color:= clwhite;

 

TrackAngle.Position:= 1;

angle:= TrackAngle.Position;

LabelAngle.Caption:= 'Угол: ' + IntToStr(angle);

TrackPos.Position:= 0;

pos:= TrackPos.Position;

LabelPos.Caption:= 'Положение:' + IntToStr(pos+1);

TrackSize.Position:= 10;

pheight:= 160 + (10 - TrackSize.Position) * 5;

LabelSize.Caption:= 'Рост: ' + IntToStr(pheight);

throw:= 0;

resthrow:= 0;

LabelThrow.Caption:= 'Бросков: ' + IntToStr(throw);

LabelRes.Caption:= 'Попаданий: ' + IntToStr(resthrow);

EditSpeed.Text:= '';

 

end;

 

procedure TFormMain.TrackAngleChange(Sender: TObject);

begin

angle:= TrackAngle.Position;

LabelAngle.Caption:= 'Угол: '+ IntToStr(angle);

end;

 

 

procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key = 37 then

TrackPos.Position:= TrackPos.Position - 1;

if key = 39 then

TrackPos.Position:= TrackPos.Position + 1;

if ssShift in Shift then

begin

if key = 38 then

TrackSize.Position:= TrackSize.Position - 1;

if key = 40 then

TrackSize.Position:= TrackSize.Position + 1;

if key = 78 then

begin

FormMain.OnCreate(self);

GamePB.OnPaint(self);

end

end

else

begin

if key = 38 then

TrackAngle.Position:= TrackAngle.Position + 1;

if key = 40 then

TrackAngle.Position:= TrackAngle.Position - 1;

end;

if (key = 13) and not TimerThrow.Enabled then

PanelThrow.OnClick(self);

if key in [48..57] then

EditSpeed.Text:= EditSpeed.Text + chr(key);

if key = 188 then

EditSpeed.Text:= EditSpeed.Text + ',';

if key = 46 then

EditSpeed.Text:= '';

end;

 

procedure TFormMain.PanelThrowClick(Sender: TObject);

var

value: real;

sign: byte;

begin

try

v:= StrToFloat(EditSpeed.text);

except

on EConvertError do

begin

showmessage('Введите значение скорости');

exit;

end;

end;

TimerThrow.Enabled:= true;

x:= ball.GetX;

y:= ball.GetY;

defx:= x;

defy:= y;

t:= 0;

ricochet:= false;

inc(throw);

labelthrow.Caption:= 'Бросков: ' + IntToStr(throw);

score:=false;

cosinus:= cos(Pi/180 * angle);

sinus:= sin(Pi/180 * angle);

negsinus:= sin(Pi/180 * -angle);

value:= random(21);

sign:= random(2);

value:= v*0.01*value;

if sign = 0 then

v:= v + value

else

v:= v - value;

end;

 

procedure TFormMain.GamePBPaint(Sender: TObject);

begin

with GamePB.Canvas do

begin

Pen.Color:= clwhite;

Rectangle(0, 0, 580, 375);

Pen.Color:= clblack;

MoveTo(0, 354);

LineTo(580, 354);

end;

player.Draw;

ball.Draw;

basket.Draw;

board.Draw;

end;

 

end.

 

Результат работы приложения:

Рис.2. Окно приложения после запуска.

 

Рис.3. Окно приложения во время игры.

 

 

Выводы:

 

Разработанное приложение имитирует игру в баскетбол. Мною успешно были выполнены все поставленные задачи.

Выполнив этот курсовой проект, я закрепила и углублила теоретические знания по дисциплине "Объектно-ориентированное программирование", ознакомилась с основными методами объектной декомпозиции предметной области для задач разработки объектно-ориентированных программных средств, приобрела опыт практической разработки объектно-ориентированного программного обеспечения.

 

 

Список литературы:

 

1. Методичні рекомендації до виконання лабораторних робіт з дисципліни «Об’єктно-орієнтоване програмування (Ч. І)» для студентів напряму 6.050101 «Комп’ютерні науки» та 6.050103 «Програмна інженерія» / Ю. Д. шмаков – Д.: Національний гірничий університет, 2008.– 143 с.

2. Кармайкл Э., Хэйвуд Д. Быстрая и качественная разработка программного обеспечения – М.: Вильямс, 2003. – 400 с.

3. Буч Г., Рамбо Дж., Джекобсон А. UML. Руководство пользователя - М.: ДМК, 2000. - 432 с. (Серия: Для программистов)

4. Орлов С. А. Технологии разработки программного обеспечения: Учебник - СПб.: Питер, 2002. - 464 с.

Содержание

Введение…………………………………………………………………………...3

1. Страховой рынок……………………………………………………………….4

1.1 Понятие страхового рынка и условия его существования…………………4

1.2 Структура страхового рынка и его виды…………………………………….5

2. Государственное регулирование страховой деятельности…………………5

2.1 Государственное регулирование страховой деятельности: понятие и направления………………………………………………………………………..6

2.2 Прямое участие государства в становлении страховой системы защиты имущественных интересов……………………………………………………….6

2.3 Законодательное обеспечение становления и защиты национального страхового рынка………………………………………………………………….7

2.4 Государственный надзор за страховой деятельностью…………………….7

2.5 Пресечение монополистической деятельности и недобросовестной конкуренции на страховом рынке………………………………………………11

2.6 Лицензирование страховой деятельности………………………………….17

Заключение……………………………………………………………………….20

Список использованной литературы…………………………………………...21

 

Введение

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

Из вышеперечисленного можно сделать вывод, что риск служит предпосылкой возникновения страховых отношений. Своеобразие этих отношений как экономической категории, заключается в том, что страхование является категорией, находящейся в подчиненной связи с категорией финансов.

Страхование, как и финансы, обусловлено движением денежной формы стоимости при формировании и использовании соответствующих целевых фондов денежных средств в процессе распределения и перераспределения денежных доходов и накоплений. В настоящее время тема страхования является весьма актуальной.







Дата добавления: 2015-06-15; просмотров: 294. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

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

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

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

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Сравнительно-исторический метод в языкознании сравнительно-исторический метод в языкознании является одним из основных и представляет собой совокупность приёмов...

Концептуальные модели труда учителя В отечественной литературе существует несколько подходов к пониманию профессиональной деятельности учителя, которые, дополняя друг друга, расширяют психологическое представление об эффективности профессионального труда учителя...

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия