it编程 > 编程语言 > Delphi

Delphi 实现刘谦春晚魔术

186人参与 2024-05-12 Delphi

看了博友的c# 实现刘谦春晚魔术很好,改成了delphi版的。 

  1 program project1;
  2 
  3 {$apptype console}
  4 {$r *.res}
  5 
  6 uses
  7   system.sysutils,
  8   system.classes;
  9 
 10 var
 11   list, removeelement: tstringlist;
 12   i, namecount, insertindex, directcount, sexcount: integer;
 13   tmp, element, hiddenele1, hiddenele2: string;
 14 
 15 procedure fun1(namecount: integer);
 16 begin
 17   if namecount < list.count then
 18   begin
 19     for i := 0 to namecount - 1 do
 20     begin
 21       element := list[0]; // 获取第0个元素
 22       list.delete(0); // 移除第0个元素
 23       list.add(element); // 将第0个元素添加到最后
 24     end;
 25 
 26   end;
 27 end;
 28 
 29 procedure fun2(forcount: integer);
 30 begin
 31   // 被删除掉的三张牌
 32   removeelement := tstringlist.create;
 33   for i := 0 to forcount - 1 do
 34   begin
 35     removeelement.add(list[0]);
 36     list.delete(0);
 37   end;
 38   writeln(format('被删除掉的%d张牌:%s', [forcount, removeelement.commatext]));
 39   writeln('删除之后:' + list.commatext);
 40 
 41   // 把拿到的三张牌插到中间
 42   randomize;
 43   insertindex := random(list.count - 1) + 1; // 生成一个介于第一个和倒数第二个位置之间的随机插入位置
 44   writeln('插入位置:' + insertindex.tostring);
 45   for i := removeelement.count - 1 downto 0 do
 46   begin
 47     list.insert(insertindex, removeelement[i]);
 48   end;
 49 
 50 end;
 51 
 52 procedure fun3();
 53 begin
 54   // 藏起来第一张牌
 55   hiddenele1 := list.strings[0];
 56   list.delete(0);
 57 end;
 58 
 59 procedure fun4(count: integer);
 60 begin
 61   for i := 0 to count - 1 do
 62   begin
 63     list.delete(0);
 64   end
 65 end;
 66 
 67 procedure fun5();
 68 begin
 69   for i := 0 to 6 do
 70   begin
 71     element := list[0];
 72     list.delete(0);
 73     list.add(element);
 74   end;
 75 end;
 76 
 77 function fun6(sexcount: integer): string;
 78 var
 79   forcount: integer;
 80 begin
 81   forcount := 0;
 82   if sexcount = 1 then
 83     forcount := 5 // 男生要5次
 84   else
 85     forcount := 4;
 86   for i := 0 to forcount - 1 do
 87   begin
 88     // 把第一张牌放到数组最后面 (好运留下来)
 89     element := list[0];
 90     list.delete(0);
 91     list.add(element);
 92 
 93     // 烦恼丢出去
 94     list.delete(0);
 95   end;
 96   result := list[0];
 97 end;
 98 
 99 begin
100   try
101     try
102       list := tstringlist.create;
103       list.commatext := 'a,b,c,d,a,b,c,d';
104       writeln('初始牌组:' + list.commatext);
105       writeln('请输入你的名字有几个字:');
106       readln(tmp);
107       namecount := tmp.tointeger;
108 
109       fun1(namecount);
110       writeln('变化之后:' + list.commatext);
111 
112       fun2(3);
113       writeln('插入三张牌后:' + list.commatext);
114       fun3();
115       writeln('藏起来第一张牌后:' + list.commatext);
116 
117       writeln('北方-1 南方-2 不南不北-3,请输入对应数字:');
118       readln(tmp);
119       directcount := tmp.tointeger;
120       fun2(directcount);
121       writeln('南北方人后:' + list.commatext);
122 
123       writeln('男-1 女-2,请输入对应数字:');
124       readln(tmp);
125       sexcount := tmp.tointeger;
126       fun4(sexcount);
127       writeln('男女生后:' + list.commatext);
128 
129       fun5();
130 
131       writeln('见证奇迹后:' + list.commatext);
132 
133       writeln('开始好运留下了 烦恼丢出去');
134       hiddenele2 := fun6(sexcount);
135       writeln(format('牌1:%s  牌2:%s', [hiddenele1, hiddenele2]));
136 
137       readln;
138     except
139       on e: exception do
140         writeln(e.classname, ': ', e.message);
141     end;
142 
143   finally
144     removeelement.free;
145     list.free;
146 
147   end;
148 
149 end.

 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

mORMot2 生成和解析 JSON

05-12

delphi redisclient测试

05-12

mORMot2 获取数据集1

05-12

mormot2 笔记(二) Http服务的简单搭建

05-12

mORMot 1.18 第07章 简单的读写操作

05-12

mORMot 1.18 第06章 概念

05-12

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论