home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 September
/
Chip_2000-09_cd1.bin
/
ctenari
/
Krejci
/
MainUnit.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2000-07-23
|
3KB
|
154 lines
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, StdCtrls;
type
TMainForm = class(TForm)
BackGnd3: TImage;
BackGnd2: TImage;
BackGnd1: TImage;
SpriteImage: TImage;
SpriteAndImage: TImage;
GoTimer: TTimer;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure GoTimerTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
GoLeft,
GoRight,
GoUp,
GoDown:boolean;
SpriteLeft,
SpriteTop:integer;
implementation
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject);
begin
// p°i°azenφ obrßzk∙ do ostatnφch komponent
BackGnd2.Picture.Assign(BackGnd1.Picture);
BackGnd3.Picture.Assign(BackGnd1.picture);
// BackGnd3 p°es cel² formulß°
// a vycentrovßnφ formu
BackGnd3.AutoSize:=true;
MainForm.AutoSize:=true;
Mainform.Position:=poDesktopCenter;
// pohyb spritu doprava dol∙
// z pozice 0,0 a spuÜt∞nφ timeru
GoLeft:=false;
GoUp:=false;
GoRight:=true;
GoDown:=true;
SpriteLeft:=0;
SpriteTop:=0;
GoTimer.Enabled:=true;
end;
procedure TMainForm.GoTimerTimer(Sender: TObject);
var VyskaVesmiru,
SirkaVesmiru,
VyskaSpritu,
SirkaSpritu:integer;
begin
// nastavenφ promenn²ch
VyskaVesmiru:=BackGnd3.Height;
SirkaVesmiru:=BackGnd3.Width;
VyskaSpritu:=SpriteImage.Height;
SirkaSpritu:=SpriteImage.Width;
//V²poΦet novΘ polohy spritu-----------
if GoLeft then
begin
if SpriteLeft > 0 then
SpriteLeft:=SpriteLeft-1
else
begin
GoLeft:=false;
GoRight:=true;
end;
end;
if GoDown then
begin
if (VyskaSpritu+SpriteTop)<VyskaVesmiru then
SpriteTop:=SpriteTop+1
else
begin
GoDown:=false;
GoUp:=true;
end;
end;
if GoUp then
begin
if SpriteTop>0 then
SpriteTop:=SpriteTop-1
else
begin
GoUp:=false;
GoDown:=true;
end;
end;
if GoRight then
begin
if (SpriteLeft+SirkaSpritu)<SirkaVesmiru then
SpriteLeft:=SpriteLeft+1
else
begin
GoRight:=false;
GoLeft:=true;
end;
end;
// vyma₧eme p∙vodnφ kresbu spritu v BackGnd2
// zkopφrovßnφm obdΘlnφku z BackGnd1
BitBlt(BackGnd2.canvas.handle,0,0,SirkaVesmiru,
VyskaVesmiru,BackGnd1.canvas.handle,0,0,SrcCOPY);
// nynφ vykreslφme sprite na nezobrazovanou bitmapu
// Φφm₧ zamezφme blikßnφ... :-)
// prvnφ vytvo°φme Φernou dφru na mφst∞ spritu tφm
// ₧e do bitmapy zkopφrujeme masku spritu pomocφ
// operace SrcAND
BitBlt(BackGnd2.canvas.handle,SpriteLeft,SpriteTop,
SirkaSpritu,VyskaSpritu,SpriteAndImage.canvas.handle,
0, 0,SrcAnd);
Backgnd2.Refresh;
// a potom u₧ zkopφprujeme sprite pomocφ
// SrcPaint
BitBlt(BackGnd2.canvas.handle,SpriteLeft, SpriteTop,
SirkaSpritu, VyskaSpritu, SpriteImage.canvas.handle,
0,0,SrcPaint);
// a nakonec to celΘ zkopφrujeme
// do v²dlednΘ BackGnd3
BitBlt(BackGnd3.canvas.handle,0,0,SirkaVesmiru, VyskaVesmiru,
BackGnd2.Canvas.Handle,0,0,SrcCopy);
BackGnd3.Refresh;
end;
end.