gt;gt;SUPER DESAFIOlt;lt;ME AJUDEM POR FAVORlt;lt;ESTO

Delphi

03/05/2003

vejam só este codigo, vou tentar explicar o q quero, este codigo é de um labririnto ele mostra o labrinto inteiro no form, em consequencia os elementos ficam pequenos, o q eu quero é q dê um efeito parecido com camera sabe almentar o tamanho dos quadrados e dos desenhos sem diminuir o numero deles, e com isso claro, eles poderam ser vistos todos de uma vez no form certo?, intaum a camera vai ter q andar tb como se fosse num jogo de futebol aonde a camera segue o jogador com a bola.
deu pra entender?
eu tentei fazer assim mais naum consegui
mapa.height:= bola.x;
...
vejam o código aqui
unit U_princ;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Grids, FileCtrl, Menus;

type
  Tfrmprinc = class(TForm)
    abrir: TOpenDialog;
    MOVER: TTimer;
    MainMenu: TMainMenu;
    mnMenu: TMenuItem;
    mnCarregarfase: TMenuItem;
    mnAbrireditor: TMenuItem;
    mnSobre: TMenuItem;
    procedure CARREGAR_FASE(Sender: TObject);
    procedure ABRIR_EDITOR(Sender: TObject);
    procedure MOVERTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure mnSobreClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TBOLA=record
    x,y:integer;
  end;
  TFINAL=record
    x,y:integer;
  end;

var
  frmprinc: Tfrmprinc;
  area:array[0..29,0..29]of integer;
  bola:TBOLA;
  final:TFINAL;
  MAPA,OFFscreen:TBitmap;

implementation

uses U_editor, U_sobre;

{$R *.DFM}

procedure Tfrmprinc.FormCreate(Sender: TObject);
begin
  MAPA        := Tbitmap.create;
  MAPA.Height := frmprinc.Height;
  MAPA.Width  := frmprinc.Width;
  OFFscreen        := Tbitmap.create;
  OFFscreen.Height := frmprinc.Height;
  OFFscreen.Width  := frmprinc.Width;
end;

procedure Tfrmprinc.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MAPA.free;
  OFFscreen.free;
end;

procedure NOVO;
var x,y:integer;
begin
  for y:=0 to 29 do
    for x:=0 to 29 do
      area[x,y] := 0;
end;

procedure DESENHAR_MAPA;
var R:Trect;
    X,Y,a,b:integer;
begin
  MAPA.Canvas.Brush.color := clsilver;
  MAPA.Canvas.Rectangle(0,0,MAPA.Width,MAPA.Height);
  for Y:=0 to 29 do
    for X:=0 to 29 do
      begin
        a := X*15;
        b := Y*15;
        R := Rect(a,b,a+15,b+15);
        case AREA[X,Y] of
          2:MAPA.Canvas.StretchDraw(R,frmeditor.parede.Picture.Graphic);
          3:MAPA.Canvas.StretchDraw(R,frmeditor.final.Picture.Graphic);
        end;
      end;
end;

procedure DESENHAR_BOLA;
var R:Trect;
    X,y:integer;
begin
  X := bola.X*15;
  Y := bola.Y*15;
  R := Rect(X,Y,X+15,Y+15);
  OFFscreen.Canvas.Draw(0,0,MAPA);
  OFFscreen.Canvas.StretchDraw(R,frmeditor.bola.Picture.Graphic);
  frmprinc.Canvas.Draw(0,0,OFFscreen);
end;

procedure Tfrmprinc.CARREGAR_FASE(Sender: TObject);
var ARQ:textfile;
    x,y,S:integer;
    temp:string;
begin
try
  if abrir.Execute then
    begin
      NOVO;
      AssignFile(ARQ,abrir.FileName);
      Reset(ARQ);
      for y:=0 to 29 do
        begin
          Readln(ARQ,temp);
          for x:=0 to 29 do
            begin
              S := strtoint(copy(temp,1,1));
              case S of
                1:begin//Define a posição da bola
                    bola.x := x;
                    bola.y := y;
                    area[x,y] := 0;//A posição da bola é controlada pela variável BOLA
                  end;
                2:area[x,y] := 2;
                3:begin//Define a posição do final
                    final.x := x;
                    final.y := y;
                    area[x,y] := 3;
                  end;
              end;
              delete(temp,1,1);
            end;
        end;
    end;
  closefile(ARQ);
  DESENHAR_MAPA;
  DESENHAR_BOLA;
  MOVER.Enabled := true;
Except end;
end;

procedure Tfrmprinc.ABRIR_EDITOR(Sender: TObject);
var PAUSADO:boolean;
begin
  PAUSADO := MOVER.Enabled;
  MOVER.Enabled := false;
  frmeditor.showmodal;
  MOVER.Enabled := PAUSADO;//Ativa o timer somente se já estivesse ativo
end;

procedure Tfrmprinc.MOVERTimer(Sender: TObject);
begin
  if GetKeyState(vk_left)<0 then //esquerda
    begin
      if (bola.x > 0)and(area[bola.x-1,bola.y] <> 2) then//Se for diferente de parede
        bola.x := bola.x-1;
    end;
  if GetKeyState(vk_right)<0 then //direita
    begin
      if (bola.x < 29)and(area[bola.x+1,bola.y] <> 2) then
        bola.x := bola.x+1;
    end;
  if GetKeyState(vk_up)<0 then //cima
    begin
      if (bola.y > 0)and(area[bola.x,bola.y-1] <> 2) then
        bola.y := bola.y-1;
    end;
  if GetKeyState(vk_down)<0 then //baixo
    begin
      if (bola.y < 29)and(area[bola.x,bola.y+1] <> 2) then
        bola.y := bola.y+1;
    end;
  DESENHAR_BOLA;

  if (bola.x = final.x)and(bola.y = final.y)then
    begin
      MOVER.Enabled := false;
      ShowMessage(´Você venceu!´+#13+´Escolha outra fase.´);
    end;
end;

procedure Tfrmprinc.mnSobreClick(Sender: TObject);
var PAUSADO:boolean;
begin
  PAUSADO := MOVER.Enabled;
  MOVER.Enabled := false;
  frmsobre.showmodal;
  MOVER.Enabled := PAUSADO; 
end;

end.



Robotizar

Robotizar

Curtidas 0

Respostas

Robotizar

Robotizar

03/05/2003

Me ajuda ai galera pelo amor de Deus!!!!!!!!!!!!!!!!!!!!!!!!!!!!


GOSTEI 0
Robotizar

Robotizar

03/05/2003

poxa galera me ajuda ai da uma força


GOSTEI 0
POSTAR