Технология программирования

Автор работы: Пользователь скрыл имя, 23 Января 2011 в 12:52, курсовая работа

Описание работы

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

Файлы: 1 файл

курсовая.doc

— 169.00 Кб (Скачать файл)

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

     Для данного проекта реализуем изменения, описанные в эволюции.

     Введем  состояния игры для класса TEngine. Для этого вводим переменную TheEnd.

     Изменим конструктор класса, чтобы при создании объекта у него устанавливалось состояние TheEnd в False.

     Как видно, изменения затронули только только внутреннюю реализацию класса TEngine, не затронув его внешний интерфейс.  
 

Заключение

     В ходе работы над курсовым проектом были изучены основные принципы объектно-ориентированного проектирования ПО. С помощью объектно-ориентированного подхода был создан проект азартной игры «XPBall»

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

    1. Буч Г. Объектно-ориентированный  анализ и проектирование. М.:  1996.
    2. Фёдоров А. Особенности программирования на Borland Pascal. Киев: “Диалектика”, 1994.
    3. Гайсарян С.С. Объектно-ориентированные технологии проектирования прикладных программных систем. М.: ЦИТ. 1998.

Приложение  А. Исходные тексты проекта

     Модуль  XPBall.dpr

     program XPBall; 

     uses

       Forms,

       uMenu in 'uMenu.pas' {fmMenu},

       uGame in 'uGame.pas' {fmGame},

       uMainThread in 'uMainThread.pas',

       uObj in 'uObj.pas',

       uEngine in 'uEngine.pas'; 

     {$R *.res} 

     begin

       Application.Initialize;

       Application.CreateForm(TfmMenu, fmMenu);

       Application.CreateForm(TfmGame, fmGame);

       Application.Run;

     end.

Модуль uObj.pas

unit uObj; 

interface 

Uses Graphics; 

Const kkx = 10; kky = 10; 

type

TPlanka = class

  private

   x, y, h, w: Word;

   canvas: TCanvas;

   Procedure Draw(x, y: Word; sh: Boolean);

  public

   property widthPl: Word read w;

   function BallinP(xk, yk: Word): Boolean;

   Procedure Move(nx, ny: Word);

   Constructor Create(c: TCanvas; xp, yp, hp, wp: Word);

end; 

TKirpichi = class

  private

   h, w: Byte;

   ar: Array[1..kkx, 1..kky] of Byte;

   canvas: TCanvas;

   procedure Draw(x, y: Word; sh: Boolean);

  public

   klkr: Integer;

   function BallinK(x, y: Word): Boolean;

   procedure DrawAll;

   Constructor Create(c: TCanvas; pH, pW: Word);

end; 

TBall = class

  private

   canvas: TCanvas;

  public

   x, y, dgr: Word;

   spd, d: Byte;

   procedure Move(xn, yn: Word);

   Constructor Create(c: TCanvas; xb, yb, dgrb : Word; spdb, db: Byte);

end; 

implementation 

// Планка 

Constructor TPlanka.Create(c: TCanvas; xp, yp, hp, wp: Word);

Begin

canvas := c; x :=  xp; y := yp; h := hp; w := wp;

Draw(x, y, True);

End; 

Procedure TPlanka.Draw(x, y: Word; sh: Boolean);

Begin

If sh then begin

  canvas.pen.Color := clBlack;

  canvas.Brush.Color := clDkGray;

end

else begin

  canvas.pen.Color := clBtnFace;

  canvas.Brush.Color := clBtnFace;

end;

canvas.Rectangle(x, y, x + w, y + h);

end; 

function TPlanka.BallinP(xk, yk: Word): Boolean;

Begin

If (xk >= x) and (xk <= x + w) and (yk >= y) then Result := True

 else Result := False;

End; 

Procedure TPlanka.Move(nx, ny: Word);

Begin

Draw(x, y, False); x := nx; {y := ny;} Draw(x, y, True);

End; 

// Кирпичи 

Constructor TKirpichi.Create(c: TCanvas; pH, pW: Word);

Var n, m: Byte;

Begin

canvas := c; h := pH; w := pW; klkr := kkx * kky;

For n := 1 to kkx do For m := 1 to kky do ar[n, m] := Random(7) + 1;

DrawAll;

End; 

procedure TKirpichi.Draw(x, y: Word; sh: Boolean);

Begin

If sh then begin

  canvas.pen.Color := clBlack;

  Case ar[x, y] of

   1: canvas.Brush.Color := clGreen;

   2: canvas.Brush.Color := clBlue;

   3: canvas.Brush.Color := clAqua;

   4: canvas.Brush.Color := clFuchsia;

   5: canvas.Brush.Color := clOlive;

   6: canvas.Brush.Color := clTeal;

   7: canvas.Brush.Color := clSkyBlue;

  end;

  canvas.Rectangle((x - 1) * w + 1, (y - 1) * h + 1, x * w, y * h);

end

else begin

  canvas.pen.Color := clBtnFace;

  canvas.Brush.Color := clBtnFace;

  canvas.Rectangle((x - 1) * w + 1, (y - 1) * h + 1, x * w, y * h);

  ar[x, y] := 0;

end;

End; 

procedure TKirpichi.DrawAll;

Var n, m: Integer;

Begin

For n := 1 to kkx do For m := 1 to kky do If (ar[n, m] > 0) then Draw(n, m, True);

end; 

function TKirpichi.BallinK(x, y: Word): Boolean;

Var n, m: Word;

Begin

Result := False;

n := x div w + 1; m := y div h + 1;

If (n <= kkx) and (m <= kky) then

  If ar[n, m] > 0 then begin

   ar[n, m] := 0; Draw(n, m, False); klkr := klkr - 1;

   Result := True;

  end;

End; 

// Мяч 

Constructor TBall.Create(c: TCanvas; xb, yb, dgrb : Word; spdb, db: Byte);

Begin

canvas := c; x := xb; y := yb; dgr := dgrb; spd := spdb; d := db;

Move(x, y);

End; 

procedure TBall.Move(xn, yn: Word);

Begin

canvas.pen.Color := clBlack; canvas.Brush.Color := clBlack;

canvas.Ellipse(xn, yn, xn + d, yn + d);

canvas.pen.Color := clBtnFace; canvas.Brush.Color := clBtnFace;

canvas.Ellipse(x, y, x + d, y + d);

canvas.pen.Color := clBlack; canvas.Brush.Color := clBlack;

canvas.Ellipse(xn, yn, xn + d, yn + d);

x := xn; y := yn;

End; 

end.

Модуль uEngine.pas

 
 

unit uEngine; 

interface 

Uses uObj, uMainThread, Graphics; 

Type

TEngine = class

  private

   kr: TKirpichi;

   bl: TBall;

   pl: TPlanka;

   MainThread: TMainThread;

   TheEnd: Boolean;

   procedure Victory;

   procedure Defeat;

   function MoveBall: boolean;

  public

   constructor Create(c: TCanvas);

   procedure Move;

   procedure ShowAll;

   procedure MovePl(nx, ny: Integer);

   procedure Free;

end; 

implementation 

Uses Forms, Windows; 

constructor TEngine.Create(c: TCanvas);

Begin

ShowCursor(False);

Randomize;

kr := TKirpichi.Create(c, (Screen.Height div 2) div 10, Screen.Width div 10);

bl := TBall.Create(c, 300, Screen.Height - 200, 215, 15, 20);

pl := TPlanka.Create(c, Screen.Width div 2 - 75, Screen.Height - 25, 15, 150);

TheEnd := False;

MainThread := TMainThread.Create(False);

MainThread.tm := 10;

MainThread.FreeOnTerminate := True;

End; 

function TEngine.MoveBall: boolean;

Var nx, ny, px, py: Word;

         n, n1, n2: Byte;

               rad: Extended;

// Отражение  от вертикали

Procedure OtX;

Begin

px := px + Round((n1 - 1) * cos(rad));

If (bl.dgr < 180) then bl.dgr := 180 - bl.dgr else bl.dgr := 180 + (360 - bl.dgr);

rad := Pi / (180 / bl.dgr); n1 := 1;

nx := px + Round(n1 * cos(rad));

End;

// Отражение  от горизонтали

Procedure OtY;

Begin

py := py + Round((n2 - 1) * sin(rad));

If (bl.dgr < 180) then bl.dgr := 360 - bl.dgr else bl.dgr := 360 - bl.dgr;

rad := Pi / (180 / bl.dgr); n2 := 1;

ny := py + Round(n2 * sin(rad));

End; 

Begin

Result := True;

n := 1; px := bl.x; py := bl.y; n1 := 1; n2 := 1;

rad := Pi / (180 / bl.dgr);

Repeat

  nx := px + Round(n1 * cos(rad));

  ny := py + Round(n2 * sin(rad));

  If (nx + bl.d > Screen.Width) or (nx < 1) then OtX;

  If (ny + bl.d > Screen.Height) then begin  // GameOver!

   Result := False; kr.klkr := -1;

  end

  else begin

   If (ny < 1) then OtY;

   Case bl.dgr of

    1..90: begin

     If pl.BallinP(nx + bl.d div 2, ny + bl.d) or

        kr.BallinK(nx + bl.d div 2, ny + bl.d) then OtY;

     If kr.BallinK(nx + bl.d, ny + bl.d div 2) then OtX;

    end;

    91..180: begin

     If pl.BallinP(nx + bl.d div 2, ny + bl.d) or

        kr.BallinK(nx + bl.d div 2, ny + bl.d) then OtY;

     If kr.BallinK(nx, ny + bl.d div 2) then OtX;

    end;

    181..270: begin

Информация о работе Технология программирования