AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Anfänger probiert kniffel und kommt nicht weiter
Thema durchsuchen
Ansicht
Themen-Optionen

Anfänger probiert kniffel und kommt nicht weiter

Ein Thema von jesus.or.christ · begonnen am 22. Mär 2009 · letzter Beitrag vom 23. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
jesus.or.christ

Registriert seit: 20. Mär 2009
Ort: Roding
16 Beiträge
 
Delphi 7 Personal
 
#1

Anfänger probiert kniffel und kommt nicht weiter

  Alt 22. Mär 2009, 16:54
ich probiere kniffel und habe ein problem.
hier mein quelltext
Delphi-Quellcode:
unit unit_spiel;

interface

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

type
  TFormSpiel = class(TForm)
    ImageWEins: TImage;
    ImageWZwei: TImage;
    ImageWDrei: TImage;
    ImageWVier: TImage;
    ImageWFuenf: TImage;
    ButtonWuerfel: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ButtonWuerfelClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  Bild1 = 'eins.bmp';
  Bild2 = 'zwei.bmp';
  Bild3 = 'drei.bmp';
  Bild4 = 'vier.bmp';
  Bild5 = 'fuenf.bmp';
  Bild6 = 'sechs.bmp';

var
  FormSpiel: TFormSpiel;
  w: array[1..5] of integer;
  i, j, k, l, m: integer;

implementation

{$R *.dfm}

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

procedure TFormSpiel.ButtonWuerfelClick(Sender: TObject);
begin
w[1] := random(5) + 1;
w[2] := random(5) + 1;
w[3] := random(5) + 1;
w[4] := random(5) + 1;
w[5] := random(5) + 1;
//Bilder zuweisen ANFANG
case w[1] of
1: ImageWEins.Picture.LoadFromFile(Bild1);
2: ImageWEins.Picture.LoadFromFile(Bild2);
3: ImageWEins.Picture.LoadFromFile(Bild3);
4: ImageWEins.Picture.LoadFromFile(Bild4);
5: ImageWEins.Picture.LoadFromFile(Bild5);
6: ImageWEins.Picture.LoadFromFile(Bild6);
end;
case W[2] of
1: ImageWZwei.Picture.LoadFromFile(Bild1);
2: ImageWZwei.Picture.LoadFromFile(Bild2);
3: ImageWZwei.Picture.LoadFromFile(Bild3);
4: ImageWZwei.Picture.LoadFromFile(Bild4);
5: ImageWZwei.Picture.LoadFromFile(Bild5);
6: ImageWZwei.Picture.LoadFromFile(Bild6);
end;
case W[3] of
1: ImageWDrei.Picture.LoadFromFile(Bild1);
2: ImageWDrei.Picture.LoadFromFile(Bild2);
3: ImageWDrei.Picture.LoadFromFile(Bild3);
4: ImageWDrei.Picture.LoadFromFile(Bild4);
5: ImageWDrei.Picture.LoadFromFile(Bild5);
6: ImageWDrei.Picture.LoadFromFile(Bild6);
end;
case W[4] of
1: ImageWFuenf.Picture.LoadFromFile(Bild1);
2: ImageWFuenf.Picture.LoadFromFile(Bild2);
3: ImageWFuenf.Picture.LoadFromFile(Bild3);
4: ImageWFuenf.Picture.LoadFromFile(Bild4);
5: ImageWFuenf.Picture.LoadFromFile(Bild5);
6: ImageWFuenf.Picture.LoadFromFile(Bild6);
end;
case W[5] of
1: ImageWVier.Picture.LoadFromFile(Bild1);
2: ImageWVier.Picture.LoadFromFile(Bild2);
3: ImageWVier.Picture.LoadFromFile(Bild3);
4: ImageWVier.Picture.LoadFromFile(Bild4);
5: ImageWVier.Picture.LoadFromFile(Bild5);
6: ImageWVier.Picture.LoadFromFile(Bild6);
end;
//Bilder zuweisen ENDE
end;

end.
wie ihr sehen könnt habe ich 5 würfel (logisch bei kniffel...), w: array[1..5] of integer,
lade über case-Abfragen die entsprechenden bilder.
im späteren verlauf (noch nicht programmiert) soll man über radiobuttons, z.b. 4er pasch oder ähnliches auswählen können.
dazu müsste ich die 5 variablen nach größe sortieren.

erster anlauf:
online recherchieren...
wie gesagt, ich bin anfänger und werde aus bubblesort u.ä. nicht schlau.

nun meine bitte:
könnte mir einer die nötigen programmzeilen schreiben, die auf meinen quelltext zugeschnitten sind und mir unter umständen auch noch möglichst einfach erklären?
ich wäre für eine solche hilfestellung sehr dankbar, da ich das restliche programm im kopf schon genau überdacht habe und es nur bei dieser kleinigkeit hängt.

in dankbarer vorraussicht
matze
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
59 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 22. Mär 2009, 19:57
Hallo Matze,
ich würde neben jeden Würfel eine CHECKBOX platzieren mit der ich festlege ob der Würfel so liegen bleiben soll oder ob mit Ihm neu gewürfelt wird. Wenn man dann noch ein StrinGrid mit den möglichen Punkten 1er 2er …Full House .. kl.Strasse etc anlegt kann man durch auswahl der Cell gleich die Werte eintragen lassen

Eine andere Möglichkeit: das ganze in eine Stringlist einzutragen. Diese führt dann mit der Methode sort eine Sortierung durch

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
  MyList: Tstrings; //!!!!
begin
  MyList := TStringList.Create;
  try
    MyList.Add(inttostr(w[1])); // Würfel 1
    MyList.Add(inttostr(w[2])); // Würfel 2
    MyList.Add(inttostr(w[3])); // Würfel 3
    MyList.Add(inttostr(w[4])); // Würfel 4
    MyList.Add(inttostr(w[5])); // Würfel 5
    MyList.Sort; werte werden sortieert

  finally
    MyList.Free;
  end;
end;
Michael
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 22. Mär 2009, 20:18
oder halt BubbleSort.

Füge die Procedure nach {$R *.dfm} ein:
(oder besser vor der Methode, die Bubblesort nutzt oder noch besser in eine eigene Tools-Unit)
Delphi-Quellcode:
{$R *.dfm}  (* Die Zeile in Deinem Code suchen *)

procedure BubbleSortWuerfel(var A : array of Integer);
var
  i,j,t : Integer;
begin
  for i := Low(A) to High(A) do
    for j := Low(A) to High(A) - 1 do
      if A[j] > A[j + 1] then begin
        t := A[j];
        A[j] := A[j+1];
        A[j+1] := t;
      end;
end;
Sortieren kannst Du dann, nachdem Du die Random-Werte zugewiesen hast:
BubbleSortWuerfel(w); btw: Ein Würfel hat 6 Seiten
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#4

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 11:18
Kleine Frage am Rande...

Das Array für die Würfel wurde so deklariert:

w: array[1..5] of integer; Wenn man aber drauf zugreifen will, geht das doch nur über die Indizes [0..4], oder irre ich mich da gewalitg?

EDIT : Alles klar! Danke für den Hinweis. (Arbeite selbst nur mit dynamischen Arrays)

PS. schreib doch die zuweisung der Werte als Schleife... Erspart dir Arbeit... 8)

Delphi-Quellcode:
// für diesen fall ausreichend;
var i : byte;
.
.
.
for i := low(w) to high(w) do
  w[i] := random(5) + 1;
LG Marco
Marco Tröger
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 11:22
Da irrst Du Dich, bei statischen Arrays können die Indizes selbst vergeben werden. Aus Sicherheitsgründen könnte man aber über Low(Array) und High(Array) zugreifen und muss sich dann keine weiteren Gedanken machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 12:30
Zitat:
Aus Sicherheitsgründen könnte man aber über Low(Array) und High(Array) zugreifen und muss sich dann keine weiteren Gedanken machen.
Z.B. wenn man später doch auf einen dynamischen Array umsteigt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 13:19
Zitat von mkinzler:
Zitat:
Aus Sicherheitsgründen könnte man aber über Low(Array) und High(Array) zugreifen und muss sich dann keine weiteren Gedanken machen.
Z.B. wenn man später doch auf einen dynamischen Array umsteigt
... oder die Array-Größe ändert (wie bereits erwähnt wurde hat ein Würfel 6 Seiten).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#8

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 14:11
Zitat von DeddyH:
Zitat von mkinzler:
Zitat:
Aus Sicherheitsgründen könnte man aber über Low(Array) und High(Array) zugreifen und muss sich dann keine weiteren Gedanken machen.
Z.B. wenn man später doch auf einen dynamischen Array umsteigt
... oder die Array-Größe ändert (wie bereits erwähnt wurde hat ein Würfel 6 Seiten).
Aber das Array ist ein Array für fünf Würfel. Muss also vorerst nicht geändert werden, es sei denn es gibt eine Regeländerung.



Sherlock
Oliver
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 14:22
[quote="jesus.or.christ"]
Delphi-Quellcode:
...
procedure TFormSpiel.ButtonWuerfelClick(Sender: TObject);
begin
w[1] := random(5) + 1;
w[2] := random(5) + 1;
w[3] := random(5) + 1;
w[4] := random(5) + 1;
w[5] := random(5) + 1;
...
end;

end.
Ich denke hier kommt der Einwand her, den einige formuliert haben. Ich hab mal ein kleines Programm geschrieben und diese Zeilen getestet. Hatte ebenso wie einige Vorredner das Gefühlt, dass niemals eine 6 gewürfelt wird und dies ist auch wirklich der Fall.

Hier der Code den ich genommen hab:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  randomize;
  Memo1.Clear;
  for i:= 1 to 100 do Memo1.Lines.Add(inttostr(random(5)+1));
end;

end.
Ich weiß, ist ziemlich simpel aber es wurde bei den 100 Testwürfen nicht ein mal eine 6 gewürfelt. So wie einige und ich richtig vermutet haben. Um auch 6 zu wirfeln muss das wie folgt heißen:

w[2] := random(6) + 1; MfG
BAMatze
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Anfänger probiert kniffel und kommt nicht weiter

  Alt 23. Mär 2009, 14:34
Genau, erst Random(6) gibt 6 Zahlen aus (allerdings beginnend bei 0), weshalb das +1 weiterhin korrekt ist.
  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 20:23 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