jogos de código aberto
 
Modelo genérico

Este fonte é composto pela estrutura básica do Game Designer da TILT online e pode ser modificado à vontade, para ser adaptado às necessidades do desenvolvedor. Ele carrega, na execução, os arquivos gráficos definidos anteriormente na ferramenta de design, bastando para isso que se informe o nome do jogo na variável global Nome.

var
Nome: string = 'teste';
//---------------------

A procedure TransCriar modifica o formulário do jogo de modo a obedecer o desenho feito no arquivo do painel do jogo. Como os botões padrão do sistema e a barra superior pradrão são desconsiderados, o desenvolvedor deve usar Alt+F4 para encerrar o jogo, ou incluir um botão de encerramento. A procedure DrawTrans transfere um arquivo gráfico para a área de buffer de imagem, considerando a transparência da cor fuchsia.

Na inicialização é criado o buffer de montagem da tela, que é posteriormente descartado quando o jogo é encerrado.

procedure TForm1.FormCreate(Sender: TObject);
var
SL1: TStringList;
begin
...
Buf:= TBitmap.Create;
Buf.Width:= Tela.Width;
Buf.Height:= Tela.Height;
Buf.Canvas.FillRect(bounds(0,0,Buf.Width,Buf.Height));
Buf.PixelFormat:= pfDevice; ...
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Buf.Free;
end;

A montagem do buffer de tela segue os procedimento normais desses casos e o desenvolvedor pode simplesmente remover do fonte os modos que não serão usados e refinar ainda mais o código de processamento.

//=== Monta o buffer de vídeo a partir do cenário ========
procedure TForm1.MontaBuffer;
var
Tw,Th,Tz: integer;
begin
Tw:= Tela.Width;
if Cena.Width < Tela.Width then Tw:= Cena.Width;
Th:= Tela.Height;
if Cena.Height < Tela.Height then Th:= Cena.Height;
//Modo 1 = deslocamento horizontal do cenário
if Modo = 1 then begin
Tw:= Cena.Width - Tlx;
if Tw > Tela.Width then Tw:= Tela.Width;
Buf.Canvas.CopyRect(bounds(0,0,Tw,Th),
Cena.Canvas,bounds(Tlx,Tly,Tw,Th));
if Tw < Tela.Width then begin
Buf.Canvas.CopyRect(bounds(Tw,0,Tela.Width-Tw,Th),
Cena.Canvas,bounds(0,Tly,Tela.Width-Tw,Th));
end;
Tlx:= Tlx + Vel;
if Tlx >= Cena.Width then Tlx:= Tlx - Cena.Width;
exit;
end;
//Modo 2 = deslocamento vertical do cenário
if Modo = 2 then begin
Th:= Cena.Height - Tly;
if Th > Tela.Height then Th:= Tela.Height;
Buf.Canvas.CopyRect(bounds(0,0,Tw,Th),
Cena.Canvas,bounds(Tlx,Tly,Tw,Th));
if Th < Tela.Height then begin
Buf.Canvas.CopyRect(bounds(0,Th,Tw,Tela.Height-Th),
Cena.Canvas,bounds(Tlx,0,Tw,Tela.Height-Th));
end;
Tly:= Tly + Vel;
if Tly >= Cena.Height then Tly:= Tly - Cena.Height;
exit;
end;
//Modo 3 = deslocamento vinculado
if Modo = 3 then begin
Tw:= Cena.Width - Tlx;
if Tw > Tela.Width then Tw:= Tela.Width;
Buf.Canvas.CopyRect(bounds(0,0,Tw,Th),
Cena.Canvas,bounds(Tlx,Tly,Tw,Th));
if Tw < Tela.Width then begin
Buf.Canvas.CopyRect(bounds(Tw,0,Tela.Width-Tw,Th),
Cena.Canvas,bounds(0,Tly,Tela.Width-Tw,Th));
end;
Th:= Cena.Height - Tly;
if Th > Tela.Height then Th:= Tela.Height;
Buf.Canvas.CopyRect(bounds(0,0,Tw,Th),
Cena.Canvas,bounds(Tlx,Tly,Tw,Th));
if Th < Tela.Height then begin
Buf.Canvas.CopyRect(bounds(0,Th,Tw,Tela.Height-Th),
Cena.Canvas,bounds(Tlx,0,Tw,Tela.Height-Th));
end;
exit;
end;
//Modo 4 ou modo 0
Buf.Canvas.CopyRect(bounds(0,0,Tw,Th),
Cena.Canvas,bounds(Tlx,Tly,Tw,Th));
end;

O mesmo pode ser feito com o evento OnTimer, que controla a execução do jogo.


ZIPsource:

Clique aqui e baixe o pacote zip contendo esse fonte, em Delphi.

 
online