也做了个DNA链动画,创意来自论坛的一个贴

也做了个DNA链动画,创意来自论坛的一个贴

最近开始学习perl,正处在入迷阶段,总想用Perl实现一些有意思的东东.

如果大家有类似的创意也一起来共享吧

如果在unix环境用print "\e$yy;$xxH";来定位打印结果,动画效果应该更加逼真,
不过家里的windows环境调的,不支持这种定位打印.

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

@xx=(@t=(1,2,3,5,8,11,13,14,15),reverse @t);
@bb=(1,i,n,W,N,o,1,i);

while(1) {
        select(undef,undef,undef,0.1);
        @xx=(pop@xx,@xx);
       
        foreach(1..25) {

                @xs=map{$xx[$_%$#xx]+10}($_,$_+4,$_+8);
                @bs=map{$bb[$_%$#bb]}($_,$_+3,$_+6);
                @bs=map{$_->[1]}sort{$a->[0]<=>$b->[0]}map{[$xs[$_],$bs[$_]]}(0..$#bs);
                @xs=sort@xs;

                print " "x$xs[0],$bs[0]," "x($xs[1]-$xs[0]-1),$bs[1]," "x($xs[2]-$xs[1]-1),$bs[2],"\n";
        }
}

有没有注释?
呵呵   运行了一下     还蛮还好玩的...
玩也玩了,就是..................不是很理解.
望加以注释!
感谢LZ!


[Copy to clipboard] [ - ]
CODE:
感谢回帖
努力注释了一遍,发现感觉偶注释能力很差:em08:

#!/usr/bin/perl

@xx=(@t=(1,2,3,5,8,11,13,14,15),reverse @t); #相当正弦波一个周期的X座标
@bb=(1,i,n,W,N,o,1,i);     #打印的字母,可以随意设定,用来画正弦波

while(1) {
        select(undef,undef,undef,0.1); #每0.1秒打印一次,打印一次相当于一帧
        @xx=(pop@xx,@xx);       #对数组的元素进行移位,@xx里面的元素相当于每行的X座标
                    #所以对它移位,可以实现动画效果
       
        foreach(1..25) {    #每帧打印25行

                @xs=map{$xx[$_%$#xx]+10}($_,$_+4,$_+8);  # @xs里面3个元素分别为三条链 第$_行的X座标
                                    # 从@xx里面取
               
                @bs=map{$bb[$_%$#bb]}($_,$_+3,$_+6);  # @bs里面3个元素分别为三条链 第$_行的打印字母
                                    # 从@bb=(1,i,n,W,N,o,1,i)里面取
               
                @bs=map{$_->[1]}sort{$a->[0]<=>$b->[0]}map{[$xs[$_],$bs[$_]]}(0..$#bs);
                                    # 对每行的3个打印字母进行排序以便顺序打印
               
                @xs=sort@xs;

                # 下面这句是用滚屏的方式打印的,导致动画效果不是很好,
           # 如果在Unix环境可以加上这句,定位Y座标进行打印,效果就会好很多了: print "\e[$_;1H"; 
                print " "x$xs[0],$bs[0]," "x($xs[1]-$xs[0]-1),$bs[1]," "x($xs[2]-$xs[1]-1),$bs[2],"\n";
        }
}

不错 初学就能这样 太让自己汗颜了
关键是print,没钻得那么深!也不用写能那么。。。,如果是写cgi,就不会这样子了!