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