bashword |
#!/bin/bash
clear
shopt -s lastpipe
RED="\e[1;31m"
GREEN="\e[1;37;42m"
BROWN="\e[33m"
CYAN="\e[36m"
GRAY="\e[37m"
YELLOW="\e[1;43;30m"
COLOUR=( $GRAY $GREEN $YELLOW )
EOC="\e[0m"
z=$RANDOM
COUNT=0
guessNum=1
CONGRATS=("Extraordinary !" "Superb !" "Well Done" "Not bad" "Just OK... " "Just in time !")
# build a WORD array
grep "^.....$" /usr/share/dict/words|grep -v "[é'[:upper:]]"|
while read word ;do
WORDS[$COUNT]+=$word
((COUNT++))
done
# select a random 5 letter word
word=${WORDS[$(($RANDOM % ${#WORDS[@]}))]}
echo -e $CYAN"Guess the 5 letter word"
echo -e "The letter clues are colour coded :"$EOC
echo -e " "$GREEN " Correct position "$EOC
echo -e " "$YELLOW " Incorrect position "$EOC
if [ "$1" == "DEBUG" ] ; then echo "The word is:" $word ;fi
while [ $guessNum -lt 7 ]
do
found=0
while [ $found -eq 0 ] ; do
echo -e $CYAN"Enter guess no." $guessNum $EOC
read guess
while [ ${#guess} -lt 5 ] ;do
echo "Enter a 5 letter word"
read guess
done
#check guess is real word
n=${#WORDS[@]}
((n--))
while [ $n -ge 0 ] ;do
if [ ${WORDS[$n]} == $guess ] ; then
found=1
break
fi
((n--))
done
if [ $found -eq 0 ];then
echo -e $RED"Word not found in list, Try again"$EOC
fi
done
# check for correct letter in correct space
unset testWord
match=(0 0 0 0 0 )
for letter in {0..4} ;do
testWord[$letter]+=${word:$letter:1}
if [ ${guess:$letter:1} == ${testWord[$letter]} ]; then
set $((match[$letter] = 1))
testWord[$letter]="_"
fi
done
# check for correct letters anywhere...
for gw in {0..4} ;do
for tw in {0..4} ;do
if [ ${testWord[$tw]} == ${guess:$gw:1} ]; then
if [ ${match[$gw]} -eq 0 ] ;then
set $((match[$gw] = 2))
testWord[$tw]="_"
fi
fi
done
done
# display matches
echo " "
for letter in {0..4} ;do
echo -en ${COLOUR[${match[$letter]}]}" "${guess:$letter:1} $EOC
done
echo
echo
if [ "$guess" == "$word" ] ; then
echo ${CONGRATS[$guessNum-1]}
echo
break
fi
((guessNum++))
done
if [ $guessNum -eq 7 ]; then
echo -e "You ran out of guesses\nThe word was "$word
fi