Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi kniffel - zahlenabfrage (https://www.delphipraxis.net/151647-kniffel-zahlenabfrage.html)

pheel 26. Mai 2010 18:17


kniffel - zahlenabfrage
 
Soo hallo erstmal an die Community :)
Ich weiß nun nicht genau ob diese Frage auch wirklich hier herein gehört aber ich stelle
sie mal hier, kann ja bestimmt auch noch verschoben werden. Falls sie verschoben wird, danke dafür und entschuldigung.

So nun meine Frage.
Bin noch nicht lange beim programmieren an delphi, habe es jetz seit letzten Sommer in der Schule und stehe vor folgender Frage:
Ich möchte das Würfelspiel "Kniffel" bauen.
jetzt habe ich die anzeige von den würfeln auf einem shape, der als tisch dienen soll, schon gemacht.
ein zweites formular wo die werte gespeichert werden wird noch gemacht.
ich habe vor jeden würfel eine checkbox gemacht.
Bei einem buttonclick wird jeder würfel neu gewürfelt und halt je nach gewürfelter Zahl in die Variable des Würfels eingetragen, AUßER
die CheckBox vor dem Würfel ist aktiviert, dann bleibt der würfel liegen, was natürlich so sein soll als ob man sich beim kniffel die würfel
die man liegen lassen will zur seite legt.

dann soll das programm immer wieder abfragen was schon da liegt was es gebrauchen könnte d.h. wenn ich drei 6er habe, ob ich sie nun als 3er pasch oder eben als drei 6er werten will. dafür sollen dann jeweils für jede methode die man machen kann buttons erscheinen.
aber genau da liegt das problem. ich weise bei knopfdruck jeder variable (in meinem fall w1,w2,w3,w4,w5 für jeden würfel) eine zahl zu.
wie erkennt das programm, das 3 von diesen werten die zahl 6 ist, denn erst wenn halt mindestens 3 würfel die zahl 6 haben, soll ein button mit der aufschrift "dreierpasch" oder "drei 6er" erscheinen.
muss ich dann irgendwie die zahlen, die den variablen zugewiesen wurden in einem pool machen und dann abfragen "for each 6 in the pool begin" oder wie?

ich hoffe ihr versteht mein problem und könnt euch kurz für mich zeit nehmen.
MfG Philip :)

Wolfgang Mix 26. Mai 2010 19:15

Re: kniffel - zahlenabfrage
 
Erst einmal herzlich willkommen in der DP :dp:
Ich glaube, es kommen keine Antworten, weil dein
Vorhaben den meisten nicht ganz klar ist.
Zeige einmal ein bisschen Code und die Stelle,
wo es hängt. Dann wird sicher weiter geholfen.

pheel 26. Mai 2010 19:49

Re: kniffel - zahlenabfrage
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Shape1: TShape;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Image10: TImage;
    Image11: TImage;
    Image12: TImage;
    Image13: TImage;
    Image14: TImage;
    Image15: TImage;
    Image16: TImage;
    Image17: TImage;
    Image18: TImage;
    Image19: TImage;
    Image20: TImage;
    Image21: TImage;
    Image22: TImage;
    Image23: TImage;
    Image24: TImage;
    Image25: TImage;
    Image26: TImage;
    Image27: TImage;
    Image28: TImage;
    Image29: TImage;
    Image30: TImage;
    BtWurf: TButton;
    procedure BtWurfClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  w1,w2,w3,w4,w5,w6: integer;
implementation

{$R *.dfm}

procedure TForm1.BtWurfClick(Sender: TObject);
begin

randomize;
if CheckBox1.Checked = false then    //ich frage ab welcher würfel gewürfelt wird
 begin
  Image1.Visible:=false;
  Image2.Visible:=false;
  Image3.Visible:=false;
  Image4.Visible:=false;
  Image5.Visible:=false;
  Image6.Visible:=false;
  w1:=random(6)+1;
 end;
if CheckBox2.Checked = false then
 begin
  Image7.Visible:=false;
  Image8.Visible:=false;
  Image9.Visible:=false;
  Image10.Visible:=false;
  Image11.Visible:=false;
  Image12.Visible:=false;
  w2:=random(6)+1;
 end;
if CheckBox3.Checked = false then
 begin
  Image13.Visible:=false;
  Image14.Visible:=false;
  Image15.Visible:=false;
  Image16.Visible:=false;
  Image17.Visible:=false;
  Image18.Visible:=false;
  w3:=random(6)+1;
 end;
if CheckBox4.Checked = false then
 begin
  Image19.Visible:=false;
  Image20.Visible:=false;
  Image21.Visible:=false;
  Image22.Visible:=false;
  Image23.Visible:=false;
  Image24.Visible:=false;
  w4:=random(6)+1;
 end;
if CheckBox5.Checked = false then
 begin
  Image25.Visible:=false;
  Image26.Visible:=false;
  Image27.Visible:=false;
  Image28.Visible:=false;
  Image29.Visible:=false;
  Image30.Visible:=false;
  w5:=random(6)+1;
 end;

if w1 = 1 then                   //fragt ab und zeigt die bilder
 Image1.Visible:=true;
if w1 = 2 then
 Image2.Visible:=true;
if w1 = 3 then
 Image3.Visible:=true;
if w1 = 4 then
 Image4.Visible:=true;
if w1 = 5 then
 Image5.Visible:=true;
if w1 = 6 then
 Image6.Visible:=true;

if w2 = 1 then
 Image7.Visible:=true;
if w2 = 2 then
 Image8.Visible:=true;
if w2 = 3 then
 Image9.Visible:=true;
if w2 = 4 then
 Image10.Visible:=true;
if w2 = 5 then
 Image11.Visible:=true;
if w2 = 6 then
 Image12.Visible:=true;

if w3 = 1 then
 Image13.Visible:=true;
if w3 = 2 then
 Image14.Visible:=true;
if w3 = 3 then
 Image15.Visible:=true;
if w3 = 4 then
 Image16.Visible:=true;
if w3 = 5 then
 Image17.Visible:=true;
if w3 = 6 then
 Image18.Visible:=true;

if w4 = 1 then
 Image19.Visible:=true;
if w4 = 2 then
 Image20.Visible:=true;
if w4 = 3 then
 Image21.Visible:=true;
if w4 = 4 then
 Image22.Visible:=true;
if w4 = 5 then
 Image23.Visible:=true;
if w4 = 6 then
 Image24.Visible:=true;

if w5 = 1 then
 Image25.Visible:=true;
if w5 = 2 then
 Image26.Visible:=true;
if w5 = 3 then
 Image27.Visible:=true;
if w5 = 4 then
 Image28.Visible:=true;
if w5 = 5 then
 Image29.Visible:=true;
if w5 = 6 then
 Image30.Visible:=true;
end;

end.
so soviel hab ich und jetzt möchte ich, dass das programm erkennt wieviele 6er oder 3er oder 4er ich "gewürfelt" habe.
image1 bis image30 sind bilder zu den würfeln. also die gewürfelte zahl als bild eines würfels^^

Tron4U 26. Mai 2010 20:03

Re: kniffel - zahlenabfrage
 
hi,

warum hast 30 images es gibt doch nur 6 mögliche würfelaugen?

an sonsten wirds einfacher wenn du die würfel in ein array legst:

var w: array[1..6] of byte;

würfeln würde dann z.b. so gehn:

for i:=1 to 6 do w[i]:=random(6)+1;

secher zählen dann so:

sechser:=0;
for i:=1 to 6 do if w[i]:=6 then inc(sechser);

...

hilft dir das ?

-Phantom- 26. Mai 2010 20:06

Re: kniffel - zahlenabfrage
 
Wenn ich das richtig verstanden habe suchst du vielleicht "and" ?
Delphi-Quellcode:
If (w1=6) and (w2=6) then
{show pic}

Klaus01 26. Mai 2010 20:06

Re: kniffel - zahlenabfrage
 
Guten Abend,

ich würde Dir ein Array vorschlagen welches die Anzahl der 1er-6er aufnimmt.

Delphi-Quellcode:
var
  augen: Array[1..6] of Byte;

...

 inc(augen[w1]); // erhöht den Wert im Augen Array des wurfes von Würfel_1 um 1
Wenn eine 3 gewürfelt wird, wird die Position 3 des Arrays um 1 erhöht.

Grüße
Klaus

Wolfgang Mix 26. Mai 2010 20:11

Re: kniffel - zahlenabfrage
 
Ausserdem:

Delphi-Quellcode:
if w1 = 1 then                   //fragt ab und zeigt die bilder
Image1.Visible:=true;
if w1 = 2 then
Image2.Visible:=true;
if w1 = 3 then
Image3.Visible:=true;
if w1 = 4 then
Image4.Visible:=true;
if w1 = 5 then
Image5.Visible:=true;
if w1 = 6 then
Image6.Visible:=true;
wird übersichtlicher mit

Delphi-Quellcode:
case w1 of
  1: Image1.Visible:=true;
  2: Image2.Visible:=true;
  ...
end;

Noedel 26. Mai 2010 20:19

Re: kniffel - zahlenabfrage
 
Zitat:

Zitat von Wolfgang Mix
Ausserdem:

Delphi-Quellcode:
if w1 = 1 then                   //fragt ab und zeigt die bilder
Image1.Visible:=true;
if w1 = 2 then
Image2.Visible:=true;
if w1 = 3 then
Image3.Visible:=true;
if w1 = 4 then
Image4.Visible:=true;
if w1 = 5 then
Image5.Visible:=true;
if w1 = 6 then
Image6.Visible:=true;
wird übersichtlicher mit

Delphi-Quellcode:
case w1 of
  1: Image1.Visible:=true;
  2: Image2.Visible:=true;
  ...
end;

Dann können wir auch gleich
Delphi-Quellcode:
TImage(FindComponent('Image'+IntToStr(w1))).Visible:=true
nehmen ;)

Wolfgang Mix 26. Mai 2010 20:22

Re: kniffel - zahlenabfrage
 
Okay, aber eher nicht für Einsteiger :?:

Noedel 26. Mai 2010 20:36

Re: kniffel - zahlenabfrage
 
Gut, dann kann er sich das "FindComponent" aber schon einmal vormerken. Für´s Erste wird ja die "Case"-Abfrage reichen.

Wolfgang Mix 26. Mai 2010 20:40

Re: kniffel - zahlenabfrage
 
:)

pheel 26. Mai 2010 22:22

Re: kniffel - zahlenabfrage
 
ähm ich danke schonmal für die vielen antworten!
also ich kenne weder das "FindComponent" noch die "Case"-Abfrage.
das mit der "Case"-Abfrage lässt sich aber wohl machen, danke schonmal für den hinweis =)
das mit dem array hatte ich mir auch schon überlegt, wird aber wohl auch ziemlich kompliziert weil ich dann doch für jeden
würfel ein array machen müsste und dann alle möglichen kombinationen, die es beim kniffeln gibt eingeben müsste.
zum beispiel bei einer kleinen straße.
falls ihr das spiel kennt brauche ich bei einer kleinen straße 1,2,3,4 oder 2,3,4,5 oder 3,4,5,6.
dabei kann ja auch w3 = 2, w5 = 1, w2 = 4 und w1 = 3 sein.
also bräuchte ich dabei schonmal 4 arrays die ich abfragen muss wie die ziffern sind.

am besten fände ich wenn es gehen würde das ich einen Pool (oder behälter) habe (zum beispiel ein array) in dem ich ein
einfach die gewürfelten zahlen eintrage.
danach müsste ich natürlich programmieren was passiert wenn ich bestimmte kombinationen habe, das könnte ja schon einige zeilen lang werden aber das ist nich das problem :)

vielleicht habt ihr ja möglichkeiten oder ideen wie ich mir das projekt "kniffel" vereinfachen könnte oder ob ich es einfach ganz streichen sollte.
ich hoffe ihr versteht mich 8-)

MfG Philip

mani64 27. Mai 2010 01:51

Re: kniffel - zahlenabfrage
 
Hallo Philipp,

schau dir nochmal Antwort #6 an (von Klaus01).
Er hat vorgeschlagen, die Würfelergebnisse in einem Array zu zählen. Das sollte dir weiterhelfen.

Eine kleine Straße liegt dann vor, wenn in dem Array 4 hinter einander liegende Werte mindestens 1 sind, also die Augenzahl mindestens einmal gewürfelt wurde, und das bei 4 hinter einander liegenden Augenzahlen.

pheel 27. Mai 2010 08:25

Re: kniffel - zahlenabfrage
 
ahh stimmt danke, die #6 habe ich vorher falsch gedeutet.
und wenn ich drei 6er gewürfelt habe dann habe ich in der array position 6 eine drei wenn ich das richtig verstanden habe?
um das jede möglichkeit die man beim kniffeln hat zu programmieren komme ich wohl nicht rum, was auch nciht weiter schlimm ist :)
also ich werde das mal versuchen und mich dann heute nachmittag nochmal bei euch melden.
ich danke schonmal für die antworten


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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