| Autor |
Beitrag |
Genei
Hält's aus hier
Beiträge: 4
|
Verfasst: 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 ).*
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 public end;
var Form1: TForm1; spieler: array [1..3] of string; platz: array [1..6] of integer; 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; 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';
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
      
Beiträge: 134
win xp prof
D3, D4, D7
|
Verfasst: 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 
Hält's aus hier
Beiträge: 4
|
Verfasst: 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
      
Beiträge: 260
Win XP Prof
D7 Enterprise
|
Verfasst: 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.
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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 10.01.08 09:17
Du benutzt relative Pfade was gern sehr zufällige, witzige Ergebnisse hat
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? 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Do 10.01.08 11:51
Genei 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 10.01.08 12:32
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Genei 
Hält's aus hier
Beiträge: 4
|
Verfasst: 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?
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 public end;
var Form1: TForm1; spieler: array [1..3] of string; platz: array [1..6] of integer; 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.01.08 18:56
Moin!
Genei 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.
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.
|
|