| Autor |
Beitrag |
Donn!e DarKo
      
Beiträge: 20
Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
|
Verfasst: Mi 07.01.09 08:02
Hallo,
Ich bin neu hier, aber ich bräuchte dringend mal den Rat von etwas erfahreren Programmieren  Deswegen schreib ich hier mal (:
Ich soll als Projekt das Würfelspiel 10.000 Programmieren. Momentan hängt an der stelle wo mir das Programm die Punkte ausspucken soll.
Unzwar wenn ich bei einem Wurf folgen zahlen habe 1 3 5 1 1 dann habe ich ja an der 1, 4 und 5 stelle ne eins ... wie kann ich delphi nun sagen das er nur die den 3er Pasch 1er zusammen zählen soll und mir dann 1000pkt gutschreiben ?
Ich meine die Kombinationen bei 5 würfel sind 120 stk. Wenn ich das alles irgendwie mit IF schleifen legen würde, wäre das nen riesen Text für nen bissle kram.
Ich hoffe das ein wenig verstanden wurde was ich genau wissen möchte.
Danke im Voraus !
Gruß
DarKo
Moderiert von Narses: Beitragsformatierung überarbeitet.
|
|
lincore
Hält's aus hier
Beiträge: 15
Kubuntu 8.04, Debian lenny, Windows XP, Windows Vista
Delphi 2009, C++, Python, Lua
|
Verfasst: Mi 07.01.09 09:19
Morgen Donnie und herzlich Willkommen im Forum!
Was Du brauchst sind Arrays und Schleifen (speziell for).
Als Anhaltspunkte will ich dir noch diese Codefetzen mitgeben:
Delphi-Quelltext 1:
| var WuerfelErgebnisse: array [1..5] of cardinal; |
und
Delphi-Quelltext
Alles weitere erfährst Du im wunderbaren Delphi-Crashkurs in den entsprechenden Kapiteln.
Viel Spaß,
lincore
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 07.01.09 14:39
Am besten zählst du einfach in einem Array die Anzahlen der geworfenen Werte.
Das ist sehr einfach, weil du einfach nur den Inhalt im Array an der Stelle des geworfenen Wertes hochzählen musst.
Bei deinem Beispiel 1 3 5 1 1 sähe dann das Array so aus:
3, 0, 1, 0, 1, 0
Also 3 Einsen, was sich dann direkt ablesen lässt, genauso wie andere Kombinationen. 
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 07.01.09 15:01
HI,
lincore hat folgendes geschrieben : | Delphi-Quelltext |
Wieso von 1 - 6? das Array hat doch nur 5 Elemente!
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 07.01.09 15:06
Das war mir auch aufgefallen, aber da das ja nur Beispiele sein sollten hatte ich nix dazu gesagt.
Mir fällt gerade auch eine sehr schnelle Lösung zum Finden von Kombinationen nach meiner Vorgehensweise. Aber erstmal warten, was Donn!e DarKo dazu sagt bevor ich das genauer aufschreibe.
Außerdem kommt das ja ohnehin erst nach dem Würfeln. 
|
|
lincore
Hält's aus hier
Beiträge: 15
Kubuntu 8.04, Debian lenny, Windows XP, Windows Vista
Delphi 2009, C++, Python, Lua
|
Verfasst: Mi 07.01.09 15:33
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 07.01.09 16:30
lincore hat folgendes geschrieben : | Edit: Ach, bei dem Spiel zählen nur Einserpasche? Okay, dann nehme ich alles zurück und behaupte das Gegenteil  |
Nein, nicht nur, auch bestimmte Muster.
Deshalb habe ich hier mal eine Lösung, bei der man schnell nach Mustern suchen kann. Diese Lösung kann ich ruhig posten, denn als Hausaufgabe abgegeben ist eh klar, dass das nicht selbst gemacht ist.  1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| procedure TForm123.btnStartClick(Sender: TObject);
procedure IncNumber(var Value: Integer; Number: Integer); var Mask, Shift: Integer; begin Shift := 4 * (Number - 1); Mask := $F shl Shift; Value := Value and not Mask or (Value and Mask + 1 shl Shift); end;
function GetPoints(Value: Integer): Integer; begin case Value of $00111111: ShowMessage('6er Straße'); $00011111: ShowMessage('5er Straße'); $00000005: ShowMessage('5er Pasch 1'); $00000006: ShowMessage('5er Pasch 1'); else ShowMessage('Nix'); end;
case Value of $00111111: Result := 10000; $00011111: Result := 5000; $00000005: Result := 1000; $00000006: Result := 600; else Result := 0; end; end;
var Numbers: Integer; i: Integer; begin Numbers := 0; for i := 1 to 6 do IncNumber(Numbers, Random(6) + 1); ShowMessage(IntToStr(GetPoints(Numbers))); end; | Und wie gesagt: die einfache Lösung ist ein Array, in dem (genau wie hier als Bitmuster) die Anzahl der Würfe für 1 bis 6 gespeichert werden.
// EDIT:
Kleiner Fehler korrigiert. 
Zuletzt bearbeitet von jaenicke am Mi 07.01.09 18:22, insgesamt 3-mal bearbeitet
|
|
Donn!e DarKo 
      
Beiträge: 20
Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
|
Verfasst: Mi 07.01.09 17:22
Hey,
Vielen Dank für die viele Antworten (:
Ich werde mich heute abend gleich mal hinsetzen und das ganze ausprobieren.
Mal schauen obs klappt (: Aber übungs macht ja bekanntlich den meister
Gruß
DarKo
|
|
Donn!e DarKo 
      
Beiträge: 20
Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
|
Verfasst: Mi 07.01.09 19:46
Hallo,
Nun nachdem ich das jetzt mal versucht habe und leider gescheitert bin, meld ich mich nochmal zurück ^^ Und ich bin ganz errlich ... ich versteh es nicht ganz
Würd es aber gerne und frage deshalb ob jemand vielleicht nen kleines beispiel programm mit dem For hat was er posten kann.
Den das was Jeanicke gepostet hat ist ja nochmal nen ganze stück komplexer, wenn ich das richtig sehe ^^
Ich blick da leider nur nicht ganz durch, das ist mein Problem.
Also nen kleines Programm mit dem For wäre ganz nett, das könnte ich dann versuchen mal umzusetzen um das zu verstehen ...
Vielen Dank
Gruß
DarKo
Moderiert von Narses: überflüssige Umbrüche entfernt
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 07.01.09 20:31
Donn!e DarKo hat folgendes geschrieben : | Nun nachdem ich das jetzt mal versucht habe und leider gescheitert bin, meld ich mich nochmal zurück ^^
Und ich bin ganz errlich ... ich versteh es nicht ganz  |
Ja, was hast du denn bisher?
Donn!e DarKo hat folgendes geschrieben : | | Den das was Jeanicke gepostet hat ist ja nochmal nen ganze stück komplexer, wenn ich das richtig sehe ^^ |
Die Umsetzung teilweise ja, die Idee dahinter eigentlich ist im Gegenteil einfacher.  jaenicke hat folgendes geschrieben : | Am besten zählst du einfach in einem Array die Anzahlen der geworfenen Werte.
Das ist sehr einfach, weil du einfach nur den Inhalt im Array an der Stelle des geworfenen Wertes hochzählen musst.
Bei deinem Beispiel 1 3 5 1 1 sähe dann das Array so aus:
3, 0, 1, 0, 1, 0
Also 3 Einsen, was sich dann direkt ablesen lässt, genauso wie andere Kombinationen.  |
Du nimmst also ein Array mit 6 Werten und zählst darin wie oft einer dieser Werte gewürfelt wurde.
Danach kannst du dann direkt ablesen wie oft welche Zahl gewürfelt wurde.
|
|
Donn!e DarKo 
      
Beiträge: 20
Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
|
Verfasst: Do 08.01.09 00:24
Hallo,
na ja aller anfang is schwer und ich habe mit diesen Array noch nicht gearbeitet, das ist wohl das Problem.
Das hier hab ich bissher programmiert, unzwar das er mir die checkboxen abfragt und nicht mehr weiter würfelt wo die Würfel stehen. Den rest bekomm ich nicht hin  Das is echt irgendwie kompliziert xD
Bei proggn ist es ja so, das es solange kompliziert ist bis man es versteht
Die while schleife bau ich später noch ein wegen des zählens der Würfel versuche ... !
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; ListBox1: TListBox; Label3: TLabel; CheckBox3: TCheckBox; Label4: TLabel; CheckBox4: TCheckBox; Label5: TLabel; CheckBox5: TCheckBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; localwuerfel1 : integer; localwuerfel2 : integer; localwuerfel3 : integer; localwuerfel4 : integer; localwuerfel5 : integer; ergebnis1 : integer ;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); var
wuerfel1 : integer; wuerfel2 : integer; wuerfel3 : integer; wuerfel4 : integer; wuerfel5 : integer;
begin
if checkbox1.checked then begin label1.caption := inttostr(localwuerfel1); end else begin wuerfel1 := random (6); wuerfel1 := wuerfel1 + 1; label1.caption := inttostr(wuerfel1); localwuerfel1 := wuerfel1; end;
if checkbox2.checked then begin label2.caption := inttostr(localwuerfel2); end else begin wuerfel2 := random (6); wuerfel2 := wuerfel2 + 1; label2.Caption := inttostr(wuerfel2); localwuerfel2 := wuerfel2; end;
if checkbox3.checked then begin label3.caption := inttostr(localwuerfel3); end else begin wuerfel3 := random (6); wuerfel3 := wuerfel3 + 1; label3.caption := inttostr(wuerfel3); localwuerfel3 := wuerfel3; end;
if checkbox4.checked then begin label4.caption := inttostr(localwuerfel4); end else begin wuerfel4 := random (6); wuerfel4 := wuerfel4 + 1; label4.caption := inttostr(wuerfel4); localwuerfel4 := wuerfel4; end;
if checkbox5.checked then begin label5.caption := inttostr(localwuerfel5); end else begin wuerfel5 := random(6); wuerfel5 := wuerfel5 + 1; label5.caption := inttostr(wuerfel5); localwuerfel5 := wuerfel5; end;
end;
procedure TForm1.Button2Click(Sender: TObject); |
|
|
Donn!e DarKo 
      
Beiträge: 20
Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
|
Verfasst: Do 15.01.09 17:21
Huhu,
Nachdem ich mir alles nochmal Mündlich erklären lassen habe mit ein bissle zeigen usw.
habe ich das nun auch verstanden und mein Programm ist um Satte 900 Zeilen gewachsen und
Funktioniert auch schön
Danke nochmals an alle für das bemühen der Hilfe, es lag wohl eher an meinem Wissensmangel ...
das es nicht klappte
Gruß
DD
|
|
|