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

1 programProject1;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 procedureFun1(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 procedureFun2(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 procedureFun3();53 begin
54   //藏起来第一张牌
55   hiddenEle1 := list.Strings[0];56   list.Delete(0);57 end;58 
59 procedureFun4(Count: Integer);60 begin
61   for i := 0 to Count - 1 do
62   begin
63     list.Delete(0);64   end
65 end;66 
67 procedureFun5();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);666666 
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.

标签: none

添加新评论