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'
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user