Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e62094a6f | ||
|
|
0f8640e9e8 | ||
|
|
6b07093d68 | ||
|
|
a3f9ae6a17 | ||
|
|
d34d98c15d |
@@ -58,7 +58,7 @@ function main() {
|
||||
for (( ROW; ROW<HEIGHT; ROW++ )); do
|
||||
declare GUESS
|
||||
[[ "${KEYBOARD}" == 1 ]] && render_keyboard
|
||||
GUESS=$(retrieve_guess)
|
||||
GUESS=$(retrieve_guess) || { echo -en "${NEWLINE}"; exit 0; }
|
||||
check_guess "${GUESS}" "${ROW}" ; WIN=$?
|
||||
|
||||
# Save before the reveal so quitting or disconnecting can't undo a guess
|
||||
@@ -83,12 +83,7 @@ function main() {
|
||||
fi
|
||||
done
|
||||
|
||||
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}"
|
||||
echo -en "${CLEAR_LINE}${BOLD}"
|
||||
for (( i=0; i<WIDTH; i++ )); do
|
||||
echo -en " ${ANSWER:$i:1} "
|
||||
done
|
||||
echo -en "${NEWLINE}${RESET}"
|
||||
render_answer
|
||||
|
||||
if [[ "${ONLINE}" == 1 && "${DAILY_DONE}" != 1 ]]; then
|
||||
echo "Share/view your game with -> curl \"${URL_BASE}/${RESULT_FILE}\""
|
||||
@@ -243,29 +238,54 @@ function render_board() {
|
||||
[[ "${BORDER}" == 1 ]] && echo -e "└─────────────────┘"
|
||||
}
|
||||
|
||||
function render_answer() {
|
||||
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}"
|
||||
echo -en "${CLEAR_LINE}${BOLD}"
|
||||
for (( i=0; i<WIDTH; i++ )); do
|
||||
echo -en " ${ANSWER:$i:1} "
|
||||
done
|
||||
echo -en "${NEWLINE}${RESET}"
|
||||
}
|
||||
|
||||
# Exits non-zero when input has ended so the caller can quit
|
||||
function retrieve_guess() {
|
||||
if [[ -n $1 ]]; then
|
||||
read -r -p "${CLEAR_UP1}$1: " GUESS
|
||||
read -r -p "${CLEAR_UP1}$1: " GUESS || end_of_input
|
||||
else
|
||||
read -r -p "${CLEAR_2END}Enter Guess: " GUESS
|
||||
read -r -p "${CLEAR_2END}Enter Guess: " GUESS || end_of_input
|
||||
fi
|
||||
|
||||
while [[ ${#GUESS} -ne 5 ]] || [[ ! "${GUESS,,}" =~ ^[a-z]{5}$ ]]; do
|
||||
read -r -p "${CLEAR_UP1}Must be 5 letters: " GUESS
|
||||
done
|
||||
read -r -p "${CLEAR_UP1}Must be 5 letters: " GUESS || end_of_input
|
||||
done
|
||||
declare valid_guess
|
||||
validate_guess "${GUESS}" ; valid_guess=$?
|
||||
|
||||
[[ ${valid_guess} == 1 ]] && GUESS=$(retrieve_guess "Not A Valid Word")
|
||||
[[ ${valid_guess} == 2 ]] && GUESS=$(retrieve_guess "Not A Valid Guess")
|
||||
[[ ${valid_guess} == 3 ]] && GUESS=$(retrieve_guess "GREEN Issue")
|
||||
[[ ${valid_guess} == 4 ]] && GUESS=$(retrieve_guess "YELLOW Issue")
|
||||
[[ ${valid_guess} == 5 ]] && GUESS=$(retrieve_guess "POOL Issue")
|
||||
[[ ${valid_guess} == 6 ]] && GUESS=$(retrieve_guess "NEW Issue")
|
||||
declare message
|
||||
declare -r pos="${HARD_MODE_POS}"
|
||||
declare -r letter="${GUESS:pos:1}"
|
||||
declare -ra ordinals=(1st 2nd 3rd 4th 5th)
|
||||
[[ ${valid_guess} == 1 ]] && message="Not A Valid Word"
|
||||
[[ ${valid_guess} == 3 ]] && message="${ordinals[pos]} letter must be ${greens[pos]}"
|
||||
[[ ${valid_guess} == 4 ]] && message="Must contain ${yellows[pos]}"
|
||||
[[ ${valid_guess} == 5 ]] && message="${letter^^} is not in the word"
|
||||
[[ ${valid_guess} == 6 ]] && message="${ordinals[pos]} letter can't be ${letter^^}"
|
||||
|
||||
if [[ -n "${message}" ]]; then
|
||||
GUESS=$(retrieve_guess "${message}") || exit 1
|
||||
fi
|
||||
|
||||
echo -n "${GUESS^^}"
|
||||
}
|
||||
|
||||
# Called when read gets Ctrl-D. On a terminal treat it like Enter, but if
|
||||
# input has really ended (closed pipe) exit, or the retry loop spins forever
|
||||
function end_of_input() {
|
||||
[[ -t 0 ]] || exit 1
|
||||
# Ctrl-D doesn't move to a new line like Enter, which the prompts expect
|
||||
echo -en "${NEWLINE}" >&2
|
||||
}
|
||||
|
||||
function render_keyboard() {
|
||||
declare pos=$(( BORDER*2+7 ))
|
||||
echo -en "${RESET}\e[$pos;0H"
|
||||
@@ -306,6 +326,8 @@ function hard_mode_check() {
|
||||
declare GUESS=$1
|
||||
|
||||
for (( i=0; i<WIDTH; i++ )); do
|
||||
HARD_MODE_POS=$i # letter position that failed, for the error message
|
||||
|
||||
if [[ "${STRICT_HARD_MODE}" == 1 ]]; then
|
||||
[[ "${POOL}" == *${GUESS:i:1}* ]] || return 5
|
||||
fi
|
||||
@@ -321,7 +343,7 @@ function hard_mode_check() {
|
||||
for (( r=ROW-1; r>=0; r-- )); do
|
||||
CHAR="${GUESS:i:1}"
|
||||
PREV_CHAR="${YELLOWS[$r,$i]}"
|
||||
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 4
|
||||
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 6
|
||||
done
|
||||
done
|
||||
|
||||
@@ -432,19 +454,13 @@ function save_game() {
|
||||
|
||||
function save_result() {
|
||||
[[ "${ONLINE}" == 0 ]] && return 0
|
||||
[[ "${ONLINE}" == 1 ]] && update_stats
|
||||
if [[ "${ONLINE}" == 1 ]] && [[ "${DAILY_DONE}" != 1 ]]; then
|
||||
update_stats
|
||||
render_board > "${RESULT_FILE}"
|
||||
render_board > "${CUR_RESULT_FILE}"
|
||||
if [[ $WIN != 5 ]]; then
|
||||
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}" >> "${RESULT_FILE}"
|
||||
echo -en "${CLEAR_LINE}${BOLD}" >> "${RESULT_FILE}"
|
||||
for (( i=0; i<WIDTH; i++ )); do
|
||||
echo -en " ${ANSWER:$i:1} " >> "${RESULT_FILE}"
|
||||
echo -en " ${ANSWER:$i:1} " >> "${CUR_RESULT_FILE}"
|
||||
done
|
||||
echo -en "${NEWLINE}${RESET}" >> "${RESULT_FILE}"
|
||||
echo -en "${NEWLINE}${RESET}" >> "${CUR_RESULT_FILE}"
|
||||
render_answer >> "${RESULT_FILE}"
|
||||
render_answer >> "${CUR_RESULT_FILE}"
|
||||
fi
|
||||
fi
|
||||
echo 'PLAYED=1' > "${PROGRESS_FILE}"
|
||||
|
||||
Reference in new issue
Block a user