16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"カードゲーム用ランダムシャッフル"
この発言に対し以下のコメントが寄せられています
#00279 T. Kawanishi さん Re:カードゲーム用ランダムシャッフル
◆説明◆
StringGrid のセルに、ランダムに52枚のカードを描きます。
◆注意◆
StringGrid の、ColCount を9、RowCount を8として御試用してみて下さ
い。
◆サンプルコード◆
procedure TForm1.Button1Click(Sender: TObject);
var
StrNum, StrMrk: String;
MOK, NOK: Boolean;
Num, Mrk, RC, CC, All,
Spd, Dia, Hrt, Crb,
CdA, Cd2, Cd3, Cd4, Cd5, Cd6, Cd7, Cd8, Cd9, Cd10,
CdJ, CdQ, CdK: Integer;
begin
Randomize;
All := 0;
Num := 0; Mrk := 0;
Spd := 0; Dia := 0; Hrt := 0; Crb := 0;
CdA := 0; Cd2 := 0; Cd3 := 0; Cd4 := 0; Cd5 := 0;
Cd6 := 0; Cd7 := 0; Cd8 := 0; Cd9 := 0; Cd10 := 0;
CdJ := 0; CdQ := 0; CdK := 0;
for RC := 1 to 8 do
begin
for CC := 1 to 8 do
begin
MOK := False;
NOK := False;
inc(All);
if All >= 53 then Break;
while MOK = False do
begin
Mrk := Random(4);
case Mrk of
0: if Spd < 13 then
begin
inc(Spd);
StrMrk := '●';
MOK := True;
end;
1: if Dia < 13 then
begin
inc(Dia);
StrMrk := '◇';
MOK := True;
end;
2: if Hrt < 13 then
begin
inc(Hrt);
StrMrk := '○';
MOK := True;
end;
3: if Crb < 13 then
begin
inc(Crb);
StrMrk := '★';
MOK := True;
end;
end;
end;
while NOK = False do
begin
Num := Random(13) + 1;
case Num of
1: if CdA < 4 then
begin
inc(CdA);
NOK := True;
end;
2: if Cd2 < 4 then
begin
inc(Cd2);
NOK := True;
end;
3: if Cd3 < 4 then
begin
inc(Cd3);
NOK := True;
end;
4: if Cd4 < 4 then
begin
inc(Cd4);
NOK := True;
end;
5: if Cd5 < 4 then
begin
inc(Cd5);
NOK := True;
end;
6: if Cd6 < 4 then
begin
inc(Cd6);
NOK := True;
end;
7: if Cd7 < 4 then
begin
inc(Cd7);
NOK := True;
end;
8: if Cd8 < 4 then
begin
inc(Cd8);
NOK := True;
end;
9: if Cd9 < 4 then
begin
inc(Cd9);
NOK := True;
end;
10: if Cd10 < 4 then
begin
inc(Cd10);
NOK := True;
end;
11: if CdJ < 4 then
begin
inc(CdJ);
NOK := True;
end;
12: if CdQ < 4 then
begin
inc(CdQ);
NOK := True;
end;
13: if CdK < 4 then
begin
inc(CdK);
NOK := True;
end;
end;
if Num = 1 then StrNum := 'A' else
if Num = 11 then StrNum := 'J' else
if Num = 12 then StrNum := 'Q' else
if Num = 13 then StrNum := 'K' else
StrNum := IntToStr(Num);
StringGrid1.Cells[CC,RC] := StrMrk + StrNum;
end;
end;
end;
end;
J-OH!(VEC05267)
Original document by J-OH! 氏 ID:(VEC05267)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|