Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Hilfe bei MasterMind Problem (https://www.delphipraxis.net/25847-hilfe-bei-mastermind-problem.html)

thaflo 13. Jul 2004 18:23


Hilfe bei MasterMind Problem
 
Hallo!

Ich bin verzweifelt:
Ich bin beim MasterMind Spiel und komme nicht mehr weiter.

ich habe zwei arrays mit farben:
spieler-array[]
spiel-array[]

nun muss ich den spieler-array mit dem array des spiels vergleichen und auswerten.
wieviele farben sind am richtigen ort,
welche vorhanden aber am falschen ort.

das ist ja einfach, aber im spieler-array können zwei gleiche farben vorkommen, und im spiel-array auch.
mein ansatz:
Delphi-Quellcode:
procedure TMainForm.btnTipClick(Sender: TObject);
var
   treffer, halbtreffer, iloop,loop:Integer;
begin
     treffer:=0;//farbe am richtigen ort
     halbtreffer:=0; //farbe vorhanden aber am falschen ort
     anz:=0
     for loop := 0 to level do begin
         if playerColors[loop] = gameColors[loop] then begin
            inc(treffer);
            Continue;
         end;
         for iloop:=0 to level do begin
             if (playerColors[loop] = gameColors[iloop]) then
                inc(halbtreffer);
         end;
     end;
     addTipLabels;
     if treffer = level+1 then
            ShowMessage('JUPPI, gewonnen! Mit '+#13+IntToStr(versuche)+' Versuchen!');
end;
kann mir jemand denkanstöße verpassen, wie ich das regeln könnte?

vielen dank,
Florian

MrSpock 13. Jul 2004 18:27

Re: rauchender Kopf...
 
Hallo thaflo,
du musst die merken, welche Felder im Spielarray schon bewertet sind. Diese beruecksichtigst du dann nicht mehr. Auch auf der Spielerseite musst du dir merken, welches Feld schon bewertet wurde und dieses dann im zweiten Durchlauf auslassen. Der erste Durchlauf prueft nur auf "ganz richtig" der zweite Durchlauf auf "fast richtig" (falscher Platz).

MikeS 13. Jul 2004 19:52

Re: rauchender Kopf...
 
Moin zusammen,

geh an die sache am besten so ran wie du es auch per "hand" lösen würdest!

glkgereon 13. Jul 2004 20:48

Re: rauchender Kopf...
 
oder einfach alles mit allem vergleichen

das wäre dann so in etwa:

spiel[1] - spieler[1]
spiel[1] - spieler[2]
spiel[1] - spieler[3]
spiel[1] - spieler[4]
spiel[2] - spieler[1]
spiel[2] - spieler[2]
spiel[2] - spieler[3]
spiel[2] - spieler[4]
spiel[3] - spieler[1]
spiel[3] - spieler[2]
spiel[3] - spieler[3]
spiel[3] - spieler[4]
spiel[4] - spieler[1]
spiel[4] - spieler[2]
spiel[4] - spieler[3]
spiel[4] - spieler[4]

also zusammengefasst:

Delphi-Quellcode:
for i:=1 to 4 do //für alle felder in spiel
  for j:=1 to 4 do //für alle felder in spieler
    if spiel[i]=spieler[j] //wenn die farbe gleich ist
    then if i=j //wenn die position und die farbe gleich ist, dann schwarz+1
         then schwarz:=schwarz+1
         else weiss:=weiss+1; //wenn farbe gleich und position verschieden dann weiss+1
denn du willst doch nur ausgeben, wie poft weiss uznd we oft schwarz, oder?
oder war schwarz nur richtige farbe und weiss richtigeb farbe und position? :gruebel: :gruebel: :gruebel:

naja, ich hoffe der code hilft...

MikeS 13. Jul 2004 21:15

Re: rauchender Kopf...
 
hallo glkbkk

alles mit allem vergleichen ist wohl kaum die richtige lösung.
was machst du denn wenn du schon einen schwarzen hast. dann zählst du ihn bei den weissen ja noch einmal! :gruebel:

glkgereon 13. Jul 2004 21:41

Re: rauchender Kopf...
 
stimmt, es musste heissen

for i:=1 to 4 do
for j:=i to 4 do....

dann sollte es funzen

ausserdem, sind doch nur 16, jetzt sogar nur 10....

supermuckl 13. Jul 2004 22:37

Re: rauchender Kopf...
 
willst du partikeleffekte für den rauchenden kopf verwenden ?

thaflo 14. Jul 2004 10:23

Re: rauchender Kopf...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von supermuckl
willst du partikeleffekte für den rauchenden kopf verwenden ?

Was hast du denn geschluckt? :spin2: :P

Danke für die Tipps, Mr Spock seiner hat geholfen.
@MikeS -danke- aber das hab ich vor dem posten hier versucht :-)
@glkbkk - bei der lösung stimmt das ergebnis nicht.
Habs so gelöst:

Delphi-Quellcode:
...
for loop := 0 to level do begin
    spiel[loop]:=gameColors[loop]; //array kopieren
    spieler[loop]:=playerColors[loop]; //array kopieren
end;

for loop := 0 to level do begin //treffer aussortieren
    if spieler[loop] = spiel[loop] then begin
        inc(treffer);
        spieler[loop]:=0;
        spiel[loop]:=0;
    end;
end;

for loop:=0 to level do
    for iloop:=0 to level do
        if (spieler[loop] = spiel[iloop])and (spieler[loop]<>0) then begin
            inc(halbtreffer);
            spiel[iloop]:=0;
            spieler[loop]:=0;
            end;
...
Es funktioniert, anbei das Spiel, bitte Feedback.

Vielen Dank,
Florian

supermuckl 14. Jul 2004 10:31

Re: rauchender Kopf...
 
naja hätte jetzt gedacht du merkst selber was ich meine..

es ist besser den topicnamen etwas aussagekräftiger zu gestalten :)

thaflo 14. Jul 2004 10:49

Re: Hilfe bei MasterMind Problem
 
hab ihn jetzt geändert, ok so? :wink:

Gruss,
florian


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 1 von 2  1 2      

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