![]() |
Mastermind mit Bildern - Check-Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Man, nun sind wir schon recht weit gekommen mit unserem Projekt, stecken aber bei einem Problem fest. Ich hoffe, ihr könnt uns helfen. Wir versuchen, das Spiel Mastermind mit einer ansprechenden grafischen Oberfläche für ein Informatik-Projekt zu programieren. Dafür haben wir mit Bildern gearbeitet. Wir haben nun das Problem, dass wir nicht darauf kommen, wie wir den vom PC generierten Code mit dem vom Spieler eingegeben Code vergleichen können. Wenn wir das hätten, wäre das Programm quasi fertig =) Vielleicht könnt ihr uns ja helfen? Wir sind leider nicht soooo gut im Umgang mit Delphi, vielleicht hängen wir ja vor einem richtig simplen Problem und kommen einfach nicht drauf =) im Anhang habe ich das Spiel mal mit Code eingefügt. Cobbyrait liegt vorerst mal bei uns =) |
Re: Mastermind mit Bildern - Check-Problem
Hi,
irgendwie glaube ich, dass gerade das die Hauptaufgabe war, diesen Algorithmus zu entwickeln :wink: . Und da dieses Forum kein Hausaufgabenforum ist wird euch wahrscheinlich niemand helfen. |
Re: Mastermind mit Bildern - Check-Problem
Hey NamenLozer, n paar Tipps gehen doch okay oder? Sind doch schon/fast schon Sommerferien...
Also ich hab hier son paar Probleme. 1. Ich verstehe nicht, was ihr mit "Wir haben nun das Problem, dass wir nicht darauf kommen, wie wir den vom PC generierten Code mit dem vom Spieler eingegeben Code vergleichen können." meint 2. Das Programm läuft bei mir nicht, weil irgendwie Bilder fehlen 3. Ich hab mir den Code mal angesehen. Wie wärs, wenn ihr die Grafische Oberfläche ein bisschen vom eigentlichen Spiel entkoppelt? Beispiel: Ihr macht euch n Array, ums mal sehr simpel zu machen z.B. array of String, dort speichert ihr, welche Kugel auf welcher positon steht:
Delphi-Quellcode:
Ich hoffe ich konnte helfen, sonst könntet ihr bitte mal euer Problem etwas genauer schildern?
var MeinFeld,ComputerFeld:array[1..4] of string;
Position:integer; //Am Anfang zeigt die Position auf die erste Kugel in eurer Reihe, also Position:=1; //Ich mach jetzt mal das Beispiel für das OnClick Event auf das Bild mit der Roten Kugel: procedure TAuswahl.rotClick; begin Image0.Picture:=rot.Picture; MeinFeld[Position]:='r' // das 'r' nur als Beispiel... end; //Wenn der Computer sich per Zufall seine Reihe Zusammenstellt, macht ihr das selbe, sodass wir jetzt 2 Arrays haben, nämlich das Computer Array und das Spieler Array: //z.B. MeinFeld: ['r','b','g','s'] //Dann können wir erstmal überprüfen, ob Kugeln die richtige Farbe und die Richtige Position haben und wieviele Farben sonst noch richtig sind (ich kenn die Spielregeln nicht genau) for i:=1 to 4 do for j:=1 to 4 do if MeinFeld[i]=ComputerFeld[j] then begin ComputerFeld[j]:=''; //damit eine Kugel nicht zweimal identifiziert wird if i=j then showmessage('Kugel m. Farbe '+MeinFeld[i]+' an richtiger Pos. '+inttostr(i)) else showmessage('Übereinstimmende Farbe '+MeinFeld[i]); end; Mfg Alleinherrscher |
Re: Mastermind mit Bildern - Check-Problem
@ NamenLozer
Wir haben nun schon echt viel Zeit für das Programm investiert. Wir haben nur im moment nicht die Idee, genau dieses Problem zu lösen. Unsere Hausaufgabe ist das hier auch nicht, lediglich ein Projekt. Die Benotung ist mir ziemlisch Wurscht, da ich Informatik so oder so nicht in mein Abi einbringen kann :roll: Trotzdem danke für deinen Moralapostel :wink: , uns gehts aber nicht darum, das jemand anderes unser Programm zuende schreibt, sondern uns vielleicht einen kleinen Denkanstoß bzw eine Hilfe geben kann, wie man das Problem lösen kann. Ich kenn im übrigen auch andere Lösungen für das Spiel, allerdings haben wir Probleme mit dem Images, welche verglichen werden müssen :? @ Alleinherrscher Ich glaube, deine Idee könnte uns schon weiter bringen. Es geht darum, dass wir zwar testen können, ob farben des eingegebenen Codes mit den Farben des generierten Codes übereinstimmen, jedoch muss auch die Position der einzelnen Bilder verglichen werden. Das würde mit deinem Ansatz glaube ich klappen, wir versuchen es gleich mal =) Danke Danke Danke dafür =) Und sorry, ich hab vergessen, die Bilder mit zu schicken ;-) |
Re: Mastermind mit Bildern - Check-Problem
Mit Delphi kann man für so ein einfaches Problem ja fast schon reinen Pseudocode schreiben.
Delphi-Quellcode:
Wenn ich die Mastermind-Regeln noch richtig im Kopf hab, ist dieses beispiel total oversized. Aber es sollte funktionieren.
uses Math; //für die Min-Funktion
type TCode = (Code1,Code2,Code3,Code4); //die zu setzenden farben TLock = array[0..3] of TCode; //eine gesetzte Farbenfolge implementation function CorrectCodes(Lock, Guess: TLock): Integer; // ermittelt, wie oft eine farbe gesetzt wurde function NumberOfCodes(ACode: TCode; ALock: TLock): Integer; var i: Integer; begin Result := 0; for i := 0 to high(ALock) do if ALock[i] = ACode then Inc(Result); end; var Code: TCode; begin Result := 0; for Code := low(TCode) to high(TCode) do //Ich hoff das funktioniert... Ansonsten gehört das ganze n paar mal auf Integer gecastet. begin Inc(Result, Min(NumberOfCodes(Lock),NumberOfCodes(Guess)); //Die Anzahl der richtigen Farben wird um höchstens die Anzahl der gesetzten Farben und höchstens die tatsächliche Anzahl vorhandener Farben erhöht. D.h., setze ich zweimal rot, es kommt aber nur eineml rot vor, heißt das, man hat nur einmal richtig geraten. Gleiches, wenn einmal rot gesetzt wird, rot aber tweimal vorkommt. end; end; function CorrectlyPlacedCodes(Lock, Guess: TLock): Integer; var i: Integer; begin //Das ist einfach. Nur komplett durchgehen und schauen, ob geratene Farbe mit vorliegender Farbe übereinstimmt. Result := 0; for i := 0 to high(Lock) do if Lock[i] = Guess[i] then Inc(Result); end; ...und ich denke, ohne es komplett zu verstehen, kann man es auch nicht in eine bestehende Lösung integrieren. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz