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 :) |
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. |
Re: kniffel - zahlenabfrage
Delphi-Quellcode:
so soviel hab ich und jetzt möchte ich, dass das programm erkennt wieviele 6er oder 3er oder 4er ich "gewürfelt" habe.
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. image1 bis image30 sind bilder zu den würfeln. also die gewürfelte zahl als bild eines würfels^^ |
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 ? |
Re: kniffel - zahlenabfrage
Wenn ich das richtig verstanden habe suchst du vielleicht "and" ?
Delphi-Quellcode:
If (w1=6) and (w2=6) then
{show pic} |
Re: kniffel - zahlenabfrage
Guten Abend,
ich würde Dir ein Array vorschlagen welches die Anzahl der 1er-6er aufnimmt.
Delphi-Quellcode:
Wenn eine 3 gewürfelt wird, wird die Position 3 des Arrays um 1 erhöht.
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 Grüße Klaus |
Re: kniffel - zahlenabfrage
Ausserdem:
Delphi-Quellcode:
wird übersichtlicher mit
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;
Delphi-Quellcode:
case w1 of
1: Image1.Visible:=true; 2: Image2.Visible:=true; ... end; |
Re: kniffel - zahlenabfrage
Zitat:
Delphi-Quellcode:
nehmen ;)
TImage(FindComponent('Image'+IntToStr(w1))).Visible:=true
|
Re: kniffel - zahlenabfrage
Okay, aber eher nicht für Einsteiger :?:
|
Re: kniffel - zahlenabfrage
Gut, dann kann er sich das "FindComponent" aber schon einmal vormerken. Für´s Erste wird ja die "Case"-Abfrage reichen.
|
Re: kniffel - zahlenabfrage
:)
|
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 |
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. |
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