Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.24 Mб
Скачать

Приложение в

продолжение

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

Работы, выполненные в ходе проектирования, и разработанный программный продукт описаны в настоящей пояснительной записке с соблюдением требований ГОСТ ЕСПД.

Таким образом, задание на выпускную квалификационную работу выполнено в полном объёме.

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

1

Приложение в

продолжение

 Гаврилов А. В. Программирование на Java: Конспект лекций / Гаврилов А.В., Клименков С.В., Цопа Е.А. - СПб.: СПбГУ ИТМО, 2010. – 130 с.

2 ГОСТ: Единая система программной документации. Москва, Издательство стандартов, 2011, или более позднее официальное издание.

3 Давыдова Н. А. Программирование: учебное пособие / Н. А. Давыдова, Е. В. Боровская. - М.: БИНОМ. Лаборатория знаний, 2009. – 238 с.

4 Денисова Э. В., Кучер А. В. Основы вычислительной математики: Учебно-методическое пособие. - СПб.: СПбГУ ИТМО, 2010. – 164 с.

5 Ключев А. О. Программное обеспечение встроенных вычислительных систем: Учебное пособие / Ключев А.О., Кустарев П.В., Ковязина Д.Р., Петров Е.В. - СПб.: СПбГУ ИТМО, 2009. – 212 с.

6 Методические указания по оформлению курсовых и выпускной квалификационной работ: учеб. пособие для студентов ПТК НовГУ/ Авт.сост. Чернега А. М., ПТК НовГу им. Ярослава Мудрого. — Великий Новгород, 2006 – 27 с.

7 Положение об организации выполнения и защиты курсовой работы (проекта) в колледжах НовГУ [Электронный ресурс] http://www.novsu.ru/file/990719, 28.06.2014.

8 Сивохин А. В. Проектирование Windows-приложений в визуальных объектно-ориентированных средах. Описание лабораторных работ. / Сивохин А. В., Макурин Ю. Д. - Пенза: Частная типография Тугушева, 2010. – 230 с.

9 Черный А. А. Вычислительная техника в инженерных расчетах и моделировании: Учебное пособие. - Пенза: Изд-во Пенз. гос. ун-та, 2010. – 268 с.

Приложение Б

(

Приложение в

продолжение

обязательное)

Текст программы «Принц эльфов»

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, XPMan, jpeg;

type

TForm1 = class(TForm)

Image3: TImage;

Panel1: TPanel;

Panel2: TPanel;

Image4: TImage;

Panel3: TPanel;

Image5: TImage;

Panel4: TPanel;

Image2: TImage;

Button1: TButton;

Image6: TImage;

Image7: TImage;

Image8: TImage;

Image9: TImage;

ListBox1: TListBox;

Image10: TImage;

Image11: TImage;

Panel5: TPanel;

Button2: TButton;

Image12: TImage;

Memo1: TMemo;

Image1: TImage;

Image14: TImage;

Panel6: TPanel;

Image13: TImage;

Image15: TImage;

Button3: TButton;

Label1: TLabel;

Label2: TLabel;

Panel7: TPanel;

ListBox2: TListBox;

ListBox3: TListBox;

ListBox4: TListBox;

ListBox5: TListBox;

ListBox6: TListBox;

ListBox7: TListBox;

ListBox8: TListBox;

Button5: TButton;

ListBox9: TListBox;

Panel8: TPanel;

ListBox10: TListBox;

ListBox11: TListBox;

ListBox12: TListBox;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

ListBox13: TListBox;

Label7: TLabel;

Label8: TLabel;

Button6: TButton;

Image16: TImage;

Image17: TImage;

Image18: TImage;

Image19: TImage;

Image20: TImage;

Button4: TButton;

ListBox14: TListBox;

Panel9: TPanel;

Image21: TImage;

Timer1: TTimer;

Image22: TImage;

Image23: TImage;

Image24: TImage;

Timer2: TTimer;

Image25: TImage;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

MaxLevel = 10;

MaxLico = 3;

var

Form1: TForm1;

Podstanovka : array [ 'A'..'Z' ] of string;

Level : integer;

GlazaY : integer;

Lico : array [ 1..MaxLico ] of TImage;

implementation

function Slog ( ListBox : TListBox ) : string;

var i,k : integer; buf : string;

begin

for i:=0 to ListBox.Items.Count-1 do begin

k:=random(ListBox.Items.Count);

buf:=ListBox.Items[k];

ListBox.Items[k]:=ListBox.Items[i];

ListBox.Items[i]:=buf;

end;

Slog:=ListBox.Items[0];

end;

function Podst ( s : string ) : string;

var rez : string; i : integer;

begin

rez:='';

i:=1;

while (i<=length(s)) do begin

if (s[i]='#')

then begin

i:=i+1;

rez:=rez+Podstanovka[s[i]];

end

else begin

rez:=rez+s[i];

end;

i:=i+1;

end;

Podst:=rez;

end;

function Gradient(x, x1, R1,G1,B1, x2, R2,G2,B2:integer):TColor;

var t,R,G,B:real;

begin

t:= (x-x1)/(x2-x1);

R:= R1 + t*(R2-R1);

G:= G1 + t*(G2-G1);

B:= B1 + t*(B2-B1);

Gradient:=RGB(Round(R), Round(G), Round(B));

end;

procedure GradientGorizont ( x1,y1,x2,y2 : integer;

R1,G1,B1, R2,G2,B2 : integer;

Image : TImage );

var i : integer;

begin

for i:=y1 to y2 do begin

Image.Canvas.Pen.Color:=Gradient(i, y1, R1,G1,B1, y2, R2,G2,B2);

Image.Canvas.Rectangle(x1,i,x2,i+1);

end;

end;

procedure GradientVertikal ( x1,y1,x2,y2 : integer;

R1,G1,B1, R2,G2,B2 : integer;

Image : TImage );

var i : integer;

begin

for i:=x1 to x2 do begin

Image.Canvas.Pen.Color:=Gradient(i, x1, R1,G1,B1, x2, R2,G2,B2);

Image.Canvas.Rectangle(i,y1,i+1,y2);

end;

end;

procedure Patno ( X0,Y0, RadX,RadY : integer; Plotn : real;

R1,G1,B1, R2,G2,B2 : integer;

Image : TImage );

var i,Kolvo,x,y : integer; Cvet : TColor; fi,R : real;

begin

Kolvo:=round((Pi*RadX*RadY)*Plotn);

for i:=1 to Kolvo do begin

R:=random;

fi:=random*2*pi;

x:=round(X0+R*RadX*cos(fi));

y:=round(Y0+R*RadY*sin(fi));

Cvet:=Gradient(random(100)+1, 1, R1,G1,B1, 100, R2,G2,B2);

Image.Canvas.Pixels[x,y]:=Cvet;

end;

end;

procedure UzorVer ( Image : TImage );

var i,X,Y,R : integer;

begin

Image.Canvas.Pen.Color:=clGray;

Image.Canvas.Brush.Color:=clGray;

Image.Canvas.Rectangle(0,0,Image.Width,Image.Height);

for i:=0 to (Image.Height div Image.Width)-1 do begin

R:=(Image.Width div 2)-1;

X:=(Image.Width div 2);

Y:=i*Image.Width+(Image.Width div 2);

Image.Canvas.Pen.Color:=clBlack;

Image.Canvas.Brush.Color:=cl3DDkShadow; {RGB(100,155,184)}

Image.Canvas.Ellipse(X-R,Y-R,X+R,Y+R);

Image.Canvas.Pen.Color:=clSilver;

Image.Canvas.Brush.Color:=clGray;

Image.Canvas.Ellipse(X-2,Y-2,X-1,Y-1);

end;

end;

procedure UzorGor ( Image : TImage );

var i,X,Y,R : integer;

begin

Image.Canvas.Pen.Color:=clGray;

Image.Canvas.Brush.Color:=clGray;

Image.Canvas.Rectangle(0,0,Image.Width,Image.Height);

for i:=0 to (Image.Width div Image.Height)-1 do begin

R:=(Image.Height div 2)-1;

Y:=(Image.Height div 2);

X:=i*Image.Height+(Image.Height div 2);

Image.Canvas.Pen.Color:=clBlack;

Image.Canvas.Brush.Color:=cl3DDkShadow; {RGB(100,155,184)}

Image.Canvas.Ellipse(X-R,Y-R,X+R,Y+R);

Image.Canvas.Pen.Color:=clSilver;

Image.Canvas.Brush.Color:=clGray;

Image.Canvas.Ellipse(X-2,Y-2,X-1,Y-1);

end;

end;

procedure ProgressLevel;

var i,X,Y,R : integer;

begin

UzorGor(Form1.Image21);

for i:=0 to Level-1 do begin

R:=(Form1.Image21.Height div 2)-1;

Y:=(Form1.Image21.Height div 2);

X:=i*Form1.Image21.Height+(Form1.Image21.Height div 2);

Form1.Image21.Canvas.Pen.Color:=clMaroon;

Form1.Image21.Canvas.Brush.Color:=clMaroon;

if (i=(Level-1)) then Form1.Image21.Canvas.Brush.Color:=clRed;

Form1.Image21.Canvas.Ellipse(X-R,Y-R,X+R,Y+R);

Form1.Image21.Canvas.Pen.Color:=clYellow;

Form1.Image21.Canvas.Brush.Color:=clWhite;

Form1.Image21.Canvas.Ellipse(X-2,Y-2,X-1,Y-1);

end;

end;

procedure Glaza ( Faza : real; Image : TImage );

var X,Y : integer;

begin

{глаза}

Image.Canvas.Pen.Color:=clBlack;

Image.Canvas.Brush.Color:=clRed;

Image.Canvas.Ellipse(25-11-9,GlazaY-6,25-11+9,GlazaY+6);

Image.Canvas.Ellipse(25+11-9,GlazaY-6,25+11+9,GlazaY+6);

{зрачки}

Image.Canvas.Brush.Color:=clBlack;

X:=round(5*cos(Faza*2*pi));

Y:=round(1*sin(Faza*2*pi));

Image.Canvas.Ellipse(25-11+X-4,GlazaY+Y-4,25-11+X+4,GlazaY+Y+4);

Image.Canvas.Ellipse(25+11+X-4,GlazaY+Y-4,25+11+X+4,GlazaY+Y+4);

end;

procedure Monstr ( Visota{высота туловища}, Shirina{ширина туловища},

R1,G1,B1, R2,G2,B2, {цвета туловища}

R3,G3,B3, R4,G4,B4 {цвета головы и лап} : integer;

Image : TImage );

begin

Image.Canvas.Pen.Color:=clWhite;

Image.Canvas.Brush.Color:=clWhite;

Image.Canvas.Rectangle(0,0,Image.Width,Image.Height);

Form1.Image22.Canvas.Pen.Color:=clWhite;

Form1.Image22.Canvas.Brush.Color:=clWhite;

Form1.Image22.Canvas.Rectangle(0,0,Form1.Image22.Width,Form1.Image22.Height);

{туловище}

Patno ( 95,280-30-(Visota div 2), (Shirina div 2),(Visota div 2),

3.5, R1,G1,B1, R2,G2,B2, Image );

{голова}

GlazaY := (280-30-Visota-15) - 7;

Patno ( 95,280-30-Visota-15, 25,25,

3.5, R3,G3,B3, R4,G4,B4, Image );

Glaza(random,Form1.Image22);

{нижняя левая лапа}

Patno ( 95-(Shirina div 2)+(Shirina div 4),280-30-5, 15,30,

3.5, R3,G3,B3, R4,G4,B4, Image );

Patno ( 95-(Shirina div 2)+(Shirina div 4)-10,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95-(Shirina div 2)+(Shirina div 4) ,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95-(Shirina div 2)+(Shirina div 4)+10,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

{нижняя правая лапа}

Patno ( 95+(Shirina div 2)-(Shirina div 4),280-30-5, 15,30,

3.5, R3,G3,B3, R4,G4,B4, Image );

Patno ( 95+(Shirina div 2)-(Shirina div 4)-10,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95+(Shirina div 2)-(Shirina div 4) ,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95+(Shirina div 2)-(Shirina div 4)+10,280-30-5+30, 3, 7,

5.5, R3,G3,B3, R3,G3,B3, Image );

{верхняя левая лапа}

Patno ( 95-(Shirina div 2),280-30-Visota+30, 20,15,

3.5, R3,G3,B3, R4,G4,B4, Image );

Patno ( 95-(Shirina div 2)-20,280-30-Visota+20, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95-(Shirina div 2)-23,280-30-Visota+30, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95-(Shirina div 2)-20,280-30-Visota+40, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

{верхняя правая лапа}

Patno ( 95+(Shirina div 2),280-30-Visota+30, 20,15,

3.5, R3,G3,B3, R4,G4,B4, Image );

Patno ( 95+(Shirina div 2)+20,280-30-Visota+20, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95+(Shirina div 2)+23,280-30-Visota+30, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

Patno ( 95+(Shirina div 2)+20,280-30-Visota+40, 10, 2,

5.5, R3,G3,B3, R3,G3,B3, Image );

end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

const

Fon : array [ 1..6,1..8 ] of integer = (

( 0, 20, 00, 00,000, 04, 22,066),

( 20, 100, 04, 22,066, 06, 32,091),

(100, 140, 06, 32,091, 10, 45,126),

(140, 250, 10, 45,126, 00,102,000),

(250, 280, 00,102,000, 153,102,000),

(280, 330, 153,102,000, 102,051,000));

var i,k,R,G,B,dx,dy,x,y,N : integer; t : real;

begin

{фон}

for i:=1 to 6 do begin

GradientGorizont(0,Fon[i,1],Image13.Width,Fon[i,2],

Fon[i,3],Fon[i,4],Fon[i,5],

Fon[i,6],Fon[i,7],Fon[i,8],

Image13);

end;

{звёзды}

N:=20;

for i:=0 to N do begin

B:=random(10)*10+154;

x:=i*(Image13.Width div N)-10+random(21);

if random(3)=0

then begin y:=random(150); R:=1; end

else begin y:=random( 50); R:=random(3); end;

Image13.Canvas.Pen.Color:=RGB(B,B,B);

Image13.Canvas.Brush.Color:=clWhite;

Image13.Canvas.Ellipse(x-R,y-R,x,y);

end;

{кусты вдали}

for i:=(160 div 10) to (250 div 10) do begin

t:= ((i*10)-Fon[4,1])/(Fon[4,2]-Fon[4,1]);

R:= round( Fon[4,3] + t*(Fon[4,6]-Fon[4,3]) );

G:= round( Fon[4,4] + t*(Fon[4,7]-Fon[4,4]) );

B:= round( Fon[4,5] + t*(Fon[4,8]-Fon[4,5]) );

dx:=(i-14)*2+5;

for k:=1 to (Image13.Width div dx) do begin

dy:=random(i*i div 18);

if (random(9)=0) then dy:=dy*2;

if (random(9)=0) then dy:=dy+10;

Patno ( k*dx,i*10-(dy div 2)-5, dx-5+random(11),dy,

0.7,

R ,G ,B,

R+random(21),G+random(21),B+random(21),

Image13 );

end;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize;

Form1.Left:=10;

Form1.Top :=10;

UzorVer(Image3); UzorVer(Image5); UzorVer(Image4);

UzorGor(Image6); UzorGor(Image7); UzorGor(Image8);

UzorGor(Image9); UzorGor(Image10); UzorGor(Image11);

UzorGor(Image12);

Button1Click(Sender); {фон-пейзаж}

Button3Click(Sender); {страницы книги}

{фазы изменения лица}

Lico[ 1]:=Image23;

Lico[ 2]:=Image24;

Lico[ 3]:=Image25;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

{левая страница}

GradientVertikal( 0, 0,120,133, 200,200,180, 220,220,215, Image2);

GradientVertikal(121, 0,190,133, 220,220,215, 194,200,180, Image2);

GradientVertikal(191, 0,207,133, 194,200,180, 110,090,010, Image2);

{правая страница}

GradientVertikal(208, 0,217,133, 110,090,020, 170,170,140, Image2);

GradientVertikal(218, 0,270,133, 170,170,140, 200,200,195, Image2);

GradientVertikal(271, 0,300,133, 200,200,195, 195,202,202, Image2);

GradientVertikal(301, 0,422,133, 195,202,202, 165,160,135, Image2);

end;

procedure TForm1.Button5Click(Sender: TObject);

var i,k,KolvoZadach,NomerZadachi,NomerStroki : integer;

s,ss : string;

begin

{заполнение массива подстановок}

Podstanovka['A']:=Slog(ListBox9);

Podstanovka['B']:=Slog(ListBox11);

Podstanovka['C']:=Slog(ListBox12);

Podstanovka['D']:=Slog(ListBox2)+Slog(ListBox4)+Slog(ListBox5);

Podstanovka['E']:=Slog(ListBox13);

Podstanovka['X']:=IntTostr(random(80)+12);

Podstanovka['Y']:=IntTostr(random(850)+107);

Podstanovka['Z']:=IntTostr(random(8900)+1002);

{выбор задачи}

KolvoZadach:=ListBox10.Items.Count div 22;

NomerZadachi:=random(KolvoZadach);

NomerStroki:=NomerZadachi*22;

{переменные и константы}

ListBox1.Items.Clear;

for i:=0 to 7 do begin

ListBox1.Items.Add(Podst(ListBox10.Items[NomerStroki+2+i]));

end;

{правильная программа}

ListBox14.Items.Clear;

for i:=0 to 9 do begin

ListBox14.Items.Add(Podst(ListBox10.Items[NomerStroki+12+i]));

end;

{место для написания программы}

Memo1.Lines.Clear;

for i:=0 to 9 do begin

s:=ListBox14.Items[i];

ss:='';

if (s>'') then begin

k:=1;

while (s[k]=' ') do begin

ss:=ss+' ';

k:=k+1;

end;

if ((random(MaxLevel)+1)>=Level) then ss:=ss+s[k];

end;

Memo1.Lines.Add(ss);

end;

{левая страница книги}

Label1.Caption:='Монстр '+Podstanovka['D']

+', '+Slog(ListBox6)+', '+Slog(ListBox6)+', '+Slog(ListBox6)

+', не боится ни '

+Slog(ListBox7)+', ни '

+Slog(ListBox7)+', ни '

+Slog(ListBox7)+'. '

+Slog(ListBox8);

{правая страница книги}

Label2.Caption:=Slog(ListBox3)+' '+Podst(ListBox10.Items[NomerStroki]);

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

Monstr(random(110)+90{высота туловища},

random(70)+60 {ширина туловища},

random(90)+10,random(90)+10,random(90)+10, {цвета туловища}

random(90)+10,random(90)+10,random(90)+10,

random(90)+10,random(90)+10,random(90)+10, {цвета головы и лап}

random(90)+10,random(90)+10,random(90)+10,

Form1.Image16 );

end;

procedure TForm1.Button2Click(Sender: TObject);

var i,k : integer; s1,s2 : string; Verno : Boolean;

begin {отправка программы-заклинания}

{проверить правильность программы}

if (ListBox14.Items.Count=Memo1.Lines.Count)

then begin

Verno:=true;

for i:=0 to ListBox14.Items.Count-1 do begin

s1:=ListBox14.Items[i];

s2:=Memo1.Lines[i];

if (length(s1)=length(s2))

then begin

for k:=1 to length(s1) do begin

if (s1[k]<>s2[k]) then Verno:=false;

end;

end

else Verno:=false;

end;

end

else Verno:=false;

{если верно, то перейти на следующий уровень}

if Verno then begin

if (Level<MaxLevel)

then begin

Timer1.Enabled:=false; {движение глаз монстра}

{меняем фон-пейзаж}

Button1Click(Sender);

{генерируется и прописывается задание}

Button5Click(Sender);

{появляется монстр}

Button6Click(Sender);

{следующий уровень}

Level:=Level+1;

ProgressLevel;

Timer1.Enabled:=true; {движение глаз монстра}

end

else begin

{сообщение о победе}

MessageDlg('Большое спасибо, я спасён!',mtWarning,[mbOK],0);

Form1.Close;

end;

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin {согласие помочь = начало игры}

{начинается отсчёт уровней}

Level:=1;

Panel9.Show;

ProgressLevel;

{генерируется и прописывается задание}

Button5Click(Sender);

{появляется монстр}

Button6Click(Sender);

Timer1.Enabled:=true; {движение глаз монстра}

{кнопка меняется}

Button4.Visible:=false;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Glaza(random,Image22);

Timer1.Interval:=random(2000)+1000;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

var KakoeLico,i : integer;

begin

Timer2.Interval:=random(2000)+500;

KakoeLico:=random(MaxLico+1);

for i:=1 to MaxLico do begin

Lico[i].Visible:=(i=KakoeLico);

end;

end;

end.

Приложение В