AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mischen Funktion

Offene Frage von "testzugang"
Ein Thema von testzugang · begonnen am 16. Sep 2004 · letzter Beitrag vom 16. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
testzugang

Registriert seit: 14. Sep 2004
9 Beiträge
 
#1

Mischen Funktion

  Alt 16. Sep 2004, 17:15
HI,

ich bin gerade dabei ein memory zu schreiben und eigentlich läuft es auch perfekt, bis auf das kleine Problem. Ich lade meine Bilder so:

Delphi-Quellcode:
begin
   x:=0; y:=10;
   For i:=1 to IconZahl DO begin
     NextPos(x,y);
     IcoName:= 'Icon'+IntToStr(i);
     TKarte.Create(Self,x,y,IcoName);
   end;

For i:=IconZahl downto 1 DO begin
     NextPos(x,y);
     IcoName:= 'Icon'+IntToStr(i);
     TKarte.Create(Self,x,y,IcoName);
     Brueckseite.Click;
   end;
Also einmal meine 30 Icons rauf und einmal wieder runter. Ist ja ganz lustig, aber jetzt möchte ich eine "mischen" Funktion einbauen. Hat jmd. eine Hilfestellung evtl. mit Code für mich?

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:27


Du könntest die Kartennummern in einem Array durcheinander verteilen und dann in der for-Schleife die Nummern aus dem Array lesen.
  Mit Zitat antworten Zitat
testzugang

Registriert seit: 14. Sep 2004
9 Beiträge
 
#3

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:31
Zitat von Matze:


Du könntest die Kartennummern in einem Array durcheinander verteilen und dann in der for-Schleife die Nummern aus dem Array lesen.
Ich hab nur null Ahnung von Array(s). Ich habe mich gestern abend mal eingelesen, aber ich bekomme es definitv nicht hin.

Hast du ein bisschen Code für mich übrig ?

MfG
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#4

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:39
Hi!

Auf den ersten Blick erscheint die "Random" Funktion die richtige Wahl, die eine Ganzzahl zurückgibt.

 Ergebnis := random(IconZahl-1) + 1; // ergibt einen Wert zwischen 0 und 29 + 1 also 1 bis 30 Hier sind aber zwei Dinge zu beachten:

a.)
Die Random Funktion liefert Ergebnisse von Null an. Da Deine Icons anscheinend ab eins gezählt werden, darf also nur ein Random(29) erzeugt werden. Das Ergebnis muss also danach um eins erhöht werden.

b.)
Random kann nicht wirklich zufällig Zahlen liefern.
Die Random Funktion würde so bei jedem Aufruf die gleiche Reihenfolge von "Zufallszahlen" liefern, daher muss vor dem Aufruf ein "Randomize;" her, dass in der Reihe von Zufallszahlen jeweils an einem anderen Punkt aufsetzt.

Ggf. kann jemand anderes die genaue interne Funktion der Zufallszahlenermittlung erklären.


Jetzt wären die Icons also zufällig. Das reicht aber wohl nicht, denn wenn ich mich an Menory recht erinnere gibt es jedes Kärtchenpaar nur einmal. Du musst also die gültigen IconZahlen irgendwie zwischenspeichern (zB. in einem Array oder einer Stringliste oder so) und dann die bereits benutzten Einträge herausnehemn um zu vermeiden, dass ein Kartenpaar mehrfach benutzt wird.

Bei meinem MP3 Player hatte ich für die Zufallswiedergabe ein ähnliches Vorhaben. Hier habe ich die Liednummern/Dateinamen mittels einer Stringlist zu Beginn ermittelt und dann nach und nach die benutzten aus der Liste gelöscht. Dann muss das Random sich aber natürlich auf die restliche Anzahl Einträge der Liste und nicht der Gesamtliedanzahl, bzw Iconanzahl beziehen.
  Mit Zitat antworten Zitat
testzugang

Registriert seit: 14. Sep 2004
9 Beiträge
 
#5

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:41
Zitat von Anthauri:
Hi!

Auf den ersten Blick erscheint die "Random" Funktion die richtige Wahl, die eine Ganzzahl zurückgibt.

 Ergebnis := random(IconZahl-1) + 1; // ergibt einen Wert zwischen 0 und 29 + 1 also 1 bis 30
Randomize; und Random sind ja kein Problem, das Problem ist, Random muss solange laufen, bis alle Zahlen genau! 1 mal verteilt worden sind.

MfG
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:43
Hi,

es muss Random(30)+1 heißen, da bei Random die angegebene Zahl nicht zurückgegeben wird.

ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:45
Du kannst ja ein Array füllen und in einer for-Schleife immer Zufällige Index-Werte miteinander vertauschen, was besseres fällt mir nicht ein.

So kommt jeder Zahl auch nur einmal vor.

Zum Tauschen musst du hier mal nach Hier im Forum suchenSwap suchen, ansonsten schreib ich das schnell zusammen... (ansonsten = wenn du nicht fündig wirst )
  Mit Zitat antworten Zitat
testzugang

Registriert seit: 14. Sep 2004
9 Beiträge
 
#8

Re: Mischen Funktion

  Alt 16. Sep 2004, 17:53
Zitat von Matze:
Du kannst ja ein Array füllen und in einer for-Schleife immer Zufällige Index-Werte miteinander vertauschen, was besseres fällt mir nicht ein.

So kommt jeder Zahl auch nur einmal vor.

Zum Tauschen musst du hier mal nach Hier im Forum suchenSwap suchen, ansonsten schreib ich das schnell zusammen... (ansonsten = wenn du nicht fündig wirst )
ich habe zwar ein Memory gefunden, aber um das zu verstehen müsste ich mich in den Code einarbeiten

Wenn du gerade mal etas Zeit hättest

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Mischen Funktion

  Alt 16. Sep 2004, 18:15
Hmm, finde den Fehler (da ist einer drin) grad nicht, evtl. siehst du ihn ja, aber so in der Art sollte es klappen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  KartenAnzahl = 25;

var
  Form1: TForm1;
  Karten: array of integer;

implementation

{$R *.dfm}

//Die Zahlen Z1 und Z2 vertauschen
procedure Swap(var Z1, Z2: integer);
var Temp: integer;
begin
  Temp := Z1;
  Z1 := Z2;
  Z2 := Temp;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
    KartenIndex1, KartenIndex2: integer;
begin
  SetLength(Karten, KartenAnzahl);

  //Array füllen
  for i := 1 to KartenAnzahl do
    Karten[i] := i;

  //Karten mischen:
  for i := 1 to 100 do //Anzahl der Vertauschdurchgänge
  begin
    KartenIndex1 := random(KartenAnzahl) + 1;

    repeat
      KartenIndex2 := random(KartenAnzahl) + 1;
    until
      KartenIndex2 <> KartenIndex1;

    Swap(Karten[KartenIndex1], Karten[KartenIndex2]);
  end;
end;



procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Karten);
end;

end.
  Mit Zitat antworten Zitat
testzugang

Registriert seit: 14. Sep 2004
9 Beiträge
 
#10

Re: Mischen Funktion

  Alt 16. Sep 2004, 18:40
Mann, mann mann ich brauche dringend ein neues Lehrbuch...

Ich checke das nícht..

MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11: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