再求扑克发牌的代码或算法

Gide 2004-01-09 08:27:32
gide@jxfw.com
...全文
279 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangbx220 2004-08-25
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
i,n,x:byte;
Num,tmp:array[1..54]of byte;
begin
for i:=low(tmp) to high(tmp) do
tmp[i]:=i;
Randomize;
i:=54;
n:=0;
Memo1.Text :='';
while i>1 do
begin
x:= Random(i);
if tmp[x]>0 then
begin
inc(n);
Num[n]:=tmp[x];
tmp[x]:=tmp[i];//把最后一位放到当前位置
tmp[i]:=0;
dec(i);
Memo1.Lines.Add(format('%d %d',[n,Num[n]]));
if i=1 then
begin
inc(n);
Num[n]:=tmp[i];
Memo1.Lines.Add(format('%d %d',[n,Num[n]]));
end;
end;
end;
Memo1.Lines.Add('搞定');
end;
ujjcel 2004-08-22
  • 打赏
  • 举报
回复
关注,up
jiayodo 2004-08-10
  • 打赏
  • 举报
回复
zzjedi(zz)的可以
zxhread 2004-08-07
  • 打赏
  • 举报
回复
本人有大型网络棋牌游戏的delphi代码,不过就五六种游戏介绍请看
http://218.59.159.131/zxh/gamead1.htm
游戏为本人开发,有源代码,不过只收极低的价格。超值。有兴趣可以联系。
本人联系方式 john.zhao@delphi.com;zxhread@163.com
QQ: 79564774
jijl2001 2004-08-07
  • 打赏
  • 举报
回复
delphisprite 2004-07-29
  • 打赏
  • 举报
回复
begin
var
j, tmp, Index: Integer;

for j := 0 to 79 do
begin
// 随机取出一张牌
Index := Random(80);
// 开始交换数据
tmp := Card[j]; // 把当前的牌临时存放,以便交换
// 当前(j)的牌与随机取出的牌(Index)不一样的时候
// 用随机取出的牌与当前的(j)的牌交换
if Card[j] <> Card[Index] then
begin
Card[j] := Card[Index];
Card[Index] := tmp;
end;
end;
end.

此算法可以将原来的数组打乱,就是洗牌。
huayuxing 2004-02-03
  • 打赏
  • 举报
回复
楼上的算法和偶的写的朴克的发牌算法一样,我至少没想到比这更有效的,如有请朋友明示
zzjedi 2004-02-02
  • 打赏
  • 举报
回复
a[0]=0 a[1]=1 .........a[53]=53 标志f=53
在54个数中取随即数
如取5则a[5]和最后一个数a[f]交换

a[0]=0 a[1]=1 .....a[5]=53....a[53]=5 f=52
再在53个数中取随即数(由f控制范围)
.
.
直到f=1
a[0]...a[53]就是随即序列
一共53次

自己想的,不知对不对
SydPink 2004-01-23
  • 打赏
  • 举报
回复
其实问题就是在产生54个随即且不等的数字啊.才54个.随便写个算法就行了.效率不是问题.
delphi023445 2004-01-18
  • 打赏
  • 举报
回复
对不起
因为没找到原码,我另外再写了一遍
有点失误,如果不考虑大小王的话,那么里面的53,59都得改成51
delphi023445 2004-01-17
  • 打赏
  • 举报
回复
procedure TForm1.myarray(sender: TObject);
type
card:record
number:integer;
picture:integer;
end;
var i,t:integer;
a:array[0..59] of card;
b:array[0..53] of card;
begin
for i:0 to 53 do
begin
a[i].number:=(i mod 13)+1;
a[1].picture:=(i div 13)+1;
end;
i:=0;
repeat
t:=random(53);
if not (a[t].number=0) then
begin
i:=i+1;
b[i-1]:=a[t];
a[t].number:=0;
end;
until i=60;
for i:=0 to 53 do
begin
paintmycard(b[i])
end;
end;
sjzabcwsy 2004-01-17
  • 打赏
  • 举报
回复
以前写过一个,可能在上次的机器硬盘故障造成的数据丢失中损失了:(

如果需要,可以提供思路.

重新写我没有时间的.抱歉.
lovefox_zoe 2004-01-13
  • 打赏
  • 举报
回复
我也很想知道。高手跳出来………………
mxk19791116 2004-01-12
  • 打赏
  • 举报
回复
UP

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧