******关于排序的算法,如何让动态生成Panel乱排?有点类似以前玩的拼图游戏似的,把一个正常的图打乱 *****

walkmangood 2006-04-18 09:27:49
动态生成N(N不确定)个PANEL,每行5个,panel上是一篇文章,正常顺序是这样显示的,文章按panel的顺序是可以连贯的读下去的:
panel1 panel2 panel3 panel4 panel5
panel6 panel7 panel8 panel9 panel11
........
现在我的客户要求乱排:
panel13 panel1 panel42 panel62 (随便举个例子)

要求,任何一个PANEL,在这个PANEL左右,上下排列的序数都豪无关联,就向一篇文章写在PANEL上,然后打乱,有点类似以前玩的拼图游戏似的,把一个正常的图打乱

大家给看看,写个算法什么的,谢谢
...全文
178 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkmangood 2006-04-19
  • 打赏
  • 举报
回复
结帖!
walkmangood 2006-04-19
  • 打赏
  • 举报
回复
谢谢:liangqingzhi(老之)!
老之 2006-04-19
  • 打赏
  • 举报
回复
噢,上面的代码有一句错了,m:=Random(N+1);应该是m:=Random(N)+1;就不会有0了
walkmangood 2006-04-19
  • 打赏
  • 举报
回复
N的问题解决了。怎么排除M是0的,我不想要0的,因为有0数据就不连贯了
老之 2006-04-18
  • 打赏
  • 举报
回复
N不确定?是指生成Panel的个数也不确定?那样的话N也用Random来生成了。
walkmangood 2006-04-18
  • 打赏
  • 举报
回复
谢谢:liangqingzhi(老之) ,好样的!感谢!

有一问题就是N是不确定的,不是常量,如何修改?
老之 2006-04-18
  • 打赏
  • 举报
回复
用Random函数随机生成编号
const N=40;
var a:array[0..N+1]of boolean;
i,m:integer;
MyPanel:TPanel;
begin
Randomize;
for i:=1 to N do a[i]:=False;
i:=0;
repeat
i:=i+1;
m:=Random(N+1);
while a[m] do m:=Random(N)+1;
a[m]:=true;
MyPanel:=TPanel.Create(self);
MyPanel.Parent:=Form1;
MyPanel.Width:=40;
MyPanel.Left:=40*i;
MyPanel.Caption:=Format('Panel%d',[m]);
MyPanel.Show;
until i>=N;
end;
自己再控制一下Left和Top
walkmangood 2006-04-18
  • 打赏
  • 举报
回复
最好一生成就是乱的

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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