Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes qw(usleep);
use Term::ReadKey;
$_ = "\33[2J\x33[HD<\n\33[2J\33[H+"."-" x 40 . "+\n|" . (" " x 10 . "x " x
10 . " " x 10 . "|\n|") x 5 . (" " x 40 . "|\n|") x 10 . " " x
19 . "^" . " " x 20 . "|\n+" . ("-" x 40) . "+";
my $i = 0;
while ( 1 ) {
s/^([^\n]+)\n(.*)/$2\n$1/s;
if ( $i == 5 ) {
s/(.*?) x(?=.*?D<)/$1X /sg;
s/(.*?)x (?=.*?D>)/$1 X/sg;
s/(\|X.*)D</$1Dv>/s;
s/(X\|.*)D>/$1Dv</s;
s/(?<=\-.{42})\./ /sg;
s/X(.{42})\./ $1 /sg;
s/X\./ /sg;
s/\.X/ /sg;
s/(?<=X.{42}) (?=.*Dv)/*/sg;
s/X(?=.{42}\*.*Dv)/ /sg;
s/(?<=X.{42}) (?=.*Dv)/*/sg;
s/X(?=.{42}\*.*Dv)/ /sg;
s/(?<=X.{42}) (?=.*Dv)/*/sg;
s/X(?=.{42}\*.*Dv)/ /sg;
s/(?<=X.{42}) (?=.*Dv)/*/sg;
s/X(?=.{42}\*.*Dv)/ /sg;
s/(?<=X.{42}) (?=.*Dv)/*/sg;
s/X(?=.{42}\*.*Dv)/ /sg;
s/\*/X/sg;
s/Dv</D</s;
s/Dv>/D>/s;
s/.*?X[^\n]+\n\| *\^.*/"\33[2J\33[HGame over"/es;
s/X/x/g;
}
s/(.*)\n([^\n]+)$/$2\n$1/s;
s/ (.{42})\./\.$1 /sg;
ReadMode 4;
my $key;
$key = ReadKey(-1);
if ( defined $key ) {
s/ (?=.{42}\^)/./sg if $key eq ' ';
s/\^ / ^/sg if $key eq 'w';
s/ \^/^ /sg if $key eq 'q';
}
ReadMode 0;
print $_,"\n";
s/Game over/exit()/e;
$i = 0 if $i++ == 5;
usleep (20000);
}
Регулярные выражения, пособие для новичков. Часть 2