resume partially working
This commit is contained in:
1 parent
f73667b6a9
commit
ab97bcea65
1 file changed
+74
-29
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user