Initial implementation of hard mode
This commit is contained in:
1 parent
0c2b212c72
commit
a179fed550
1 file changed
+48
-3
@@ -27,6 +27,7 @@ declare -gr INDENT=$'\e[1C'
|
|||||||
function main() {
|
function main() {
|
||||||
echo -en "${CLEAR_SCREEN}"
|
echo -en "${CLEAR_SCREEN}"
|
||||||
declare -g ANSWER
|
declare -g ANSWER
|
||||||
|
declare -g POOL='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||||
ANSWER=$(select_random_word)
|
ANSWER=$(select_random_word)
|
||||||
|
|
||||||
set_options "$@"
|
set_options "$@"
|
||||||
@@ -63,8 +64,9 @@ function select_random_word() {
|
|||||||
|
|
||||||
function set_options() {
|
function set_options() {
|
||||||
declare -g BORDER=1
|
declare -g BORDER=1
|
||||||
|
declare -g HARD_MODE=0
|
||||||
|
|
||||||
while getopts "bw:h" OPT; do
|
while getopts "bw:Hh" OPT; do
|
||||||
case "${OPT}" in
|
case "${OPT}" in
|
||||||
b)
|
b)
|
||||||
BORDER=0
|
BORDER=0
|
||||||
@@ -77,6 +79,9 @@ function set_options() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
H)
|
||||||
|
HARD_MODE=1
|
||||||
|
;;
|
||||||
h)
|
h)
|
||||||
exit # add help message
|
exit # add help message
|
||||||
;;
|
;;
|
||||||
@@ -123,14 +128,14 @@ function retrive_guess() {
|
|||||||
while [[ ${#GUESS} -ne 5 ]] || [[ ! "${GUESS,,}" =~ ^[a-z]{5}$ ]]; do
|
while [[ ${#GUESS} -ne 5 ]] || [[ ! "${GUESS,,}" =~ ^[a-z]{5}$ ]]; do
|
||||||
read -r -p "${CLEAR_UP1}Must be 5 letters: " GUESS
|
read -r -p "${CLEAR_UP1}Must be 5 letters: " GUESS
|
||||||
done
|
done
|
||||||
|
|
||||||
declare valid_guess
|
declare valid_guess
|
||||||
validate_guess "${GUESS}" &
|
validate_guess "${GUESS}" &
|
||||||
declare validation_pid=$!
|
declare validation_pid=$!
|
||||||
wait $validation_pid
|
wait $validation_pid
|
||||||
valid_guess=$?
|
valid_guess=$?
|
||||||
|
|
||||||
[[ ${valid_guess} != 0 ]] && GUESS=$(retrive_guess "Not A Valid Word")
|
[[ ${valid_guess} == 1 ]] && GUESS=$(retrive_guess "Not A Valid Word")
|
||||||
|
[[ ${valid_guess} == 2 ]] && GUESS=$(retrive_guess "Not A Valid Guess")
|
||||||
|
|
||||||
echo -n "${GUESS^^}"
|
echo -n "${GUESS^^}"
|
||||||
}
|
}
|
||||||
@@ -140,6 +145,9 @@ function validate_guess() {
|
|||||||
|
|
||||||
for WORD in ${VALID_GUESSES}; do
|
for WORD in ${VALID_GUESSES}; do
|
||||||
if [[ "${WORD}" == "${GUESS,,}" ]]; then
|
if [[ "${WORD}" == "${GUESS,,}" ]]; then
|
||||||
|
if [[ "${HARD_MODE}" == 1 ]]; then
|
||||||
|
hard_mode_check "${GUESS^^}" || return $?
|
||||||
|
fi
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -147,12 +155,45 @@ function validate_guess() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hard_mode_check() {
|
||||||
|
[[ -z "${row}" || "${row}" == 0 ]] && return 0
|
||||||
|
|
||||||
|
declare GUESS=$1
|
||||||
|
|
||||||
|
for (( i=0; i<WIDTH; i++ )); do
|
||||||
|
[[ "${POOL}" == *${GUESS:i:1}* ]] || return 2
|
||||||
|
|
||||||
|
color_check "${GUESS:i:1}" $i && continue
|
||||||
|
|
||||||
|
if [[ "${yellows}" == *${GUESS:i:1}* ]]; then
|
||||||
|
yellows="${yellows/${GUESS:i:1}/}"
|
||||||
|
color_check "${GUESS:i:1}" $i && return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function color_check() {
|
||||||
|
declare -r CHAR=$1
|
||||||
|
declare -r c=$2
|
||||||
|
declare -r r=$(( row-1 ))
|
||||||
|
|
||||||
|
PREV_ROW="${BOARD[$r,$c]}"
|
||||||
|
PREV_CHAR="${PREV_ROW: -2:1}"
|
||||||
|
|
||||||
|
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 0 || return 1
|
||||||
|
}
|
||||||
|
|
||||||
function check_guess() {
|
function check_guess() {
|
||||||
declare -r _guess=$1
|
declare -r _guess=$1
|
||||||
declare -r _row=$2
|
declare -r _row=$2
|
||||||
declare -r _answer="${ANSWER}"
|
declare -r _answer="${ANSWER}"
|
||||||
declare green_count=0
|
declare green_count=0
|
||||||
declare chars=""
|
declare chars=""
|
||||||
|
declare -g greens=""
|
||||||
|
declare -g yellows=""
|
||||||
|
|
||||||
for (( i=0; i<WIDTH; i++ )); do
|
for (( i=0; i<WIDTH; i++ )); do
|
||||||
[[ "${_answer:i:1}" != "${_guess:i:1}" ]] && chars+=${_answer:i:1}
|
[[ "${_answer:i:1}" != "${_guess:i:1}" ]] && chars+=${_answer:i:1}
|
||||||
@@ -165,6 +206,7 @@ function check_guess() {
|
|||||||
|
|
||||||
if [[ "${_char}" == "${_answer:$c:1}" ]]; then
|
if [[ "${_char}" == "${_answer:$c:1}" ]]; then
|
||||||
green_count=$(( green_count+1 ))
|
green_count=$(( green_count+1 ))
|
||||||
|
greens+="${_char}"
|
||||||
BOARD[$_row,$c]="${BOLD}${LETTER}${GREEN} ${_char} "
|
BOARD[$_row,$c]="${BOLD}${LETTER}${GREEN} ${_char} "
|
||||||
[[ $green_count == 5 ]] && return 5
|
[[ $green_count == 5 ]] && return 5
|
||||||
continue
|
continue
|
||||||
@@ -172,7 +214,10 @@ function check_guess() {
|
|||||||
|
|
||||||
if [[ "${chars}" == *${_char}* ]]; then
|
if [[ "${chars}" == *${_char}* ]]; then
|
||||||
chars="${chars/${_char}/}"
|
chars="${chars/${_char}/}"
|
||||||
|
yellows+="${_char}"
|
||||||
BOARD[$_row,$c]="${BOLD}${LETTER}${YELLOW} ${_char} "
|
BOARD[$_row,$c]="${BOLD}${LETTER}${YELLOW} ${_char} "
|
||||||
|
else
|
||||||
|
POOL="${POOL/${_char}/}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user