antoniomac5
2009-11-19 20:30:40 UTC
#!/bin/bash
cleanonexit () {
kill $idpaintscene
echo -en "\e[m"
echo -en "\e[H\e[J"
echo -en "\e[$(( LINES / 2 ));$(( COLUMNS / 2 - 5 ))HGAME OVER!"
sleep 1
echo -en "\e[H\e[J"
echo -en "\e[?25h"
}
trap cleanonexit 0
size=`stty size`
LINES=${size% *}
COLUMNS=${size#* }
idmain=$$
idpaintscene=
paddlelength=4
speed=0.1
#BACKGROUND PROCESS
paintscene () {
trap "paintpaddle up" usr1
trap "paintpaddle down" usr2
paintpaddle () { # $1=up,down
if test $1 == up; then
test $paddley -gt 1 && (( --paddley ))
elif test $1 == down; then
test $(( paddley + paddlelength - 1 )) -lt $LINES && (( +
+paddley ))
fi
echo -en "\e[m\e[$(( paddley - 1 ));1H "
echo -en "\e[47m"
for (( y = paddley; y < paddley + paddlelength; ++y )); do
echo -en "\e[$y;1H "
done
if test $(( paddley + paddlelength - 1 )) -ne $LINES; then
echo -en "\e[m\e[$(( paddley + paddlelength ));1H "
fi
}
paintball () {
echo -en "\e[m\e[$bally;${ballx}H "
(( ballx += directionx ))
(( bally += directiony ))
test $ballx -eq $COLUMNS && (( directionx *= -1 ))
test $ballx -eq 2 -a \
$bally -ge $paddley -a \
$bally -lt $(( paddley + paddlelength )) && (( directionx *= -1 ))
test $ballx -eq 1 && kill $idmain
test $bally -eq $LINES -o $bally -eq 1 && (( directiony *= -1 ))
echo -en "\e[47m\e[$bally;${ballx}H "
}
paddley=$(( LINES / 2 - paddlelength / 2 ))
ballx=$COLUMNS
bally=$(( RANDOM % LINES + 1 ))
directionx=-1
directiony=$(( RANDOM % 2 == 1 ? 1 : -1 ))
paintpaddle nomove
while true; do
paintball
sleep $speed
done
}
echo -en "\e[H\e[J"
echo -en "\e[?25l"
paintscene &
idpaintscene=$!
while true; do
read -sn1
test "$REPLY" == $'\e' || continue
read -sn1
test "$REPLY" == "[" || continue
read -sn1
case "$REPLY" in
A) kill -usr1 $idpaintscene ;;
B) kill -usr2 $idpaintscene ;;
esac
done
cleanonexit () {
kill $idpaintscene
echo -en "\e[m"
echo -en "\e[H\e[J"
echo -en "\e[$(( LINES / 2 ));$(( COLUMNS / 2 - 5 ))HGAME OVER!"
sleep 1
echo -en "\e[H\e[J"
echo -en "\e[?25h"
}
trap cleanonexit 0
size=`stty size`
LINES=${size% *}
COLUMNS=${size#* }
idmain=$$
idpaintscene=
paddlelength=4
speed=0.1
#BACKGROUND PROCESS
paintscene () {
trap "paintpaddle up" usr1
trap "paintpaddle down" usr2
paintpaddle () { # $1=up,down
if test $1 == up; then
test $paddley -gt 1 && (( --paddley ))
elif test $1 == down; then
test $(( paddley + paddlelength - 1 )) -lt $LINES && (( +
+paddley ))
fi
echo -en "\e[m\e[$(( paddley - 1 ));1H "
echo -en "\e[47m"
for (( y = paddley; y < paddley + paddlelength; ++y )); do
echo -en "\e[$y;1H "
done
if test $(( paddley + paddlelength - 1 )) -ne $LINES; then
echo -en "\e[m\e[$(( paddley + paddlelength ));1H "
fi
}
paintball () {
echo -en "\e[m\e[$bally;${ballx}H "
(( ballx += directionx ))
(( bally += directiony ))
test $ballx -eq $COLUMNS && (( directionx *= -1 ))
test $ballx -eq 2 -a \
$bally -ge $paddley -a \
$bally -lt $(( paddley + paddlelength )) && (( directionx *= -1 ))
test $ballx -eq 1 && kill $idmain
test $bally -eq $LINES -o $bally -eq 1 && (( directiony *= -1 ))
echo -en "\e[47m\e[$bally;${ballx}H "
}
paddley=$(( LINES / 2 - paddlelength / 2 ))
ballx=$COLUMNS
bally=$(( RANDOM % LINES + 1 ))
directionx=-1
directiony=$(( RANDOM % 2 == 1 ? 1 : -1 ))
paintpaddle nomove
while true; do
paintball
sleep $speed
done
}
echo -en "\e[H\e[J"
echo -en "\e[?25l"
paintscene &
idpaintscene=$!
while true; do
read -sn1
test "$REPLY" == $'\e' || continue
read -sn1
test "$REPLY" == "[" || continue
read -sn1
case "$REPLY" in
A) kill -usr1 $idpaintscene ;;
B) kill -usr2 $idpaintscene ;;
esac
done