Kartenspiel

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Kartenspiel

Beitrag von EugenE »

Hallo,

ich bin dabei das Kartenspiel DuraK als kleines PC-Game zu machen , natürlich FreeWare^^

und ich wollte halt die Karten die man auf der Hand hat auch anzeigen lassen nur wie löst man es am sinnvollsten? , denn ich kann ja schlecht 36 TImage drauf knallen und diese dann immer verschieben lassen oder?^^

ich hoffe ihr kennt eine elegantere lösung^^

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Du brauchst nur 36 TBitmaps die du dann in OnPaint auf ein TCustomControl malst.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

wo finde ich das CustomControl ?^^

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

In den Lazarus Quellen. Du musst nur deine eigene Klasse davon ableiten.

z.B:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
 { TEugenControl }
 
 TEugenControl = class(TCustomControl)
  private
   fBild1:TBitmap;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Paint; override;
    property Bild1:TBitmap read fBild1 write fBild1;
  end;
 
 
var
  Form1: TForm1;
  Eugen:TEugenControl;
 
implementation
 
{ TEugenControl }
 
constructor TEugenControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Bild1:=TBitmap.Create;
end;
 
destructor TEugenControl.Destroy;
begin
  Bild1.free;
  inherited Destroy;
end;
 
procedure TEugenControl.Paint;
begin
  inherited Paint;
  Canvas.Brush.Color:=clwhite;
  Canvas.FillRect(BoundsRect);
  Canvas.TextOut(10,10,'Kapiert Eugen?');
  Canvas.Draw(20,20,fBild1);
end;
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Eugen:=TEugenControl.Create(Self);
  Eugen.Parent:=self;
  Eugen.Width:=Width;
  Eugen.Height:=Height;
  Eugen.Bild1.LoadFromFile('/home/theo/SI-calendar-2006.bmp');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Eugen.free;
end;
 
initialization
  {$I unit1.lrs}
 
end.
Um diesen Code zu testen mache Projekt -> Neues Projekt -> Anwendung. DoppelClicke im Objektinspektor auf OnCreate und OnDestroy dann
ersetze allen Code in Unit1 mit dem obigen. Ersetze den Pfad in LoadFromFile() mit einem Bitmap auf deiner Festplatte und kompiliere.

Tja und weshalb schreibe ich für Eugen den Code?: Training! Jede Frage festigt das Wissen, bloss nicht arrogant werden und meinen man wüsste alles. ;-) Isn't it Christian?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ich hätt das mit glscene in 3d gemacht karten lassen sich ja sehr einfach und gut abbilden einfach ne textur auf n polygon und fertsch
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

hm da wird nur ein leeres fenster angezeigt :(

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Tja, bei mir funzts.
Hast du denn die Events (OnCreate, OnDestroy) im OI auch "eingehängt"?

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

ach sry das habe ich übersehen , danke jez gehts , mal sehn was sich damit machen lässt dankööö ;)

und wie kann man jez das Bild verschieben?

ich habe das versucht

Code: Alles auswählen

Eugen.Bild1.Canvas.MoveTo(25,10);
bewegt sich kein stück^^

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Eugen.Bild1.Canvas.MoveTo(25,10);
Moveto bewegt den virtuellen cursor auf nem canvas zu einer position mit lineto danach malst du dann eine lienie ...

verschieben tust du das bild indem du es neuzeichnest an einer anderen position
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

So?

Code: Alles auswählen

Eugen.Bild1.Canvas.Draw(25,10,Eugen.Bild1);

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ja. Du musst eventuell das Neuzeichnen veranlassen mit Eugen.Invalidate oder Eugen.Repaint oder sowas.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

so habe jez globale variablen genommen und das geht dann mit dem repaint

nächstes problem , bmp unterstütz kein transparent also muss man ja eine farbe auswählen die dann ausgeschnitten wird stimmts?

ich habe das versucht , aber das bild hatte immer nur die farbe die ich ausgewählt habe

Code: Alles auswählen

Eugen.Bild1.TransparentColor := $FF0096;
  Eugen.Bild1.TransparentMode := tmFixed;
  Eugen.Bild1.Transparent := true;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

lies dir mal die entsprechenden wiki beiträge durch da erfährt man schon einiges über das arbeiten mit grafiken
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

jo habs mir angeguckt , geht danke ;) , spätestenz morgen melde ich mich wieder mit dem nächsten problem :D

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

hat man sowas wie onClick für diesen CustomControl , falls wie kann man dann herausfinden welches Bild angeklickt wurde bzw ob ein Bild angeklickt wurde

Antworten