Autor Beitrag
September
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 07.02.05 19:38 
Hallo,
nun, da auch der Zeilenumsprung im Memofeld funktioniert (danke AXMD), habe ich noch ein kleines Problem in meinem Programm, dessen Lösung ich mich aber auch nicht wüsste anzunähern.

Kurz die Aufgabenstellung:
- es wird das Geben von Karten beim Skatspiel simuliert
- gespielt wird mit 3 Spielern
- das Geben wird wie folgt realisiert : jeder Spieler bekommt zuerst 3 Karten hintereinander, dann werden zwei Karten auf das Skat gelegt, jeder Spieler bekommt weitere 4 Karten und danach noch einmal 3 Karten
- à jeder Spieler hat also 10 Karten und 2 auf dem Skat macht 32 Karten (1 Deck)

wie wird das ganze realisiert?
- zwei-dimensionales Feld wird mit Skat belegt
- Feld abfragen und im entsprechenden Memo Fenster ausgeben


Die Oberfläche des Formulars sieht wie folgt aus :
- 4 Memofenster in denen die Karten der Spieler + die 2 Karten Skat ausgegeben werden und 1 Startbutton (die anderen Button sind unwesentlich)

Mein Problem ist konkret, dass ich für alle 3 Spieler und den Skat jeweils das Gleiche schreiben muss (siehe ab wahl=1 unter dem längeren blauen Kommentar), nur die Memofeldzahl muss geändert werden.


Der Quelltext (die wichtigsten Teile)
Entschuldigt, dass ich ihn nicht in die code-Zeichen gesetzt habe, aber da ging die Farbigkeit der Kommentare nicht mehr. Ich hoffe der Quelltext ist annähernd übersichtlich (es ist nicht nötig den ganze zu lesen, ich habe versucht ihn möglichst knapp zu halten).
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:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:

type    tfarbe=(kreuz,pik,herz,karo); //Ein Array für die Farben der Karten
        twert=(sieben,acht,neun,zehn,bube,dame,koenig,ass); //Ein Array für die Werte der Karten
        tskat=array[1..4,1..8of integer; //Eine Karte besteht aus einer Farbe und einem Wert. Dieses Array ist Platzhalter um zu überprüfen, dass keine Karte zwei mal vorkommt


procedure TForm1.BitBtn1Click(Sender: TObject);
var     farbe:tfarbe;
        wert:twert;
        skat:tskat;
        i,j,x,y,a,wahl:integer;
begin
randomize; //Zufallsgenerator gestartet
for i:=1 to 4 do 
        for j:=1 to 8 do skat[i,j]:=0//Das Platzhalter Array wird komplett auf 0 gesetzt

i:=0//Zahlvariable 0 gesetzt

repeat

farbe:=tfarbe(random(4)); //Farbe der Karte wird aus Tfarbe ermittelt
wert:=twert(random(8)); //Wert der Karte wird aus Tfarbe ermittelt
case farbe of

        kreuz : x:=1;
        pik : x:=2;
        herz : x:=3;
        karo : x:=4;
        end;
case wert of
        sieben : y:=1;
        acht : y:=2;
        neun : y:=3;
        zehn : y:=4;
        bube : y:=5;
        dame : y:=6;
        koenig : y:=7;
        ass : y:=8;
        end;
a:=i+1;
wahl:=0;
case a of //Es wird der Spieler ermittelt, der später einmal die Karte bekommen soll
1,2,3,12,13,14,15,24,25,26 : wahl:=1//Spieler 1 bekommt Karte 1,2,3 usw.
4,5,6,16,17,18,19,27,28,29 : wahl:=2//Spieler 2 bekommt Karte 4,5,6 usw.
7,8,9,20,21,22,23,30,31,32 : wahl:=3;
10,11 : wahl:=4//Diese zwei Karten kommen auf den Skat
end;

//Jetzt kommt mein Problem, ich muss jetzt für alle 3 Spieler und den Skat das Gleiche schreiben (siehe wahl=2, wahl=3, wahl=4). Das sieht nicht nur ungekonnt aus, sondern ist total unübersichtlich. 
Kann man das irgendwie anders machen?
Es wird jeweils die zugehörige Karte ermittelt und im Memofeld ausgegeben.

if wahl=1 then
begin
if skat[x,y]=0 then
        begin
        case farbe of

                kreuz : memo1.text:=memo1.text+'Kreuz';
                pik : memo1.text:=memo1.text+'Pik';
                herz : memo1.text:=memo1.text+'Herz';
                karo : memo1.text:=memo1.text+'Karo';
                end;
        case wert of
                sieben : memo1.text:=memo1.text+' Sieben'+#13#10;
                acht : memo1.text:=memo1.text+' Acht'+#13#10;
                neun : memo1.text:=memo1.text+' Neun'+#13#10;
                zehn : memo1.text:=memo1.text+' Zehn'+#13#10;
                bube : memo1.text:=memo1.text+' Bube'+#13#10;
                dame : memo1.text:=memo1.text+' Dame'+#13#10;
                koenig : memo1.text:=memo1.text+' König'+#13#10;
                ass : memo1.text:=memo1.text+' As'+#13#10;
                end;
        skat[x,y]:=1;
        i:=i+1;
        end;
end;

if wahl=2 then
begin
if skat[x,y]=0 then
        begin
        case farbe of

                kreuz : memo2.text:=memo2.text+'Kreuz';
                pik : memo2.text:=memo2.text+'Pik';
                herz : memo2.text:=memo2.text+'Herz';
                karo : memo2.text:=memo2.text+'Karo';
                end;
        case wert of
                sieben : memo2.text:=memo2.text+' Sieben' +#13#10;
                acht : memo2.text:=memo2.text+' Acht'+#13#10;
                neun : memo2.text:=memo2.text+' Neun'+#13#10;
                zehn : memo2.text:=memo2.text+' Zehn'+#13#10;
                bube : memo2.text:=memo2.text+' Bube'+#13#10;
                dame : memo2.text:=memo2.text+' Dame'+#13#10;
                koenig : memo2.text:=memo2.text+' König'+#13#10;
                ass : memo2.text:=memo2.text+' As'+#13#10;
                end;
        skat[x,y]:=1;
        i:=i+1;
        end;
end;


if wahl=3 then
begin
if skat[x,y]=0 then
        begin
        case farbe of

                kreuz : memo3.text:=memo3.text+'Kreuz';
                pik : memo3.text:=memo3.text+'Pik';
                herz : memo3.text:=memo3.text+'Herz';
                karo : memo3.text:=memo3.text+'Karo';
                end;
        case wert of
                sieben : memo3.text:=memo3.text+' Sieben'+#13#10;
                acht : memo3.text:=memo3.text+' Acht'+#13#10;
                neun : memo3.text:=memo3.text+' Neun'+#13#10;
                zehn : memo3.text:=memo3.text+' Zehn'+#13#10;
                bube : memo3.text:=memo3.text+' Bube'+#13#10;
                dame : memo3.text:=memo3.text+' Dame'+#13#10;
                koenig : memo3.text:=memo3.text+' König'+#13#10;
                ass : memo3.text:=memo3.text+' As'+#13#10;
                end;
        skat[x,y]:=1;
        i:=i+1;
        end;
end;
if wahl=4 then
begin
if skat[x,y]=0 then
        begin
        case farbe of

                kreuz : memo4.text:=memo4.text+'Kreuz';
                pik : memo4.text:=memo4.text+'Pik';
                herz : memo4.text:=memo4.text+'Herz';
                karo : memo4.text:=memo4.text+'Karo';
                end;
        case wert of
                sieben : memo4.text:=memo4.text+' Sieben'+#13#10;
                acht : memo4.text:=memo4.text+' Acht'+#13#10;
                neun : memo4.text:=memo4.text+' Neun'+#13#10;
                zehn : memo4.text:=memo4.text+' Zehn'+#13#10;
                bube : memo4.text:=memo4.text+' Bube'+#13#10;
                dame : memo4.text:=memo4.text+' Dame'+#13#10;
                koenig : memo4.text:=memo4.text+' König'+#13#10;
                ass : memo4.text:=memo4.text+' As'+#13#10;
                end;
        skat[x,y]:=1;
        i:=i+1//Zählvariable um eins erhöht
        end;
end;

until i=32;

end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt, Color-Tags entfernt.
September Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 07.02.05 20:47 
Achso, noch kurz :
Dass ich das ganze 3 mal schreibe, ließe sich bei php doch einfach mit ner Variable lösen, die ich dann entsprechend an das memo dranhänge :

also wenn ich feld 1 bräuche dann

$i = 1
memo$i entspräche dann memo1
Gibt es sowas bei Delphi auch?
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.02.05 21:25 
Hab mir jetzt deinen Code nicht weiter angeschaut, aber deinem letzten Post nach zu urteilen, wäre ein Array of Strings nicht schlecht.
Wenn du dich jetzt nicht mit Arrays beschäftigen möchtest, kann auch eine Suche nach Suche in: Delphi-Forum, Delphi-Library FINDCOMPONENT nicht schaden.
September Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mo 07.02.05 23:44 
Auch mein Code enthält Arrays, also habe ich auch kein Prob mich da etwas reinzuvertiefen. Ich werd mal schaun. Danke erstmal.
Wieviel es bringt kann ich leider erst morgen feststellen.

Danke :).
September Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Di 08.02.05 12:39 
Skat - Karten geben

Hier kann man sich das Programm ansehen, falls das zum Verständnis helfen sollte.
(Ich hoffe, das ist erlaubt)

Liebe Grüße,
September