Compare commits
5
Commits
8dfebaa9f8
...
8e62094a6f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e62094a6f | ||
|
|
0f8640e9e8 | ||
|
|
6b07093d68 | ||
|
|
a3f9ae6a17 | ||
|
|
d34d98c15d |
@@ -58,7 +58,7 @@ function main() {
|
|||||||
for (( ROW; ROW<HEIGHT; ROW++ )); do
|
for (( ROW; ROW<HEIGHT; ROW++ )); do
|
||||||
declare GUESS
|
declare GUESS
|
||||||
[[ "${KEYBOARD}" == 1 ]] && render_keyboard
|
[[ "${KEYBOARD}" == 1 ]] && render_keyboard
|
||||||
GUESS=$(retrieve_guess)
|
GUESS=$(retrieve_guess) || { echo -en "${NEWLINE}"; exit 0; }
|
||||||
check_guess "${GUESS}" "${ROW}" ; WIN=$?
|
check_guess "${GUESS}" "${ROW}" ; WIN=$?
|
||||||
|
|
||||||
# Save before the reveal so quitting or disconnecting can't undo a guess
|
# Save before the reveal so quitting or disconnecting can't undo a guess
|
||||||
@@ -83,12 +83,7 @@ function main() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}"
|
render_answer
|
||||||
echo -en "${CLEAR_LINE}${BOLD}"
|
|
||||||
for (( i=0; i<WIDTH; i++ )); do
|
|
||||||
echo -en " ${ANSWER:$i:1} "
|
|
||||||
done
|
|
||||||
echo -en "${NEWLINE}${RESET}"
|
|
||||||
|
|
||||||
if [[ "${ONLINE}" == 1 && "${DAILY_DONE}" != 1 ]]; then
|
if [[ "${ONLINE}" == 1 && "${DAILY_DONE}" != 1 ]]; then
|
||||||
echo "Share/view your game with -> curl \"${URL_BASE}/${RESULT_FILE}\""
|
echo "Share/view your game with -> curl \"${URL_BASE}/${RESULT_FILE}\""
|
||||||
@@ -243,29 +238,54 @@ function render_board() {
|
|||||||
[[ "${BORDER}" == 1 ]] && echo -e "└─────────────────┘"
|
[[ "${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() {
|
function retrieve_guess() {
|
||||||
if [[ -n $1 ]]; then
|
if [[ -n $1 ]]; then
|
||||||
read -r -p "${CLEAR_UP1}$1: " GUESS
|
read -r -p "${CLEAR_UP1}$1: " GUESS || end_of_input
|
||||||
else
|
else
|
||||||
read -r -p "${CLEAR_2END}Enter Guess: " GUESS
|
read -r -p "${CLEAR_2END}Enter Guess: " GUESS || end_of_input
|
||||||
fi
|
fi
|
||||||
|
|
||||||
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 || end_of_input
|
||||||
done
|
done
|
||||||
declare valid_guess
|
declare valid_guess
|
||||||
validate_guess "${GUESS}" ; valid_guess=$?
|
validate_guess "${GUESS}" ; valid_guess=$?
|
||||||
|
|
||||||
[[ ${valid_guess} == 1 ]] && GUESS=$(retrieve_guess "Not A Valid Word")
|
declare message
|
||||||
[[ ${valid_guess} == 2 ]] && GUESS=$(retrieve_guess "Not A Valid Guess")
|
declare -r pos="${HARD_MODE_POS}"
|
||||||
[[ ${valid_guess} == 3 ]] && GUESS=$(retrieve_guess "GREEN Issue")
|
declare -r letter="${GUESS:pos:1}"
|
||||||
[[ ${valid_guess} == 4 ]] && GUESS=$(retrieve_guess "YELLOW Issue")
|
declare -ra ordinals=(1st 2nd 3rd 4th 5th)
|
||||||
[[ ${valid_guess} == 5 ]] && GUESS=$(retrieve_guess "POOL Issue")
|
[[ ${valid_guess} == 1 ]] && message="Not A Valid Word"
|
||||||
[[ ${valid_guess} == 6 ]] && GUESS=$(retrieve_guess "NEW Issue")
|
[[ ${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^^}"
|
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() {
|
function render_keyboard() {
|
||||||
declare pos=$(( BORDER*2+7 ))
|
declare pos=$(( BORDER*2+7 ))
|
||||||
echo -en "${RESET}\e[$pos;0H"
|
echo -en "${RESET}\e[$pos;0H"
|
||||||
@@ -306,6 +326,8 @@ function hard_mode_check() {
|
|||||||
declare GUESS=$1
|
declare GUESS=$1
|
||||||
|
|
||||||
for (( i=0; i<WIDTH; i++ )); do
|
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
|
if [[ "${STRICT_HARD_MODE}" == 1 ]]; then
|
||||||
[[ "${POOL}" == *${GUESS:i:1}* ]] || return 5
|
[[ "${POOL}" == *${GUESS:i:1}* ]] || return 5
|
||||||
fi
|
fi
|
||||||
@@ -321,7 +343,7 @@ function hard_mode_check() {
|
|||||||
for (( r=ROW-1; r>=0; r-- )); do
|
for (( r=ROW-1; r>=0; r-- )); do
|
||||||
CHAR="${GUESS:i:1}"
|
CHAR="${GUESS:i:1}"
|
||||||
PREV_CHAR="${YELLOWS[$r,$i]}"
|
PREV_CHAR="${YELLOWS[$r,$i]}"
|
||||||
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 4
|
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 6
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -432,19 +454,13 @@ function save_game() {
|
|||||||
|
|
||||||
function save_result() {
|
function save_result() {
|
||||||
[[ "${ONLINE}" == 0 ]] && return 0
|
[[ "${ONLINE}" == 0 ]] && return 0
|
||||||
[[ "${ONLINE}" == 1 ]] && update_stats
|
|
||||||
if [[ "${ONLINE}" == 1 ]] && [[ "${DAILY_DONE}" != 1 ]]; then
|
if [[ "${ONLINE}" == 1 ]] && [[ "${DAILY_DONE}" != 1 ]]; then
|
||||||
|
update_stats
|
||||||
render_board > "${RESULT_FILE}"
|
render_board > "${RESULT_FILE}"
|
||||||
render_board > "${CUR_RESULT_FILE}"
|
render_board > "${CUR_RESULT_FILE}"
|
||||||
if [[ $WIN != 5 ]]; then
|
if [[ $WIN != 5 ]]; then
|
||||||
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}" >> "${RESULT_FILE}"
|
render_answer >> "${RESULT_FILE}"
|
||||||
echo -en "${CLEAR_LINE}${BOLD}" >> "${RESULT_FILE}"
|
render_answer >> "${CUR_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}"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo 'PLAYED=1' > "${PROGRESS_FILE}"
|
echo 'PLAYED=1' > "${PROGRESS_FILE}"
|
||||||
|
|||||||
Reference in new issue
Block a user