Autor Beitrag
Donn!e DarKo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
BeitragVerfasst: 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 user profile iconNarses: 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
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
var WuerfelErgebnisse: array [1..5of cardinal;					

und
ausblenden Delphi-Quelltext
1:
for i := 1 to 6 do					


Alles weitere erfährst Du im wunderbaren Delphi-Crashkurs in den entsprechenden Kapiteln.

Viel Spaß,
lincore
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Mi 07.01.09 15:01 
HI,

user profile iconlincore hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
for i := 1 to 6 do					

Wieso von 1 - 6? das Array hat doch nur 5 Elemente!

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 user profile iconDonn!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
BeitragVerfasst: Mi 07.01.09 15:33 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
HI,
user profile iconlincore hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
for i := 1 to 6 do					

Wieso von 1 - 6? das Array hat doch nur 5 Elemente!
MfG Bergmann.

Manchmal sind zwei for-Schleifen besser als eine... ;)

Edit: Ach, bei dem Spiel zählen nur Einserpasche? Okay, dann nehme ich alles zurück und behaupte das Gegenteil :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 16:30 
user profile iconlincore hat folgendes geschrieben Zum zitierten Posting springen:
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. :D
ausblenden volle Höhe Delphi-Quelltext
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 // Restliche Zahlen
      or (Value and Mask + 1 shl Shift);
  end;

  function GetPoints(Value: Integer): Integer;
  begin
    // Auswertung zur Testanzeige, kann dann auch entfernt werden ;-)
    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;

    // Reale Auswertung
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
BeitragVerfasst: 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 :-D

Gruß

DarKo
Donn!e DarKo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
BeitragVerfasst: 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 user profile iconNarses: überflüssige Umbrüche entfernt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 20:31 
user profile iconDonn!e DarKo hat folgendes geschrieben Zum zitierten Posting springen:
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?

user profile iconDonn!e DarKo hat folgendes geschrieben Zum zitierten Posting springen:
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. ;-)
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
BeitragVerfasst: 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 ... !
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20

Ubuntu 9.10, Ubuntu 8.04 LTS ( Server Edition )
Delphi
BeitragVerfasst: 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