Autor Beitrag
Jeszy
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 21.02.12 11:08 
Ich bin grade dabei Mastermind zu programmieren, also ein Spiel bei dem man einen Zahlencode erraten muss.

der Zahlencode besteht aus 4 Zahlen zwischen 1 und 6. Das Problem besteht nun darin, dass mir nichts einfällt, wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt in dem Code. Könnt ihr mir eine Lösung verraten ?

Die Schleifen mit while und repeat until wollten bei mir nicht wirklich funktionieren, ich denke ich habe was falsch gemacht.

hier könnt ihr sehen wie der code bislang erstellt wird :
:D

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
randomize;  //Code wird festgelegt

c1:=random(6}+1;
c2:=random(6}+1;
c3:=random(6)+1;
c4:=random(6)+1;

code1.Caption:=inttostr(c1);
code2.Caption:=inttostr(c2);
code3.Caption:=inttostr(c3);
code4.Caption:=inttostr(c4);


Moderiert von user profile iconNarses: Code in Delphi-Tags hinzugefügt, Anhang gelöscht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.02.12 11:30 
Es wäre sinnvoller den Code direkt in den passenden Tags zu posten:
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG4e012be8e1f8a417ef25d2a2f99a41ff}</span></span>					


Ja, für dein Problem gibt es eine einfache Lösung:
Nicht würfeln, sondern alle 6 möglichen Zahlen mischen und die ersten 4 Zahlen nehmen. ;-)
www.delphi-library.d...iewtopic.php?t=71713
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 21.02.12 13:37 
user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt in dem Code.
Könnt ihr mir eine Lösung verraten ?


Ja!

Mit einer Zufallspermutation aller Zahlen von 1 bis 6. Damit auch bei der Permutation nicht zufällig falschgewählt wird, empfiehlt sich der Permutationsgenerationsalgorithmus nach Fisher-Yates.

user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
Die Schleifen mit while und repeat until wollten bei mir nicht wirklich funktionieren,


Nich wirklich? Also unwirklich?

repeat-until-Schleifen funktionieren immer, bestenfalls führen die Anweisungen innerhalb der Schleife nicht das aus, was bezweckt ist.
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Di 21.02.12 19:40 
Moin Jeszy.
eine einfache Lösung könnte so aussehen
Variablennamen und Wertebereich mußt Du anpassen :?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
z1:=random(5)+1;
repeat z2:=random(5)+1 until z1<>z2;
repeat z3:=random(5)+1 until (z1<>z3) and (z2<>z3);
repeat z4:=random(5)+1 until (z1<>z4) and (z2<>z4) and (z3<>z4);


Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.02.12 11:36 
user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
Mastermind - wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt


Wieso willst du das überhaupt verhindern? Im "echten" Mastermind kann man Farben auch doppelt verwenden ...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.02.12 11:40 
Vielleicht um eine einfachere Stufe anzubieten? Ich kenne auch einen solchen Modus.