//demonstration of script that allows to control //character with arrow keys program GameSample; const SquareWidth = 300; SquareHeight = 300; DelayTime = 10; MoveStep = 2; //in future we could keep various character info here //like lives, ammo, score etc type TCharacterData = record x, y: Integer; end; var Char: TCharacterData; //keep main character data here ImgBuff: Integer; //buffer image that we will draw to //set up technical things (show window, initialize buffer) procedure Init; begin DisplayDebugImgWindow(SquareWidth, SquareHeight); ImgBuff:= BitmapFromString(SquareWidth, SquareHeight, ''); end; //initialize character data (position, lives, etc) procedure InitChar(var Char: TCharacterData); begin Char.x:= SquareWidth div 2; Char.y:= SquareHeight div 2; end; //control char procedure MoveChar(var Char: TCharacterData); begin if(IsArrowDown(0))and(Char.y > 0)then Char.y:= Char.y - MoveStep; if(IsArrowDown(1))and(Char.x < SquareWidth)then Char.x:= Char.x + MoveStep; if(IsArrowDown(2))and(Char.y < SquareHeight)then Char.y:= Char.y + MoveStep; if(IsArrowDown(3))and(Char.x > 0)then Char.x:= Char.x - MoveStep; end; //draw char on buffer image procedure DrawChar(Buffer: Integer; x, y: Integer); var Canvas: TCanvas; begin Canvas:= GetBitmapCanvas(Buffer); Canvas.Pen.Style:= psSolid; Canvas.Pen.Color:= clWhite; Canvas.Ellipse(x - 5, y - 20, x + 5, y - 10); Canvas.MoveTo(x, y - 10); Canvas.LineTo(x, y + 10); Canvas.MoveTo(x, y + 10); Canvas.LineTo(x - 5, y + 20); Canvas.MoveTo(x, y + 10); Canvas.LineTo(x + 5, y + 20); Canvas.MoveTo(x - 5, y); Canvas.LineTo(x + 5, y); end; //clear buffer image procedure ClearScreen(Buffer: Integer); var Canvas: TCanvas; begin Canvas:= GetBitmapCanvas(Buffer); Canvas.Pen.Style:= psSolid; Canvas.Pen.Color:= clBlack; Canvas.Brush.Style:= bsSolid; Canvas.Brush.Color:= clBlack; Canvas.Rectangle(0, 0, SquareWidth, SquareHeight); end; //draw everything on buffer image procedure DrawWorld(Buffer: Integer; Char: TCharacterData); begin ClearScreen(Buffer); DrawChar(Buffer, Char.x, Char.y); end; //draw buffer image to screen procedure OnScreen(Buffer: Integer); begin CopyCanvas(GetBitmapCanvas(Buffer), GetDebugCanvas, 0, 0, SquareWidth, SquareHeight, 0, 0, SquareWidth, SquareHeight); end; //call display routine safely because we draw on a visible form! procedure SafeOnScreen(Buffer: Integer); var v: TVariantArray; begin setarraylength(v, 1); v[0]:= Buffer; ThreadSafeCall('OnScreen', v); end; //----------------------------------------------------------- // MAIN APPLICATION //----------------------------------------------------------- begin Init; //initialize program InitChar(Char); //initialize game character repeat MoveChar(Char); //move character around DrawWorld(ImgBuff, Char); //draw everything as it looks SafeOnScreen(ImgBuff); //display drawing to screen Sleep(DelayTime); //let CPU rest a little until(False); end.