Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kartenspiel dynamische liste (https://www.delphipraxis.net/49835-kartenspiel-dynamische-liste.html)

simonko 16. Jul 2005 22:21


Kartenspiel dynamische liste
 
Ich mach grad ein kartenspiel und ich hab eine dynamische liste mit den karten für
spieler,computer und stapel; nun mein problem ist eigentlich nur das anzeigen der karten;
ich geh jetzt die liste sequentiell durch und möchte die karten anzeigen. ich hab diese image komponente und in einen ordner meine karten als jpg. wie kann ich die karten aber anzeigen?

image1.picture:= ?????? //wie kann ich den pfad angeben wo die karten liegen?

dann müßte ich auch wissen ob man zur laufzeit neue image komponenten erstellen kann und plazieren kann.
das wäre auch besser und leichter als schon im voraus plazierte images zu haben.

ich bitte um hilfe
danke im voraus

MFG

Ultimator 16. Jul 2005 22:25

Re: Kartenspiel dynamische liste
 
Du könntest ein dynamisches Array aus TImage-Komponenten machen und das dann bei Bedarf vergrößern.

Wenn du die Karten-Bilder als JPEG vorliegen hast, dann binde die Unit JPEG in die uses ein und schreib
Delphi-Quellcode:
ImageArray[index].Picture.LoadFromFile(Dateiname);

simonko 17. Jul 2005 04:17

Re: Kartenspiel dynamische liste
 
ich hab das jetzt versucht aber ich seh kein bild. es kommt keines.
hab das so gemacht:

Delphi-Quellcode:
procedure ausgeben;
var
   kortn : Timage;
begin
  kortn:= TImage.Create(form1);
  kortn.Parent:=form1;
  kortn.Left:=100;
  kortn.Top:=100;
  kortn.Width:=100;
  kortn.Height:=50;
  kortn.Picture.LoadFromFile('C:\bild005.bmp');
end;
kann ich als Pfad auch irgendsowas wählen dass er das bild im ornder sucht wo das program läuft`?

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Sharky 17. Jul 2005 05:29

Re: Kartenspiel dynamische liste
 
Zitat:

Zitat von simonko
... kann ich als Pfad auch irgendsowas wählen dass er das bild im ornder sucht wo das program läuft`?

Hai simonko,

jedem Delphiprogramm wird als erster Parameter der Pfad inkl. des Namens der Exe übergeben. Daraus kannst Du dann den Pfad extrahieren.
Das ganze kann z.B. so aussehen:
Delphi-Quellcode:
function GetAppPath : String;
begin
  result := ExtractFilePath(ParamStr(0));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s : string;
begin
  s := GetAppPath;
  ShowMessage(s);
end;

glkgereon 17. Jul 2005 08:06

Re: Kartenspiel dynamische liste
 
in deinem beispiel ist kortn eine lokale variable, die nach beenden der procedure "im nirvana" verschwindet...

du musst sie global deklarieren, dann solte es genau so funktionieren, tuts bei mir.

ich hab einfach nur die deklaration in den private teil der form getan...

der vollständigkeit halber:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    kortn : TImage;
  public
    { Public-Deklarationen }
  end;

//#######

procedure TForm1.Button1Click(Sender: TObject);
begin
  kortn:= TImage.Create(form1);
  kortn.Parent:=form1;
  kortn.Left:=100;
  kortn.Top:=100;
  kortn.Width:=100;
  kortn.Height:=50;
  kortn.Picture.LoadFromFile('C:\StartLogo.bmp');
  Button1.Enabled:=False;//Kein doppeltes Create, musst du anders realisieren
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  kortn.Free;      //Freigeben!!!
end;

simonko 17. Jul 2005 10:48

Re: Kartenspiel dynamische liste
 
es geht immer noch nicht:
ich poste mal was ich biser alles geschrieben hab.


Delphi-Quellcode:
type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Button1: TButton;
    Edit1: TEdit;
    Image1: TImage;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
     kortn : Timage;
  public
    { Public declarations }
  end;
  Tforb   = (herz,oachel,lupsn,schell);
  Tschlog = (siebmor,ochtor,neiner,zehner,
              unter,ober,kinig,ass);
  Tzeiger = ^Tkortn;
  Tkortn  = record
    forb  : Tforb;
    schlog : Tschlog;
    next  : Tzeiger;
  end;

var
  Form1: TForm1;
  spieler  : Tzeiger; // Kortn fan spieler
  computer : Tzeiger; // Kortn fan pc
  stapel   : Tzeiger; // Kortn in Stapel
  spiel    : Tzeiger; // oiglege kortn
  stapelanz : integer; // verbleibende kortn



implementation

{$R *.dfm}

procedure initstapel;
var
  neu : Tzeiger;
    i : Tforb;
    j : Tschlog;
begin
  stapel:=nil;
  for i:=herz to schell do
   for j:=siebmor to ass do
    begin
      new(neu);
      neu^.next:=nil;
      neu^.forb:=i;
      neu^.schlog:=j;
      if (stapel=nil) then
        stapel:=neu
      else
        begin
          neu^.next:=stapel;
          stapel:=neu;
        end;
    end;
  stapelanz:=32;
end;

procedure sortieren;
var
  i,j,k       : integer;
  p,hilf      : Tzeiger;
begin
 randomize;
 p:=stapel;
 for i:=1 to 99999 do
   begin
     j:=random(30)+1;
     for k:=1 to j do
       begin
         hilf:=p;
         p:=p^.next;
       end;
     hilf^.next:=p^.next;
     p^.next:=p^.next^.next;
     hilf^.next^.next:=p;
     p:=stapel;
   end;
end;

procedure ausgeben;
begin
  if stapelanz>0 then
    form1.image2.Picture.LoadFromFile('C:\lol.jpg')
  else
    form1.image2.Picture.LoadFromFile('C:\lol2.jpg');
  form1.kortn:= TImage.Create(form1);
  form1.kortn.Parent:=form1;
  form1.kortn.Left:=100;
  form1.kortn.Top:=100;
  form1.kortn.Width:=100;
  form1.kortn.Height:=50;
  form1.kortn.Picture.LoadFromFile('C:\bild005.jpg');
end;

procedure kortengeben(var liste : Tzeiger;anz : integer);
var
  i : integer;
  p : Tzeiger;
begin
  liste:=stapel;
  p:=stapel;
  for i:=1 to anz do
    stapel:=stapel^.next;
  for i:=1 to (anz-1) do
    p:=p^.next;
  p^.next:=nil;
  stapelanz:=stapelanz-anz;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  initstapel;
  sortieren;
  kortengeben(spieler,5);
  kortengeben(computer,5);
  kortengeben(spiel,1);
  ausgeben;
end;

end.

simonko 17. Jul 2005 13:07

Re: Kartenspiel dynamische liste
 
ich hab den fehler gefunden ich hatte so ein schei*** group box davor der das alles verdeckte


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz