| Autor |
Beitrag |
HarryIn
Hält's aus hier
Beiträge: 10
|
Verfasst: Sa 10.06.06 10:21
Habe en Problem und find den Fehler einfach net! Das Programm wurde auf Delphi3 programmiert, hab den Text größtenteils übernommen.. Kanns dadran liegen? Außerdem wollte ich noch ne Meldung kommen lassen, wenn der User gewonnen hat. Wollte die Anzahl mit der Anzahl der Sternchen vergleichen, wenns passt kommt die Fehlermeldung! Naja wär schön wenn einer helfen könnte!!
MFG HarryIn
Folgender Text
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: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; Label1: TLabel; Edit3: TEdit; Button3: TButton; ListBox1: TListBox; Edit4: TEdit; Edit5: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
var Mastermind:tZFeld; V:tZFeld; A:tBFeld; x,zahl:string;
procedure TForm1.Button1Click(Sender: TObject); var anzahl,i: integer; begin edit4.text:= inttostr(0); anzahl:= strtoint (edit1.text); erzeuge(anzahl,Mastermind); ausgabeausgefuellt(anzahl,x); form1.edit2.text:= x; for i:=1 to anzahl do listbox1.items.add (inttostr (Mastermind[i])); end;
procedure TForm1.Button2Click(Sender: TObject); var anzahl,z: integer; begin edit4.text:= inttostr (strtoint (edit4.text)+1); anzahl:=strtoint (edit1.text); zahl:=edit3.text; if length (zahl) <> anzahl then form1.edit2.text:='Bitte Eingabe korrigieren!' else begin umwandel (anzahl,zahl,v); vergleich(anzahl,Mastermind,V,A); ausgebenvergleich(anzahl,A,X); form1.edit2.text:=x;
end; end;
procedure TForm1.Button3Click(Sender: TObject); begin close; end;
end.
unit Unit2;
interface
type tBFeld = array[1..100] of string; type tZFeld = array[1..100] of integer; procedure erzeuge (anzahl:integer; var Mastermind:tZFeld); procedure vergleich (anzahl: integer; Mastermind:tZFeld; V:tZFeld; var A:tBFeld); procedure ausgebenvergleich (anzahl:integer; var A:tBfeld;var x: string); procedure ausgabeausgefuellt (anzahl: integer; var x: string); procedure umwandel (anzahl:integer; zahl: string; var V:TZFeld);
implementation
procedure erzeuge (anzahl:integer; var Mastermind:tZFeld); var i: integer; begin randomize; For i:=1 to anzahl do Mastermind[i]:=random (9); end;
procedure umwandel (anzahl:integer; zahl: string; var V:TZFeld); var i,x:integer; begin for i:=1 to anzahl do val (zahl[i],V[i],x); end;
procedure vergleich (anzahl: integer; Mastermind:tZFeld; V:tZFeld; var A:tBFeld); var i,z: integer; begin for i:=1 to anzahl do begin if Mastermind[i]=V[i] then A[i]:='*' else begin For z:=1 to anzahl do if Mastermind[z]=V[i] then A[i]:= '!'; end; end; end;
procedure ausgebenvergleich (anzahl:integer; var A:tBfeld;var x: string); var i: integer; begin x:=''; for i:=1 to anzahl do x:= x+A[i]; end;
procedure ausgabeausgefuellt (anzahl: integer; var x: string); var i: integer; begin x:=''; for i:=1 to anzahl do x:=X+'?'; end;
end.
Folgende Fehlermeldung kommt
[Error] Unit1.pas(38): Undeclared identifier: 'tBFeld' [Error] Unit1.pas(38): Undeclared identifier: 'tZFeld' |
Moderiert von raziel: Highlight- durch Delphi-Tags ersetzt
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Sa 10.06.06 11:04
Benutze bitte Delphi-Tags wenn du Code veröffentlichst, dann haben wir z. B. auch Zeilenangaben und Syntax-Highlighting, dein "Alles-Selber-Highlighten" ist da ein recht lausiger Ersatz
Zu deiner Frage: Was sollen denn auch tbFeld und tzFeld sein? Du kannst doch nicht einfach Variablen von irgendeinem Typ deklarieren, der vorher nie erwähnt wird?!
Um einen eigenen Typ zu erschaffen kannst du ihn als record oder class deklarieren. Records sind einfach zusammengesetzte Datentypen, Klassen sind schon etwas komplizierter. In jedem Fall scheinen da einige Grundkenntnisse zu fehlen, um das wasauchimmer du programmieren willst zu erreichen.
Mfg
Edit1: Wenn du Mastermind programmieren willst, wäre vielleicht auch dieser Thread ganz nützlich.
|
|
HarryIn 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 11.06.06 11:08
Joa hab vergessen, die Unit2 mit in die Unit1 einzubeziehen... Programm klappt aber immer noch net. Müsste aber so eigentlich funtionieren. Hab Informatik erst seit nem guten halbe Jahr und bei den anderen Programmen sind mir zu viele Befehle dabei, die ich noch net kenn. Record und class sind mir auch noch unbekannt. Wenn vielleicht einer noch was weiß, wodrans noch liegen könnt und wie ich das mit der "Sie haben Gewonnen" Nachricht hinbekomme, bitte melden
Mfg HarrIn
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: So 11.06.06 12:09
Okay, was hälst du denn davon, uns dann auch mal den Quelltext der Unit2 zu geben, damit wir sehen können, was denn nun deine Deklarierten Variablen bedeuten? Meine Kristallkugel ist nämlich leider gerade in Reparatur
Edit1:
Oh Entschuldigung, hab nicht gesehen, dass du es oben angehängt hast; ich schaue es mir dann jetzt mal an.
Edit2:
Häng doch mal bitte das komplette Projekt in einer Zip-Datei an, sonst versteh ich niemals, was du eigentlich wo tun willst und eine Beschreibung welcher Fehler denn nun aufrtitt, wäre auch nett.
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: So 11.06.06 13:13
Okay, ich denke ich habe deinen Quelltext jetzt verstanden. Was ich dir an dieser Stelle mal ganz eng ans Herz legen möchte, ist, zumindest wenn du weiterhin Hilfe im Delphi-Forum erwartest, deinen Quelltext zu kommentieren oder zumindest selbsterläuternde Variablennamen zu wählen.
Dein Quelltext nun funktionierend (allerdings in 1 Unit und deinen "Schließen"-Button habe ich mal rausgelassen):
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) AnzahlEdit: TEdit; SpielStarenBtn: TButton; KorrekturEdit: TEdit; VersuchEdit: TEdit; VersuchBtn: TButton; AnzVersucheEdit: TEdit; GewonnenEdit: TEdit; procedure SpielStarenBtnClick(Sender: TObject); procedure VersuchBtnClick(Sender: TObject); private Anzahl: Integer;
Mastermind, Versuch: Array[1..100] of Integer; Korrektur: Array[1..100] of String; KorrekturAusgabe: String; VersuchEingabe: String;
procedure Erzeuge; procedure Umwandel; procedure Vergleich; procedure AusgabeVergleich; procedure AusgabeAusgefuellt; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Erzeuge; var i: Integer; begin for i:=1 to Anzahl do Mastermind[i]:=Random(10); end;
procedure TForm1.Umwandel; var i: Integer; begin for i:=1 to Anzahl do Versuch[i]:=StrToInt(VersuchEingabe[i]); end;
procedure TForm1.Vergleich; var i: Integer; begin for i:=1 to Anzahl do if Mastermind[i] = Versuch[i] then Korrektur[i]:='*' else Korrektur[i]:='?'; end;
procedure TForm1.AusgabeVergleich; var i: Integer; begin KorrekturAusgabe:=''; for i:=1 to Anzahl do KorrekturAusgabe:=KorrekturAusgabe+Korrektur[i]; end;
procedure TForm1.AusgabeAusgefuellt; var i: Integer; begin KorrekturAusgabe:=''; for i:=1 to Anzahl do KorrekturAusgabe:=KorrekturAusgabe+'?'; end;
procedure TForm1.SpielStarenBtnClick(Sender: TObject); begin AnzVersucheEdit.Text:='0'; Anzahl:=StrToInt(AnzahlEdit.Text); Erzeuge; AusgabeAusgefuellt; KorrekturEdit.Text:=KorrekturAusgabe; end;
procedure TForm1.VersuchBtnClick(Sender: TObject); var i: Integer; begin AnzVersucheEdit.Text:=IntToStr(StrToInt(AnzVersucheEdit.Text)+1); VersuchEingabe:=VersuchEdit.Text; Umwandel; Vergleich; AusgabeVergleich; KorrekturEdit.Text:=KorrekturAusgabe;
i:=0; while (KorrekturAusgabe[i+1]='*') and (i<Anzahl) do inc(i); if i=Anzahl then GewonnenEdit.Text:='Sie haben gewonnen!'; end;
initialization Randomize;
end. |
Edit1:
Damit du das Projekt, so wie ich es erstellt habe, einmal ausprobieren kannst, um zu gucken, ob ich deinen Quelltext tatsächlich so modifiziert habe, wie du es dir vorgestellt hast, hänge ich alles mal in einer Zip-Datei an.
Edit2:
Da das Problem ja gelöst ist und es sich um ein sehr spezifisches Projekt handelte, habe ich den Anhang hier wieder entfernt.
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von fidionael am Mo 10.07.06 00:16, insgesamt 2-mal bearbeitet
|
|
HarryIn 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 11.06.06 19:09
Vielen Dank, hat mir wirklich geholfen. Was ich nur jetzt noch wissen müsste ist der Befehl inc. Kenn den noch nicht und weiß seine Funtion nicht. Würde das mit dem 'Sie haben Gewonnen' auch noch irgendwie anders gehn oder müsste ich das mit dem inc machen??
P.S. werde mir deine Worte zu Herzen nehmen
Mfg HarryIn
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 11.06.06 19:41
inc(Variable) ist dasselbe wie
Delphi-Quelltext
wobei das Inc schneller ausgeführt wird.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Mindforce
      
Beiträge: 358
Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
|
Verfasst: So 11.06.06 19:53
Hi,
ich weiss garnicht wie man Mastermind spielt.
Und da sind keine beschriftungen... Einen Bug habe ich auch festgestellt.
Gruss,
Mindforce
Einloggen, um Attachments anzusehen!
_________________ Our force; in mind.
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: So 11.06.06 21:27
Das Projekt das ich oben angehängt habe, soll lediglich HarryIn helfen, der (wie ich zumindest sehr hoffe) weiß was er schreiben will, deswegen sind keine Beschriftungen vorhanden und wie man an seinem Post sieht, scheint das ja auch funktioniert zu haben.
Ich weiß, dass das Programm sehr unsicher geschrieben ist, es ist nur allzuleicht eine Fehlermeldung zu provozieren, da immer davon ausgegangen wird, dass der User richtige Eingaben macht. Die Eingaben vorher zu kontrollieren ist jedoch für den Veranschaulichungszweck meines Projektes eher hinderlich, da es vom eigentlichen Thema des Projektes ablenken würde.
Falls du eine stabile und vermutlich auch grafisch etwas ansprechendere Variante des Spiels spielen willst, schau dir doch bitte den Link etwas weiter oben an, oder guck alternativ auch auf meine Homepage.
An HarryIn:
Ich bin froh wenn ich dir helfen konnte und noch viel froher, wenn ich dich dazu verleiten konnte, deinen Quelltext auch für andere etwas einsichtiger zu machen. Gerade wenn du über so kleine Projekte wie dieses hinaus gehst oder wenn du gar im Team entwickeln musst wird dies quasi lebenswichtig. Ich wünsche dir noch viel Spaß beim Programmieren und die Anmerkung von Mindforce solltest du dir in sofern auch zu Herzen nehmen, dass du niemals davon ausgehen darfst, dass der User korrekte Eingaben macht. Zur sauberen Programmierung gehört immer auch, dass selbst wenn der User es darauf anlegt, er dein Programm nicht zum Absturz bringen kann.
|
|
|