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

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

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






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

 

Вариант №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; просмотров: 300. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

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

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

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

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

ПУНКЦИЯ И КАТЕТЕРИЗАЦИЯ ПОДКЛЮЧИЧНОЙ ВЕНЫ   Пункцию и катетеризацию подключичной вены обычно производит хирург или анестезиолог, иногда — специально обученный терапевт...

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