AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mastermind mit Bildern - Check-Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Mastermind mit Bildern - Check-Problem

Ein Thema von Tolex · begonnen am 29. Jun 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
Tolex

Registriert seit: 10. Jun 2007
7 Beiträge
 
Delphi 6 Professional
 
#1

Mastermind mit Bildern - Check-Problem

  Alt 29. Jun 2007, 19:03
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 =)
Angehängte Dateien
Dateityp: rar mastermind_528.rar (1,03 MB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Mastermind mit Bildern - Check-Problem

  Alt 29. Jun 2007, 20:30
Hi,

irgendwie glaube ich, dass gerade das die Hauptaufgabe war, diesen Algorithmus zu entwickeln .
Und da dieses Forum kein Hausaufgabenforum ist wird euch wahrscheinlich niemand helfen.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Mastermind mit Bildern - Check-Problem

  Alt 29. Jun 2007, 20:32
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:
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;
Ich hoffe ich konnte helfen, sonst könntet ihr bitte mal euer Problem etwas genauer schildern?

Mfg Alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Tolex

Registriert seit: 10. Jun 2007
7 Beiträge
 
Delphi 6 Professional
 
#4

Re: Mastermind mit Bildern - Check-Problem

  Alt 29. Jun 2007, 20:48
@ 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


Trotzdem danke für deinen Moralapostel , 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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Mastermind mit Bildern - Check-Problem

  Alt 29. Jun 2007, 22:22
Mit Delphi kann man für so ein einfaches Problem ja fast schon reinen Pseudocode schreiben.

Delphi-Quellcode:
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;
Wenn ich die Mastermind-Regeln noch richtig im Kopf hab, ist dieses beispiel total oversized. Aber es sollte funktionieren.

...und ich denke, ohne es komplett zu verstehen, kann man es auch nicht in eine bestehende Lösung integrieren.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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