Autor |
Beitrag |
Nitrom
Hält's aus hier
Beiträge: 2
|
Verfasst: Sa 16.01.21 22:07
Moin,
ich möchte ein Pass`n Play Poker Entwickeln.
In meinem Programm bekomme ich aber der Fehler Error: Illegal qualifier
bei dem Befehl Img.Picture.LoadFromFile('\Images\Rückseite.bmp');
wobei Picture rot Markiert ist.
Später soll einmal das Verzeichnis durch eine String Variable angegeben werden.
Ich häng euch unten mal das Programm an.
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: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142:
| unit Unit1;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Menus;
type
TForm1 = class(TForm) btn_start: TButton; Button1: TButton; Button2: TButton; Button3: TButton; img_Karte1: TImage; Img_Karte2: TImage; Img_Karte3: TImage; Img_Karte4: TImage; Img_Karte5: TImage; Img_Karte6: TImage; Img_Karte7: TImage; procedure Image7Click(Sender: TObject); procedure Spiel(Sender: TObject); private
public
end;
var Form1: TForm1; Spielerdaten:Array[1..4,1..8] of Integer; Karten: Array[1..4,1..13] of integer; Tischkarten: Array[1..5,1..2] of Integer; Einsaetze: Array[1..4] of Integer; Karte1,Karte2 :string; I,j,x,y,Player_Anzahl,t:Integer; img_Karte1,Img_Karte2,Img_Karte3,Img_Karte4,Img_Karte5,Img_Karte6,Img_Karte7:string;
implementation
{$R *.lfm}
procedure Austeilen(); begin For i := 1 to 4 do begin For j := 1 to 2 do begin randomize; x:=random(3)+1; Y:=random(12)+1; If Karten[x,y] = 1 then begin Spielerdaten[j,2]:=x; Spielerdaten[j,3]:=y; Karten[x,y]:= 1; end; end; end; For i := 1 to 5 do begin randomize; x:=random(3)+1; Y:=random(12)+1; If Karten[x,y] = 1 then begin Tischkarten[i,1]:=x; Spielerdaten[i,2]:=y; Karten[x,y]:=0; end; end; end; procedure Kartedrehen(Karte1,Karte2:string); begin img_Karte1.Picture.LoadFromFile('\Images\Rückseite.bmp'); img_karte2.picture.loadfromfile(''); end;
procedure Spielzug(x:Integer); begin showMessage('Spieler '+inttostr(x)); Karte1:=inttostr(Spielerdaten[x,2])+inttostr(Spielerdaten[x,3]); Karte2:=inttostr(Spielerdaten[x,4])+inttostr(Spielerdaten[x,5]); Kartedrehen(Karte1,Karte2); T:=einsaetze[1]; IF einsaetze[2]>T Then T:=einsaetze[2] else IF einsaetze[3]>T Then T:=einsaetze[3] else IF einsaetze[4]>T Then T:=einsaetze[4]
end; procedure Aufdecken(); begin end; procedure Auswertung(); begin end; procedure TForm1.Spiel(Sender: TObject); begin begin For i:=1 to 4 do begin For j:=1 to 13 do begin Karten[i,j]:= 1; Austeilen(); end; end; For i:=1 to 4 do begin Spielerdaten[i,1]:= 1; end; Player_Anzahl:=4; while Player_Anzahl > 1 do begin For i:=1 to 4 do begin If Spielerdaten[i,1] =1 then Spielzug(i); end; Aufdecken(); If Player_Anzahl< 2 then else Auswertung() end; end; end; |
end.
PS. Wenn ihr mir verratet wie ich den Code besser anhänge schreibt es mir. Danke!
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 17.01.21 00:06
Nitrom hat folgendes geschrieben : | In meinem Programm bekomme ich aber der Fehler Error: Illegal qualifier
bei dem Befehl Img.Picture.LoadFromFile('\Images\Rückseite.bmp');
wobei Picture rot Markiert ist. |
Das liegt daran, dass du gleichnamige Variablen und Felder hast: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| TForm1 = class(TForm) btn_start: TButton; Button1: TButton; Button2: TButton; Button3: TButton; img_Karte1: TImage; Img_Karte2: TImage; Img_Karte3: TImage; Img_Karte4: TImage; Img_Karte5: TImage; Img_Karte6: TImage; Img_Karte7: TImage;
[..]
img_Karte1,Img_Karte2,Img_Karte3,Img_Karte4,Img_Karte5,Img_Karte6,Img_Karte7:string; | Ein String (denn die untere Variable ist "näher dran") hat keine Eigenschaft Picture, weshalb dies auch bemängelt wird.
Nitrom hat folgendes geschrieben : | PS. Wenn ihr mir verratet wie ich den Code besser anhänge schreibt es mir. Danke! |
Du brauchst nur [delphi]Dein Code[/delphi] zu schreiben oder über dem Eingabefeld unter Bereiche neben Delphi auf das + drücken für den Anfang und noch einmal für das Ende des Codeblocks.
|
|
Nitrom
Hält's aus hier
Beiträge: 2
|
Verfasst: So 17.01.21 11:25
Vielen Dank,
Ja copy and paste hat Vor- und Nachteile. Da habe ich wohl Vergessen die Variablen umzubenennen.
Nun habe ich aber dennoch ein Problem mit dem Programm
Es hat nun das Problem, dass es den Identifier img_karte1 nicht findet obwohl es ja als tImage deklariert ist.
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: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142:
| unit Unit1;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Menus;
type
TForm1 = class(TForm) btn_start: TButton; Button1: TButton; Button2: TButton; Button3: TButton; img_Karte1: TImage; Img_Karte2: TImage; Img_Karte3: TImage; Img_Karte4: TImage; Img_Karte5: TImage; Img_Karte6: TImage; Img_Karte7: TImage; procedure Spiel(Sender: TObject); private
public
end;
var Form1: TForm1; Spielerdaten:Array[1..4,1..8] of Integer; Karten: Array[1..4,1..13] of integer; Tischkarten: Array[1..5,1..2] of Integer; Einsaetze: Array[1..4] of Integer; I,j,x,y,Player_Anzahl,t:Integer; Karte1,Karte2,Karte3,Karte4,Karte5,Karte6,Karte7:string;
implementation
{$R *.lfm}
procedure Austeilen(); begin For i := 1 to 4 do begin For j := 1 to 2 do begin randomize; x:=random(3)+1; Y:=random(12)+1; If Karten[x,y] = 1 then begin Spielerdaten[j,2]:=x; Spielerdaten[j,3]:=y; Karten[x,y]:= 1; end; end; end; For i := 1 to 5 do begin randomize; x:=random(3)+1; Y:=random(12)+1; If Karten[x,y] = 1 then begin Tischkarten[i,1]:=x; Spielerdaten[i,2]:=y; Karten[x,y]:=0; end; end; end; procedure Kartedrehen(Karte1, Karte2:String); begin img_Karte1.Picture.LoadFromFile('../Bilder/'+Karte2+'.jpg'); img_karte2.picture.loadfromfile('../Bilder/'+Karte2+'.jpg'); end;
procedure Spielzug(x:Integer); begin showMessage('Spieler '+inttostr(x)); Karte1:=inttostr(Spielerdaten[x,2])+inttostr(Spielerdaten[x,3]); Karte2:=inttostr(Spielerdaten[x,4])+inttostr(Spielerdaten[x,5]); Kartedrehen(Karte1, Karte2); T:=einsaetze[1]; IF einsaetze[2]>T Then T:=einsaetze[2] else IF einsaetze[3]>T Then T:=einsaetze[3] else IF einsaetze[4]>T Then T:=einsaetze[4]
end; procedure Aufdecken(); begin end; procedure Auswertung(); begin end; procedure TForm1.Spiel(Sender: TObject); begin For i:=1 to 4 do begin For j:=1 to 13 do begin Karten[i,j]:= 1; Austeilen(); end; end; For i:=1 to 4 do begin Spielerdaten[i,1]:= 1; end; Player_Anzahl:=4; while Player_Anzahl > 1 do begin For i:=1 to 4 do begin If Spielerdaten[i,1] =1 then Spielzug(i); end; Aufdecken(); If Player_Anzahl< 2 then else Auswertung() end; end;
end. |
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: So 17.01.21 11:47
Hallo und
ich glaube dir ist nicht klar, was der Unterschied zwischen einer freien Funktion/Prozedur und einer Klassenfunktion/-prozedur ist.
Du solltest die globalen Variablen sowie freien Prozeduren als Klassenprozeduren erstellen.
Noch besser wäre es jedoch, wenn du UI und Logik voneinander trennst und eine eigene Spiellogik-Klasse (in eigener Unit) daraus entwickelst, welche du dann nur in deiner UI-Klasse ( TForm1 bzw. besser benannt ;- ) benutzt.
PS: Aus deinen einzelnen TImage-Variablen solltest du besser ein Array erzeugen (auch wenn du sie dann dynamisch im Code, statt per Designer, erzeugen mußt).
|
|
|