Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Mastermind mit Zahlen (https://www.delphipraxis.net/79846-mastermind-mit-zahlen.html)

dreamsahin 29. Okt 2006 19:54


Mastermind mit Zahlen
 
Hallo Forum,
Versuche als Anfänger seit ne knappe Monat einen Mastermind klon mit zahlen zu erstellen
bin mit der Prog FAST fertig ( auch mit der nerven ) an einer stelle habe ich einen Bug festgestellt und krieg den irgendwie nicht korrigiert.

Ablauf des Spiels ist...

beim start des spiels wird 5 separate zahlen von comomputer generiert dieser
vom spieler in 5 edit felder erraten werden müssen.

bsp.

von comp. generierte zahl ( gleiche Zahlen sind erlaubt )

5 6 1 8 5

vom spieler angegebene zahl

6 5 8 5 5

ergebniss sollte so sein
0 richtige 3 falsche position

vorkommende ergebniss ist bei mir
0 richtige 8 falsche pos.

die vom spieler gegebene zahl 5 wird 3 mal vergleicht sollte aber NUR einmal vergleicht werden ....
Delphi-Quellcode:
 begin
       richtig:=0;
   for i:=1 to 5 do
   If code[i] = geraten[i] Then inc(richtig);
       Label6.Caption:=IntToStr(richtig);               // richtige Zahl richtige Position
    if richtig=5 then
    begin
     Image1.Visible:=True;
      ListBox2.Items.Insert(ListBox2.Items.Count-0,' '+Edit6.Text+' '+' '+Label16.Caption+' '+' '+Counter.Text+'.'+Label18.Caption+' '+' '+Label17.Caption);     //Bewertung abgeben
       end;

       falsch:=0;                                  // Zähler zurück setzen
   for i:=1 To 5 Do                                 // zahlen vergleich
    If code[i]<>geraten[i] Then
   for j:= 1 to 5 do
   if geraten[i]=code[j] then inc(falsch);
    Label7.Caption:=IntToStr(falsch);
       ListBox1.Items.Insert(Listbox1.Items.Count-1,' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text+' '+Edit4.Text+' '+Edit5.Text+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+Label6.Caption+' '+' '+' '+' '+' '+' '+' '+Label7.Caption);
    if count=10 then
   begin
        counter.Color:=clred;
     if Application.MessageBox('noch ein Versuch?','VERLOREN',36)= 7 then Close    //Nochmal versuchen
     else
        Edit6.Enabled:=True;
        Counter.Color:=clWhite;
        Count:=0;
        Label6.Caption:=IntToStr(richtig);
        Label7.Caption:=IntToStr(falsch);
      ListBox2.Items.Insert(ListBox2.Items.Count-0,' '+Edit6.Text+' '+' '+Label16.Caption+' '+' '+Counter.Text+'.'+Label18.Caption+' '+' '+Label17.Caption);
   end;
 end;
   end;
habe vieles probiert leider ohne erfolg....

würde mich für eure antworten sehr freuen
danke schonmal im voraus...

[edit=Dax][delphi]-Tags... :roll: Mfg, Dax[/edit]

DP-Maintenance 29. Okt 2006 19:58

DP-Maintenance
 
Dieses Thema wurde von "Dax" von "Freeware" nach "Sonstige Fragen zu Delphi" verschoben.
Und die Rubrik..

Sunlight7 29. Okt 2006 20:32

Re: Mastermind mit Zahlen
 
Zitat:

Zitat von Dax
[edit=Dax][delphi]-Tags... :roll: Mfg, Dax[/edit]

Das ist doch ein Neuling, sei nicht so streng, der weiß das noch nicht :zwinker:

Hallo dreamsahin,
und Willkommen in der DP! :cheers:

Wie das Dax korrigiert hat, bitte die Delphi-Tags setzten, wenn Du Quellcode schreibst...

Zu Deinem Problem:
Du könntest Dir ein Array einbauen, indem Du speicherst, ob die Stelle schon geprüft wurde.

dreamsahin 29. Okt 2006 21:06

Re: Mastermind mit Zahlen
 
@Sunlight7 danke für dein Tip
:cheers:
da liegt ja auch mein problem
Habe mehrere Arrays versucht aber wie ich es in meiner Algo... einfüge weis ich net..
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
    Code: Array[1..5] of Integer;
    Geraten: Array[1..5] of Integer;
    vergleich: Array[1..5] of Integer;
    i,j,k,richtig,falsch: integer;
    name: String;

begin
       richtig:=0;
   for i:=1 to 5 do
   If code[i] = geraten[i] Then inc(richtig);
       Label6.Caption:=IntToStr(richtig);               // richtige Zahl richtige Position
    if richtig=5 then
    begin
     Image1.Visible:=True;
      ListBox2.Items.Insert(ListBox2.Items.Count-0,' '+Edit6.Text+' '+' '+Label16.Caption+' '+' '+Counter.Text+'.'+Label18.Caption+' '+' '+Label17.Caption);     //Bewertung abgeben
       end;

       falsch:=0;                                  // Zähler zurück setzen
   for i:=1 To 5 Do                                 // zahlen vergleich
    If code[i]<>geraten[i] Then
   for j:= 1 to 5 do
   if geraten[i]=code[j] then inc(falsch);
    for k:= 1 to 5 do
   if geraten[k]=vergleich[k] then
    Label7.Caption:=IntToStr(falsch);
       ListBox1.Items.Insert(Listbox1.Items.Count-1,' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text+' '+Edit4.Text+' '+Edit5.Text+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+' '+Label6.Caption+' '+' '+' '+' '+' '+' '+' '+Label7.Caption);
    if count=10 then
   begin
        counter.Color:=clred;
     if Application.MessageBox('noch ein Versuch?','VERLOREN',36)= 7 then Close    //Nochmal versuchen
     else
        Edit6.Enabled:=True;
        Counter.Color:=clWhite;
        Count:=0;
        Label6.Caption:=IntToStr(richtig);
        Label7.Caption:=IntToStr(falsch);
      ListBox2.Items.Insert(ListBox2.Items.Count-0,' '+Edit6.Text+' '+' '+Label16.Caption+' '+' '+Counter.Text+'.'+Label18.Caption+' '+' '+Label17.Caption);
   end;
 end;
   end;





@Dax sorry Anfänger fehler....

Sunlight7 29. Okt 2006 22:03

Re: Mastermind mit Zahlen
 
Hab mir das mal angeguckt:

Warum machst Du das nicht gleich so?
Delphi-Quellcode:
richtig:=0;
falsch:=0;
For i:=1 to 5 do
   If code[i]=geraten[i] then
      inc(richtig) else
         inc(falsch);

Wozu ist das da?
Delphi-Quellcode:
For k:=1 to 5 do
   if geraten[k]=vergleich[k] then
      Label7.Caption:=IntToStr(falsch);

dreamsahin 3. Nov 2006 21:25

Re: Mastermind mit Zahlen
 
@Sunlight7
zu spät aber danke für dein Tip,
Hatte das gleiche was du beschrieben hast auch mal probiert,
als ergebniss bekomme ich die richtige zahlen sowie auch ri. zahlen falsche pos.
habe immernoch einen bug im code

Delphi-Quellcode:
 
...
   richtig:=0;
   falsch:=0;
   for i:= 1 to 5 do
   if geraten[i]=code[i] then inc(richtig)
    else inc(falsch);
richtig wird korrekt ausgegeben das problem liegt das jeder angegebene falsche zahl mitgezählt
obwohl nicht geraten wird.

Sunlight7 3. Nov 2006 21:40

Re: Mastermind mit Zahlen
 
Hallo,

sorry, das Problem verstehe ich nicht ganz.

Hast Du außer geraten und code noch andere Arrays mit Daten?

Nach Deinem Code-Fragment nach kann Richtig+Falsch nur 5 ergeben :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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