Lazarus - help s hrou

Programovacie jazyky, rady, poradňa...
LittleBlackDevil
Novice
Novice
Príspevky: 1
Registrovaný: 05 jan 2013, 12:44

Lazarus - help s hrou

Príspevok od používateľa LittleBlackDevil »

Ahojte, pokusam sa o vytvorenie hry Mahjong v Lazaruse, obrazky mam pripravene, pozadie tiez, ma to konturky aplikacie, problem je s unitom, ktora riadi hraciu plochu, teda s nacitanim obrazkov, kde mam pocit, ze si len prepisujem prvych par...
Plan je taky, vytvorit pole tehliciek, z nich random prvky podla usporiadania ako tu:
//obrázky patria do prílohy
A potom poriesit aby boli kliknutelne len tie bez suseda a aby sa znicili len obe rovnake, ale tapem v tom...

Znicohonic mi vyskocilo toto:
//obrázky patria do prílohy
a vazne netusim, kde je chyba, ked predtym to fungovalo...

Tu je unit, ktory pracuje s polom:

Kód: Vybrať všetko

unit TileUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Menus, StdCtrls;

type

{ TTile }

 TTile=class(Tobject)
 public
  x,y:integer;
  constructor create(xx,yy:integer);
  procedure vykresli;
  destructor destroy; override;
  end;

implementation

{ TTile }

var
  hracia_plocha:array of tbitmap;

constructor TTile.create(xx, yy: integer);
var
  i,j:integer;
  tile: tbitmap;
begin
  hracia_plocha:=nil;
  for i:=1 to 9 do begin
    for j:=1 to 4 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:= TBitmap.Create;;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJs%d.bmp',[i]));
    end;
  end;

  for i:=1 to 9 do begin
    for j:=5 to 8 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJt%d.bmp',[i]));
    end;
  end;

  for i:=1 to 9 do begin
    for j:=10 to 13 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJw%d.bmp',[i]));
    end;
  end;

  for i:=1 to 4 do begin
    for j:=14 to 17 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJf%d.bmp',[i]));
    end;
  end;

  for i:=1 to 3 do begin
    for j:=18 to 21 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJd%d.bmp',[i]));
    end;
  end;

  for i:=1 to 4 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJh%d.bmp',[i]));
  end;

  for i:=1 to 4 do begin
    SetLength(hracia_plocha, Length(hracia_plocha) + 1);
    hracia_plocha[i]:=TBitmap.Create;
    hracia_plocha[i].LoadFromFile(Format('Obrazky/MJk%d.bmp',[i]));
  end;

end;

procedure TTile.vykresli;
begin

end;

destructor TTile.destroy;
begin
  inherited destroy;
end;

end.
a tu hlavny unit:

Kód: Vybrať všetko

unit HraUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Menus, StdCtrls, TileUnit;

type

  { TForm1 }

  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    procedure MenuItem7Click(Sender: TObject);
    procedure MenuItem8Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  Sec, Min, Hod: Integer;
  X,Y : Integer;
implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  Pozadie: TBitmap;
begin
  Pozadie:=TBitmap.Create;
  Pozadie.LoadFromFile('pozadie.bmp');
  Image1.Picture.Bitmap.Height := Image1.Height;
  Image1.Picture.Bitmap.Width := Image1.Width;
  Image1.Canvas.StretchDraw(Image1.ClientRect, Pozadie);
  Pozadie.Free;
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
var
  Kocky: TTile;
begin
  Label5.Caption := TimeToStr(Time);
  Timer1.Enabled := True;
  Kocky := TTile.Create(X,Y);
end;

procedure TForm1.MenuItem5Click(Sender: TObject);
begin

end;

procedure TForm1.MenuItem6Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.MenuItem7Click(Sender: TObject);
begin
  ShowMessage('Z hracieho poľa odstraňuješ vždy dva voľné kamene s rovnakými symbolmi. Voľné kamene sú tie, ktoré na sebe nemajú žiadne ďalšie kamene a majú miesto vľavo alebo vpravo. Systém bodovania: za každý pár 10 bodov, za každý ďalší s rovnakou hodnotou bonus 10 bodov.');
end;

procedure TForm1.MenuItem8Click(Sender: TObject);
begin
  showmessage('***');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var StaryCas: TTime;
begin
  StaryCas := StrToTime(Label5.Caption);
  Label2.Caption := TimeToStr((Time - StaryCas));
end;


end.
Budem vdacna za kazdu radu, som z toho somar :?
Prílohy
pozadie.png
mahjong.jpg
mahjong.jpg (77.81 KiB) 626 zobrazení
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Lazarus - help s hrou

Príspevok od používateľa javatar »

daj si zdrojak do tagu code nie do tagu quote - potom sa niekomu snad bude chciet na to pozriet (takto sa to fakt neda citat)
Redpoint1
Light Expert
Light Expert
Príspevky: 66
Registrovaný: 25 sep 2006, 23:24
Kontaktovať používateľa:

Re: Lazarus - help s hrou

Príspevok od používateľa Redpoint1 »

Kód: Vybrať všetko

  Image1.Picture.Bitmap.Height := Image1.Height;
  Image1.Picture.Bitmap.Width := Image1.Width;
Vymazat a pripade ak mas TImage na ktory chces vykreslit pozadie rovnako velku ako TForm staci uplne
Image1.Canvas.StretchDraw(Image1.ClientRect, Pozadie);

Popr ak chces aby automaticky bol TImage kam kreslis pozadie velky ako TForm (teda cela aplikacia) tak prehod property TImage-u align = alClient

!!Velkost TImage sa nemeni automaticky pri zmene velkosti spustenej aplikacie!!

Alebo ak chces mozes to skusit rucne:

Kód: Vybrať všetko

   Image1.Top := 0;
   Image1.Left := 0;
   Image1.Width := Form1.Width;
   Image1.Height := Form1.Height;
   Image1.Canvas.StretchDraw(Form1.ClientRect, Obr);   
Napísať odpoveď