resume partially working

This commit is contained in:
adam committed 2025-02-11 20:43:28 +00:00
1 parent f73667b6a9
commit ab97bcea65
1 file changed
+74 -29
+74 -29
View File
@@ -26,6 +26,10 @@ declare -gr DOWN1=$'\e[1E'
declare -gr INDENT=$'\e[1C' declare -gr INDENT=$'\e[1C'
function main() { function main() {
declare -Ag BOARD
declare -g ROW=0
declare -g WIN=0
declare -g ANSWER declare -g ANSWER
declare -g POOL='QWERTYUIOPASDFGHJKLZXCVBNM' declare -g POOL='QWERTYUIOPASDFGHJKLZXCVBNM'
declare -Ag YELLOWS declare -Ag YELLOWS
@@ -36,21 +40,25 @@ function main() {
echo -en "${CLEAR_SCREEN}" echo -en "${CLEAR_SCREEN}"
echo -en "${GOHOME}" echo -en "${GOHOME}"
init_board if [[ "${RESUME}" == 1 ]]; then
load_game
[[ $WIN == 5 ]] && exit 0
else
init_board
fi
render_board render_board
declare row for (( ROW; ROW<HEIGHT; ROW++ )); do
for (( row=0; row<HEIGHT; row++ )); do
declare GUESS declare GUESS
[[ "${KEYBOARD}" == 1 ]] && render_keyboard [[ "${KEYBOARD}" == 1 ]] && render_keyboard
GUESS=$(retrive_guess) GUESS=$(retrive_guess)
check_guess "${GUESS}" "${row}" ; win=$? check_guess "${GUESS}" "${ROW}" ; WIN=$?
reveal_row "${row}" reveal_row "${ROW}"
if [[ $win == 5 ]]; then if [[ $WIN == 5 ]]; then
[[ "${ONLINE}" == 1 ]] && save_game [[ "${ONLINE}" == 1 ]] && save_result
echo -e "${CLEAR_DOWN}YOU WIN" echo -e "${CLEAR_DOWN}YOU WIN"
exit 0 exit 0
fi fi
@@ -63,8 +71,7 @@ function main() {
done done
echo -en "${NEWLINE}${RESET}" echo -en "${NEWLINE}${RESET}"
[[ "${ONLINE}" == 1 ]] && save_game [[ "${ONLINE}" == 1 ]] && save_result
exit 0 exit 0
} }
@@ -75,12 +82,14 @@ function select_random_word() {
} }
function set_options() { function set_options() {
declare -g BORDER=1 declare -g BORDER=1
declare -g HARD_MODE=0 declare -g HARD_MODE=0
declare -g STRICT_HARD_MODE=0 declare -g STRICT_HARD_MODE=0
declare -g DELAY=0.5 declare -g DELAY=0.5
declare -g KEYBOARD=1 declare -g KEYBOARD=1
declare -g ONLINE=0 declare -g ONLINE=0
declare -g RESUME=0
while getopts "bw:HSkodh" OPT; do while getopts "bw:HSkodh" OPT; do
case "${OPT}" in case "${OPT}" in
@@ -112,20 +121,33 @@ function set_options() {
declare -g USER declare -g USER
read -r -p "Username: " USER read -r -p "Username: " USER
USER="${USER,,}"
declare -g DAY
DAY=$(( $EPOCHSECONDS / 86400 ))
declare -gr PROGRESS_FILE=".${USER}-${DAY}.progress"
declare HM declare -gr RESULT_FILE="${USER}-${DAY}.board"
read -r -p "Do you want to enable hard mode [y/N]? " -n 1 HM
if [[ "${HM}" =~ ^[Yy]$ ]]; then trap save_game SIGINT
HARD_MODE=1
declare SHM #CHECK FOR IN PROGRESS GAME
echo -en "${NEWLINE}" if [[ -f "${PROGRESS_FILE}" ]] && [[ -s "${PROGRESS_FILE}" ]]; then
read -r -p "Do you want to enable strict hard mode [y/N]? " -n 1 HM RESUME=1
else
declare HM
read -r -p "Do you want to enable hard mode [y/N]? " -n 1 HM
[[ "${HM}" =~ ^[Yy]$ ]] && STRICT_HARD_MODE=1 if [[ "${HM}" =~ ^[Yy]$ ]]; then
HARD_MODE=1
declare SHM
echo -en "${NEWLINE}"
read -r -p "Do you want to enable strict hard mode [y/N]? " -n 1 HM
[[ "${HM}" =~ ^[Yy]$ ]] && STRICT_HARD_MODE=1
fi
fi fi
;; ;;
d) d)
@@ -154,7 +176,6 @@ Options:
} }
function init_board() { function init_board() {
declare -Ag BOARD
for (( row=0; row<HEIGHT; row++ )); do for (( row=0; row<HEIGHT; row++ )); do
for (( char=0; char<WIDTH; char++ )); do for (( char=0; char<WIDTH; char++ )); do
BOARD[${row},${char}]="${GREY} " BOARD[${row},${char}]="${GREY} "
@@ -174,7 +195,7 @@ function render_board() {
echo -n "${BOARD[${row},${char}]}${RESET}" echo -n "${BOARD[${row},${char}]}${RESET}"
done done
[[ "${BORDER}" == 1 ]] && echo -en " │" [[ "${BORDER}" == 1 ]] && echo -en " │"
echo -en "${DOWN1}" echo -en "${NEWLINE}"
done done
[[ "${BORDER}" == 1 ]] && echo -e "└─────────────────┘" [[ "${BORDER}" == 1 ]] && echo -e "└─────────────────┘"
} }
@@ -232,7 +253,7 @@ function validate_guess() {
} }
function hard_mode_check() { function hard_mode_check() {
[[ -z "${row}" || "${row}" == 0 ]] && return 0 [[ -z "${ROW}" || "${ROW}" == 0 ]] && return 0
declare GUESS=$1 declare GUESS=$1
@@ -249,7 +270,7 @@ function hard_mode_check() {
[[ ! "${GUESS}" == *"${yellows[i]}"* ]] && return 4 [[ ! "${GUESS}" == *"${yellows[i]}"* ]] && return 4
fi fi
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 4
@@ -317,17 +338,41 @@ function reveal_row() {
echo -en "${SHOW_CURSOR}${RESET}${RESTORE}" echo -en "${SHOW_CURSOR}${RESET}${RESTORE}"
} }
function load_game() {
source "${PROGRESS_FILE}"
}
function save_game() { function save_game() {
DAY=$(( $EPOCHSECONDS / 86400 )) > "${PROGRESS_FILE}"
USER="${USER,,}"
render_board > "${USER}-${DAY}" for key in "${!BOARD[@]}"; do
if [[ $win != 5 ]]; then echo "BOARD[$key]='${BOARD[$key]}'" >> "${PROGRESS_FILE}"
[[ "${BORDER}" == 1 ]] && echo -en "${CLEAR_DOWN}${INDENT}${INDENT}" >> "${USER}-${DAY}" done
echo -en "${CLEAR_LINE}${BOLD}" >> "${USER}-${DAY}"
for key in "${!BOARD[@]}"; do
echo "YELLOWS[$key]='${YELLOWS[$key]}'" >> "${PROGRESS_FILE}"
done
echo "ROW=${ROW}" >> "${PROGRESS_FILE}"
echo "POOL=${POOL}" >> "${PROGRESS_FILE}"
echo "HARD_MODE=${HARD_MODE}" >> "${PROGRESS_FILE}"
echo "STRICT_HARD_MODE=${STRICT_HARD_MODE}" >> "${PROGRESS_FILE}"
echo "WIN=${WIN}" >> "${PROGRESS_FILE}"
echo "ANSWER=${ANSWER}" >> "${PROGRESS_FILE}"
echo -en "${RESET}"
exit 0
}
function save_result() {
render_board > "${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 for (( i=0; i<WIDTH; i++ )); do
echo -en " ${ANSWER:$i:1} " >> "${USER}-${DAY}" echo -en " ${ANSWER:$i:1} " >> "${RESULT_FILE}"
done done
echo -en "${NEWLINE}${RESET}" >> "${USER}-${DAY}" echo -en "${NEWLINE}${RESET}" >> "${RESULT_FILE}"
> "${PROGRESS_FILE}" # Maybe better to save and check $WIN
fi fi
} }