113 lines
3.2 KiB
Bash
Executable File
113 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
check_dependancies()
|
|
{
|
|
if [ $# -eq 0 ] ; then
|
|
if [[ $(bash --version | head -n 1 | cut -f 1 -d "." | tr -d "[:alpha:]") < "4" ]] ; then
|
|
echo "This game requires bash version 4 or higher. Earlier versions may not be able to successfully run this code."
|
|
fi
|
|
if ! hash sox &> /dev/null ; then
|
|
echo "The program sox is required but does not appear to be installed on your system. Please install sox and try
|
|
again."
|
|
exit 1
|
|
fi
|
|
fi
|
|
for i in $@ ; do
|
|
if ! hash $i &> /dev/null ; then
|
|
echo "The program $i is required but does not appear to be installed on your system. Please install $i and try
|
|
again."
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
initialize_players()
|
|
{
|
|
i=1
|
|
while [ $i -le $1 ] ; do
|
|
player[$i]=0
|
|
let i++
|
|
done
|
|
}
|
|
|
|
score_keeper()
|
|
{
|
|
#Initialize currentScore for the player to 0
|
|
currentScore=0
|
|
#clear the continue variable
|
|
unset continue
|
|
#Show current player
|
|
i=1
|
|
while [ $i -lt $columns ] ; do
|
|
echo -n "-"
|
|
let i++
|
|
done
|
|
echo "-"
|
|
echo "It is player $1's turn. Player $1 has ${player[$1]} total points."
|
|
#while the die roll is not 1 keep rolling and keep track of the score
|
|
while [ "${continue^}" != "Q" ] ; do
|
|
dieRoll=$(rolldice 1)
|
|
play -qV0 "sounds/die.ogg" remix v0.$(rolldice 1d4+4) v0.$(rolldice 1d4+4)
|
|
echo -n "player $1 rolled a $dieRoll "
|
|
if [ $dieRoll -ne 1 ] ; then
|
|
currentScore=$(echo "$currentScore + $dieRoll" | bc)
|
|
echo "for a score of $currentScore."
|
|
if [ $1 -eq 2 -a "$cpu" == "true" ] ; then
|
|
continue="$(shuf -n 1 -e "q" "a" "b" "c" "d")"
|
|
else
|
|
read -n 1 -p "Press any key to roll again or q to stop and bank your current score." continue
|
|
fi
|
|
echo
|
|
else
|
|
echo "and loses their score of $currentScore."
|
|
play -qV0 sounds/lose.ogg
|
|
currentScore=0
|
|
continue="q"
|
|
fi
|
|
if [ "${continue^}" == "Q" -o $currentScore -eq 0 ] ; then
|
|
player[$1]=$(echo "${player[$1]} + $currentScore" | bc)
|
|
echo "player $1's turn is over. Player $1's new score is ${player[$1]}."
|
|
fi
|
|
if [ ${player[$1]} -ge 100 ] ; then
|
|
echo "Player $1 WINS!!!"
|
|
play -qV0 sounds/win.ogg
|
|
exit 0
|
|
fi
|
|
done
|
|
}
|
|
|
|
check_dependancies
|
|
check_dependancies rolldice
|
|
#get terminal width
|
|
columns=$(tput cols)
|
|
#find out how many players there are
|
|
if [ $# -gt 1 ] ; then
|
|
echo "Usage: $0 or $0 number of players."
|
|
exit 1
|
|
fi
|
|
if [ $# -eq 1 ] ; then
|
|
if ! [[ "$1" =~ ^[0-9]+$ ]] ; then
|
|
echo "The number of players must be a number, 2 or greater."
|
|
exit 1
|
|
fi
|
|
if [ $1 -lt 2 ] ; then
|
|
echo "The number of players must be a number, 2 or greater."
|
|
exit 1
|
|
fi
|
|
totalPlayers=$1
|
|
else
|
|
totalPlayers=2
|
|
cpu=true
|
|
fi
|
|
initialize_players $totalPlayers
|
|
#determine who goes first.
|
|
playerIndex=$(rolldice 1d${#player[@]})
|
|
while [ $playerIndex -gt 0 ] ; do
|
|
score_keeper $playerIndex
|
|
let playerIndex++
|
|
if [ $playerIndex -gt ${#player[@]} ] ; then
|
|
playerIndex=1
|
|
fi
|
|
done
|
|
exit 0
|