Autor Beitrag
Genei
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 08.01.08 17:16 
hi, bekomme immer eine unerwartete fehlermeldung wenn ich versuche die karten vorher mischen zu lassen. Dann heißt es auf einmal, wenn ich eine karte "umdrehen" will: "Unbekannte bilddateierweiterung (.)" (Zeile 145)
kann mir da jemand weiter helfen?

*edit: hab den quelltext mal auf 3 paare beschränkt für eine bessere übersicht. bekomme aber immer noch den gleichen fehler, bloß in einer anderen zeile (zeile 88 ).*

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    karte1: TImage;
    karte2: TImage;
    karte3: TImage;
    karte4: TImage;
    karte5: TImage;
    karte6: TImage;
    procedure FormCreate(Sender: TObject);
    procedure kartenClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  spieler: array [1..3] of string; // Kartenmotive
  platz: array [1..6] of integer;  // Position auf dem Memoryfeld
  spieler1, spieler2: integer;
  deckblatt1, deckblatt2: string;
  zweitekarte: boolean = true;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var k, zufall, anzahl: integer;
    pfad: string;
    //anzahl: array[1..6] of integer;
    nummer: array[1..6] of integer;

begin
 randomize;
 anzahl:= 6;

while anzahl > 0 do
 begin
  zufall := random(Anzahl)+1;
  Nummer[Anzahl] := Platz[zufall];
 for k := zufall to Anzahl-1 do
  begin
   Platz[k] := Platz[k+1];
  end;
 Anzahl := Anzahl - 1;
end;

 karte1.Picture.loadfromfile('images\hansawappen.jpg');
 karte2.Picture.loadfromfile('images\hansawappen.jpg');
 karte3.Picture.loadfromfile('images\hansawappen.jpg');
 karte4.Picture.loadfromfile('images\hansawappen.jpg');
 karte5.Picture.loadfromfile('images\hansawappen.jpg');
 karte6.Picture.loadfromfile('images\hansawappen.jpg');

 pfad := 'images\spieler\';

 spieler[1]:= pfad + 'spieler1.jpg';
 spieler[2]:= pfad + 'spieler2.jpg';
 spieler[3]:= pfad + 'spieler3.jpg';

 {platz[1]:=1;
 platz[2]:=2;
 platz[3]:=3;
 platz[4]:=4;
 platz[5]:=5;
 platz[6]:=6;}


end;

procedure TForm1.kartenClick(Sender: TObject);
var i,k: integer;
begin
 zweitekarte:= not(zweitekarte);
 i:= strtoint(timage(sender).Name[6]);
 timage(sender).Picture.LoadFromFile(spieler[platz[i]]);
 deckblatt1:=timage(sender).name;

if zweitekarte
 then begin
  spieler1:= i;
  deckblatt1:= timage(sender).name;
 end
 else begin
  spieler2:= i;
  deckblatt2:= timage(sender).name;
 end;

if zweitekarte
 then
  if platz[spieler1] <> platz[spieler2]
   then begin
    showmessage('gesehen?');
     for k:= 0 to componentcount-1 do
      if (timage(components[k]).name= deckblatt1) or (timage(components[k]).name= deckblatt2)
       then timage(components[k]).Picture.LoadFromFile('images\hansawappen.jpg');
      end;

end;

end.


Zuletzt bearbeitet von Genei am Mi 09.01.08 16:31, insgesamt 1-mal bearbeitet
zongo-joe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: Di 08.01.08 20:50 
der fehler liegt eigentlich in zeile 144 -> du hast platz[] nicht definiert.
im zweifelsfall kannst du ja mal zb mit einem showmessage(spieler[platz[i]]) nachschauen, welche datei eigentlich eingeladen werden soll...
Genei Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 09.01.08 22:45 
habe platz doch global definiert.
was bedeutet denn der fehler den ich oben beschrieben hab? und warum bekomm ich den?
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Do 10.01.08 04:59 
Debuggen und schau dann welchen wert deine variablen haben.
der fehler passiert vermutlich nicht in zeile 88 sondern 87 wo das bild geladen wird.
vermutlich erhältst du hier irgendwo einen verstümmelten dateinamen.

bzw beu dein konstrukt mal so um, dann siehste es besser was hier zu laden versucht wird.
bzw halte die maus über das array spieler, dann siehste auch was da drinnen steht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.kartenClick(Sender: TObject);  
var i,k: integer;  
str : string;
begin  
 zweitekarte:= not(zweitekarte);  
 i:= strtoint(timage(sender).Name[6]);
 str := spieler[platz[i]];  
 timage(sender).Picture.LoadFromFile(str);
 deckblatt1:=timage(sender).name;

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 10.01.08 09:17 
Du benutzt relative Pfade was gern sehr zufällige, witzige Ergebnisse hat :lol:
Bei Delphi musst du immer absolute Pfade angeben. In deinem Fall reicht es, zunächst den Pfad und Dateinamen der Exe-Datei zu ermitteln mit  ParamStr(0) oder Application.ExeName und dann per ExtractFilePath den Pfad zu isolieren. Das hängst du dann vor deine Pfadangaben.

Eine jpg zur Laufzeit zu laden geht nur mit der Unit jpeg, aber die hast du ja schon eingebunden... Daran dürft's nicht liegen.
Aber wie zongo-joe bereits erwähnt (und falsch formuliert) hat, ist das Array Platz nicht initialisiert worden, sprich, es liegen völlig zufällige Zahlenwerte darin (bzw. nur 0en, aber darauf sollte man sich nicht verlassen). Oder sehe ich die Stelle im QT nicht, an der du platz konkrete Werte zuweist? :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: Do 10.01.08 11:51 
user profile iconGenei hat folgendes geschrieben:
"Unbekannte bilddateierweiterung (.)" (Zeile 145)
kann mir da jemand weiter helfen?


Also haste ein Problem mit der Extension, die in deinem Fall wohl fehlt (deshalb der Punkt allein, statt wie erwartet bmp, jpg o.ä.) - und die is dem System tatsächlich unbbekannt.

Greetz
Zorro
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 10.01.08 12:32 
user profile iconGenei hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 {platz[1]:=1;
 platz[2]:=2;
 platz[3]:=3;
 platz[4]:=4;
 platz[5]:=5;
 platz[6]:=6;}

Warum ist das auskommentiert? Um einen Fehler ins Programm zu bauen, um uns zu testen? :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Genei Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 14.01.08 17:45 
danke erstmal für die antworten.
hab eure hinweise mal angenommen und versucht umzusetzen. jetzt klappt es alles auch soweit, bis auf, dass "delphi" nicht wie geplant 3 mal 2 motive zufällig verteilt sondern manchmal 5 mal das gleiche motiv vokommt und 4 mal und 2 mla ein anderes usw.
wie kann ich festlegen dass beim mischen nur jeweils 2 mal das gleiche bild gleichzeitig vorkommen darf?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    karte1: TImage;
    karte2: TImage;
    karte3: TImage;
    karte4: TImage;
    karte5: TImage;
    karte6: TImage;
    procedure FormCreate(Sender: TObject);
    procedure kartenClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  spieler: array [1..3] of string; // Kartenmotive
  platz: array [1..6] of integer;  // Position auf dem Memoryfeld
  spieler1, spieler2: integer;
  deckblatt1, deckblatt2: string;
  zweitekarte: boolean = true;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var k, zufall, anzahl: integer;
    pfad: string;
    nummer: array[1..6] of integer;

begin
 randomize;

 platz[1]:=1;
 platz[2]:=2;
 platz[3]:=3;
 platz[4]:=1;
 platz[5]:=2;
 platz[6]:=3;

 karte1.Picture.loadfromfile('images\hansawappen.jpg');
 karte2.Picture.loadfromfile('images\hansawappen.jpg');
 karte3.Picture.loadfromfile('images\hansawappen.jpg');
 karte4.Picture.loadfromfile('images\hansawappen.jpg');
 karte5.Picture.loadfromfile('images\hansawappen.jpg');
 karte6.Picture.loadfromfile('images\hansawappen.jpg');

 pfad := 'images\spieler\';

 spieler[1]:= pfad + 'spieler1.jpg';
 spieler[2]:= pfad + 'spieler2.jpg';
 spieler[3]:= pfad + 'spieler3.jpg';

 anzahl:= 6;

 while anzahl > 0 do
 begin
  zufall := random(Anzahl)+1;
  Nummer[Anzahl] := Platz[zufall];
 for k := zufall to Anzahl-1 do
  begin
   Platz[k] := Platz[k+1];
  end;
 Anzahl := Anzahl - 1;
end;

end;

procedure TForm1.kartenClick(Sender: TObject);
var i, k: integer;
    str: string;
begin
 zweitekarte:= not(zweitekarte);
 i:= strtoint(timage(sender).Name[6]);
 str:= spieler[platz[i]];
 timage(sender).Picture.LoadFromFile(str);
 deckblatt1:=timage(sender).name;

if zweitekarte
 then begin
  spieler1:= i;
  deckblatt1:= timage(sender).name;
 end
 else begin
  spieler2:= i;
  deckblatt2:= timage(sender).name;
 end;

if zweitekarte
 then
  if platz[spieler1] <> platz[spieler2]
   then begin
    showmessage('gesehen?');
     for k:= 0 to componentcount-1 do
      if (timage(components[k]).name= deckblatt1) or (timage(components[k]).name= deckblatt2)
       then timage(components[k]).Picture.LoadFromFile('images\hansawappen.jpg');
      end;

end;

end.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.01.08 18:56 
Moin!

user profile iconGenei hat folgendes geschrieben:
wie kann ich festlegen dass beim mischen nur jeweils 2 mal das gleiche bild gleichzeitig vorkommen darf?
Was du suchst, nennt sich "perfekte Permutation" und hier gibt´s was in der FAQ dazu. :idea:

Evtl. kannst du hier raus auch noch ein paar Ideen gebrauchen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.