Würfel-Programmierung

Hi,

ich glaube, so einen Operator gibt es in Pascal/Delphi (zumindest für einfache Arrays) nicht. Schreib dir am besten eine Methode, die dein Array durchsucht und entweder true oder false zurück gibt. Oder benutz sowas wie TList, das könnte sogar eine entsprechende Methode anbieten.

Grüße, D.
 
Wie soll ich denn nun die Rangfolge der Würfelzahlen (31,...41,...51,...61,...66, 11,...55, 21) implementieren?

Bitte Vorschläge mit sinnvollem Code, dann kann ich das besser nachvollziehen. Wenn ihr nur schreibt "mit einer ListBox", hilft mir das nicht viel weite!
 
Zuletzt bearbeitet:
hey,

ich will net fies sein, aber warum verlangst du hier den kompletten Code?
.. so kannste ja gleich jemand Fragen ob er dir das Programm schreibt.

Es gibt in Delphi ne gute Hilfe, gib da mal ListBox ein da findest du extreme viel!

ohne fleiß kein Preis ....

naja

Mfg ImoD
 
Ich habe mir nun eine ListBox gemacht und die Würfelzahlen nach Werten sortiert als Strings eingegeben. Dann habe ich die ListBox unsichtbar gemacht, denn sie nimmt nur Platz weg.
Könnt ihr mir vielleicht noch einen Tipp geben, wie der Compiler von dieser Liste auf die Reihenfolge der gewürfelten Zahlen schließen kann?
 
Hi,

ich an deiner Stelle würde das nicht über eine ListBox machen, denn die frisst nur unnötig viel Speicher. Eine verkettete Liste (TList) sollte es auch tun und ist relativ flexibel, was das Anhängen neuer Elemente angeht. Neue Würfelergebnisse hängst du einfach hinten an und bekommst so eine sortierte Liste nach der Reihenfolge, in der die Würfelergebnisse anfallen.

Grüße, D.
 
Hi,

TList ist keine sichtbare Formularkomponente der VCL. Das ist ein Klassentyp, den du in deinem Code verwenden kannst. Für weitere Details kann ich dir da nur die Online-Hilfe oder Google nahe legen.

Grüße, D.
 
ich habe mich nochmal an das thema herangewagt und es auf anderem wege probiert. um dem Compiler die rangfolge klar zu machen (21 zählt mehr als 66), habe ich die array-positionen einzeln zugewiesen:
Code:
numbers[0] := 31; numbers[1] := 32; numbers[2] := 41; numbers[3] := 42;
numbers[4] := 43; numbers[5] := 51; numbers[6] := 52; numbers[7] := 53;
numbers[8] := 54; numbers[9] := 61; numbers[10] := 62; numbers[11] := 63;
numbers[12] := 64; numbers[13] := 65; numbers[14] := 11; numbers[15] := 22;
numbers[16] := 33; numbers[17] := 44; numbers[18] := 55; numbers[19] := 66;
numbers[20] := 21;

Nun stehe ich vor dem Problem, dass wenn der Benutzer z.B. 63 eingibt, der Compiler die Position der 63 im array "numbers" erfahren muss. Dann kann der Computer-Gegner die Position seiner gewürfelten Zahl mit der Position meiner angegeben Zahl vergleichen und somit selber eine geeignete Zahl ausgeben:

Beispiel, so wie es aussehen soll: Ich drücke "Wuerfeln" und bekomme eine 43. Der Compiler erfährt über den Button "Einlesen", dass meine eingegebene Zahl 43 die Position 4 hat. Der Computer-Gegner würfelt selbst und hat die Zahl 31, deren Position 0 ist. Durch eine if-Abfrage gibt er eine Zahl aus, deren Position höher ist als 4 (der meiner Zahl).

Das mit der if-Abfrage und den Buttons krieg ich hin, brauche nur Hilfe bei der Übergabe der Positonsdaten.
 
Spontan würde ich es mal damit probieren:

Code:
function Get Position(const p_nValue: Byte): Byte;
var
  i: Integer;
begin
  Result := -1;
  for i := 0 to 20 do
    if p_nValue = numbers[i] then
    begin
      Result := i;
      break;
    end;
end;

Die Funktion sollte dir bei Übergabe des entsprechenden Wertes den Index (die Position) des Wertes im Array zurückgeben. Der Code ist allerdings von mir nicht getestet.

Ein Aufruf sollte klappen mit:
Code:
procedure OnEinlesenClick(Sender. TObject);
var
  nGamerValue: Byte;
begin
  nGamerValue := GetPosition(43); // oder was auch sonst für ein Wert für den Spieler gewürfelt wurde
  if nGamerValue <> -1 then
  // ab hier kann dann der Vergleich mit dem Würfelwert des Computers stattfinden
  ...
end;
 
Zurück