Смекни!
smekni.com

Моделирование игровых программ (стр. 2 из 2)

· Для кнопки Button1 написать процедуру:

procedure TForm2.Button1Click(Sender: TObject)

begin

close;

end.

Эта процедура позволяет при нажатии на кнопку закрывать форму.

· Полученный проект Progr_ добавляем в первоначальный проект Soberi;

· Пункт меню о программе программируем следующей процедурой:

procedure TForm1.N7Click(Sender: TObject) (стр.21).

При вызове этого пункта на экран будет выводиться окно формы из проекта Progr_, которое содержит основные сведения о проекте Soberi.

11. Заключительный этап, на котором следует запустить проект.

Заключение

В результате выполнения курсовой работы в среде программирования Delphi 6 была смоделирована логическая игра под названием „Собери картинку”. Игра содержит меню, используя которое можно выбирать различные виды картинок, также существует возможность устанавливать уровень сложности, который предпочитает игрок. Если есть необходимость ознакомиться с правилами игры, то их тоже можно найти в главном меню, там же находится основная информация о программе.

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

Список используемой литературы:

1. Архангельский А. Я. Интегрированная среда разработки Delphi – М.:ЗАО, Бином; 1999.

2. Марко Кэнту для профессионалов Delphi 6: изд. Питер, 2002.

3. Фаронов В. В. DELPHI 6: Учебный курс (+ дискета) – СПб: Питер, 2002.

Приложение

Текст программы

unit Soberi_;

interface

uses

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

Dialogs, Menus, ExtDlgs;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

OpenPictureDialog1: TOpenPictureDialog;

procedure FormCreate(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormPaint(Sender: TObject);

procedure ShowPole;

procedure Mixer;

procedure NewGame;

procedure Formmas;

procedure N11Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Progr, Unit3;

{$R *.dfm}

var wc,hc,h,w: integer;fname: string;

pole: array of array of byte;

ex, ey:integer;

stp: array of array of byte;

{(1, 2, 3, 4),(5, 6, 7, 8), (9, 10, 11, 12), (13, 14, 15, 0)}

pic: TBitmap;

procedure TForm1.NewGame;

var

i, j:integer;

begin

try

pic.LoadFromFile(fname);

except

on EFopenError do

begin

ShowMessage('Ошибка обращения к файлу' + fname);

Form1.Close;

end;

end;

hc:=Pic.Height div H;

wc:=Pic.Width div W;

ClientWidth:= wc * W;

ClientHeight:= hc * H;

for i:=1 to H do

for j:=1 to W do

pole[i,j]:= stp[i,j];

Form1.Mixer;

Form1.ShowPole;

end;

function Finish: boolean;

var

row,col: integer;

i: integer;

begin

row:=1; col:=1;

Finish:= True;

for i:=1 to 15 do

begin

if pole[row,col] <> i then

begin

Finish:=False;

break;

end;

if col < 4 then inc(col) else begin

col :=1;

inc(row);

end;

end;

end;

procedure TForm1.Formmas;

var

i,j:integer;

begin

SetLength(stp,H+1,W+1);

SetLength(pole,H+1,W+1);

for i:=1 to H do

for j:=1 to W do

stp[i,j]:=h*(i-1)+j;

stp[H,W]:=0

end;

procedure Move(cx, cy:integer);

var

r:integer;

begin

if not (( abs(cx-ex)=1) and (cy-ey=0) or

( abs(cy-ey)=1) and (cx-ex=0)) then exit;

Pole[ey,ex]:=Pole[cy,cx];

Pole[cy,cx]:=0;

ex:=cx;

ey:=cy;

Form1.ShowPole;

if Finish then

begin

pole[H,W]:=H*W;

Form1.ShowPole;

r:=MessageDlg('Цель достигнута!'+ #13+

'Еще раз?', mtInformation, [mbYes, mbNo], 0);

if r = mrNo then Form1.Close;

Form1.NewGame;

end;

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

cx,cy:integer;

begin

cx:= Trunc(X / wc) + 1;

cy:= Trunc(Y / hc) +1;

Move(cx, cy);

end;

procedure TForm1.ShowPole;

var

Source, Dest: Trect;

sx, sy: integer;

i,j: integer;

begin

for i:=1 to W do

for j:=1 to H do

begin

sy:=((pole[i,j]-1) div W)*hc;

sx:=((pole[i,j]-1) mod W)*wc;

Source:=Bounds(sx,sy,wc,hc);

Dest:=Bounds((j-1)*wc,(i-1)*hc,wc,hc);

if pole[i,j] <> 0 then Canvas.CopyRect(Dest,pic.Canvas,Source)

else Canvas.Rectangle((j-1)*wc,(i-1)*hc,j*wc,i*hc);

end;

end;

procedure TForm1.Mixer;

var

x1,y1: integer;

x2,y2: integer;

d: integer;

i: integer;

begin

x1:=H; y1:=W;

randomize;

for i:=1 to 150 do

begin

repeat

x2:=x1;

y2:=y1;

d:=random(4)+1;

case d of

1: dec(x2);

2: inc(x2);

3: dec(y2);

4: inc(y2);

end;

until (x2>=1) and (x2<=h) and (y2>=1) and (y2<=w);

Pole[y1,x1]:= Pole[y2,x2];

Pole[y2,x2]:=0;

x1:=x2;

y1:=y2;

end;

ex:=x1;

ey:=y1;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

pic:= TBitMap.Create;fname:= 'pic_1.bmp';

H:=4;W:=4;

Formmas;

NewGame;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.ShowPole;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form2.ShowModal

end;

procedure TForm1.N2Click(Sender: TObject);

Var i,j:integer;

begin

for i:=1 to H do

for j:=1 to W do

pole[i,j]:= stp[i,j];

Form1.Mixer;

Form1.ShowPole;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

if OpenPictureDialog1.Execute

then fname:=OpenPictureDialog1.FileName;

NewGame;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form3.RichEdit1.Lines.LoadFromFile('Правила.rtf');

Form3.ShowModal;

end;

procedure TForm1.N8Click(Sender: TObject);

var

i,j:integer;

begin

H:=4;W:=4;

Formmas;

NewGame;

N2Click(Sender);

end;

procedure TForm1.N9Click(Sender: TObject);

var

i,j:integer;

begin

h:=5;w:=5;

Formmas;

NewGame;

N2Click(Sender);

end;

procedure TForm1.N10Click(Sender: TObject);

var

i,j:integer;

begin

h:=6;w:=6;

Formmas;

NewGame;

N2Click(Sender);

end;

end.