7 my $min_cave_height = 0;
8 my $max_cave_height = 30;
9 my $max_screen_height = $ENV{COLUMNS
} - 15;
10 my $cave_change_rate = .2;
20 my $cave_height = int rand $max_cave_height;
23 $tunnel[0] = int rand $max_screen_height-1;
26 (log(($time+200)/200));
33 $repeat = 0 if $repeat * $velocity < 0;
34 $repeat += $velocity/1000;
36 my $dir = $key ?
-1: 1;
38 (rand() < abs($velocity/skill()/3) and $velocity * $dir < 0)
39 || (rand() < abs($repeat * skill
()) and $repeat * $dir < 0);
41 $max_cave_height = 10+30/(1+skill
());
42 $min_cave_height = $max_cave_height/skill
();
44 $cave_change != $cave_change if
45 (rand() > $cave_change_rate/skill
());
47 $cave_change != $cave_change,
48 $cave_height = $min_cave_height
49 if $cave_height < $min_cave_height;
51 $cave_change != $cave_change,
52 $cave_height = $max_cave_height
53 if $cave_height > $max_cave_height;
55 $cave_height += rand()>.5?
-1:1 if $cave_change;
60 $_ = $max_screen_height if $_ < 0;
61 $_ = 0 if $_ > $max_screen_height;
67 $velocity += ($key?
1:-1)*$accel;
68 $tunnel[$time-1]+= $velocity;
72 sprintf ("%6.3f ",skill
);
76 my $ceil = $max_screen_height-$tunnel[$time]-1-$cave_height;
77 '#'x
$tunnel[$time] , ' 'x
$cave_height , ($ceil > 0 ?
'#'x
$ceil : '');
80 for ($time = 1; $time <= $max_time; $time++) {
81 $tunnel[$time] = bound
(next_height
());
83 use Time
::HiRes qw
/sleep/;