#!/usr/bin/perl $|=1; use Term::ReadKey; ReadMode 3; ($w, $h) = GetTerminalSize; #get size of the screen $x1 = 0; $y1 = 0; #ball start coordinates $dx = 0.05; $dy = 0.05; #increments to the ball coordinates $x = 0; #start position of the pad while (1) { $key = ReadKey -1; if ($key eq "d") {$x++; $x = $w-10 if $x > $w-10} #moving the pad to the right if ($key eq "a") {$x--; $x = 0 if $x < 0} #moving the pad to the left print "\e[H"; print "\n" x ($h-2); print "\r\e[K"; print " " x $x; print "##########\r\e[H"; #drawing the pad at the bottom of the screen for (0..($h-3)) {print " " x ($w); print "\n"} #cleaning the screen above the pad print "\e[H\n\n\n"; print "\n" x $y1; print " " x $x1; print "O\r"; #drawing the ball $x1 += $dx; #update coordinates of the ball $y1 += $dy; $dx *= -1 if $x1 >= $w-1 || $x1 <= 0; #if the ball hits the left or right wall $dy *= -1 if $y1 <= 0 || ( $y1 >= $h-5 && $x1 > $x && $x1 < $x+10 ); #if the ball hits the top wall or the pad if ($y1 > $h-4) {ReadMode 0; die "\nyou lose!\n"} #if the ball doesn't hit the pad } ReadMode 0;