Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: The Matrix Reloaded: JAPH

by blackstarr (Friar)
on Sep 02, 2003 at 06:28 UTC ( #288249=note: print w/replies, xml ) Need Help??

in reply to The Matrix Reloaded: JAPH

Unlike AnonyMonk, I actually like this.

Worked perfectly on my Win2K box with Activestate 5.8.0!

Wonder if anyone could figure out a way for the text to descend the screen, as with the "real" Matrix? Is there a technique someone could point me to, or is it only possible in a graphical client?

So Long

Replies are listed 'Best First'.
Re: Re: The Matrix Reloaded: JAPH
by abell (Chaplain) on Sep 02, 2003 at 09:00 UTC

    A possibility is redrawing the whole screen at each frame. For instance (only tested on linux):

    #!/usr/bin/perl -w # Array containing all lines my @screen = ( ' 'x70 . "\n" ) x 20; # Array of possible (equiprobable) characters my @char = split //, ' *|'; while(1) { print join '', @screen; # Drop last line pop @screen; # Put a new line on top unshift @screen, join ( '', map { $char[ rand(@char) ] } (1..70) ) + . "\n"; # Sleep for 0.1 seconds select(undef, undef, undef, 0.1); }

    Update: The value 20 in the @screen initialization should be at least the terminal height minus 1 (due to the last line being empty). If it's less, then the upper portion of each frame is filled by the last lines of the previous one.



    The stupider the astronaut, the easier it is to win the trip to Vega - A. Tucket

      So, incorporating abell and cfreak's suggestions, you get:

      #!/usr/bin/perl -w @screen = ( ' 'x70 . "\n" ) x 20; $gen_line = sub { my $qw; for(1..70){ if( !$q[$_] && rand > .993 ){ $q[$_] = q$.$ x 5 . q$ $ x 1 . ${ [ qw$tsuJ rehtona lreP rekcaH$ ] }[$qq++] . q$ $ x 1 . q$.$ x 5; $qq = $qq > 3 ? 0: $qq; } if( $q[$_] ){ ( $qx, $q[$_] ) = split//, $q[$_],2; $qw .= $qx; }else{ $qw .= q$ $; } } "\33[0;32m$qw\33[0m"; }; while(1) { print join '', @screen; # Drop last line pop @screen; # Put a new line on top unshift @screen, $gen_line->() . "\n"; # Sleep for 0.1 seconds select(undef, undef, undef, 0.1); }

      Cool, monks! =]

      "Never be afraid to try something new. Remember, amateurs built the ark. Professionals built the Titanic."
      Seems to work nicely under ActiveState Perl 5.8.0 on Windows 2000.

      "Ex libris un peut de tout"

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://288249]
[erix]: I've been to Amsterdam before you were born
[LanX]: 1899?
[chacham]: Just paint the white house black again.
dbander snorts
LanX Gesundheit! :)
talexb wonders about dividing developers in those born before the Unix timestamp of zero .. and after. Spoiler: I'm before.
chacham remebers I am a mad scientist
[stevieb]: talexb I'm after by a few years, but we can still be friends because you live in my hometown ;)

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (12)
As of 2017-08-18 13:24 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (302 votes). Check out past polls.