Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
notes.txt
4 changes: 2 additions & 2 deletions hangman/alphabet.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#!/usr/bin/env bash
alphabet_block() {

local ok_name=$1 bad_name=$2

local -n ok_arr=$ok_name bad_arr=$bad_name
local -n ok_arr=$1 bad_arr=$2


local l i=0
for l in {a..z}; do
if [[ " ${ok_arr[*]} " == *" $l "* ]]; then
Expand Down
82 changes: 41 additions & 41 deletions hangman/display.sh
Original file line number Diff line number Diff line change
@@ -1,65 +1,67 @@
#!/usr/bin/env

mask=""

display_game_frame() {

echo $*

local _wrong=$1 _secret=$2 ok_name=$3 bad_name=$4
local -n ok_name=$1
local -n bad_name=$2
local -n _wrong=$3
local -n _secret=$4

clear

case $_wrong in
0) gallows ;; 1) wrong1 ;; 2) wrong2 ;;
3) wrong3 ;; 4) wrong4 ;; 5) wrong5 ;;
0) gallows ;;
1) wrong1 ;;
2) wrong2 ;;
3) wrong3 ;;
4) wrong4 ;;
5) wrong5 ;;
6)
wrong6
echo "Du bist verhangen - das Wort war: $_secret"
exit
return 1
;;
esac

echo

mask=$(mask_word $_secret)
mask=$(mask_word)
echo "Wort: $mask"
echo

endings_order $_wrong $_secret
#}
alphabet_block ok_name bad_name

cleaned="${mask// /}"
if [[ $_secret == $cleaned ]]; then
endings_order $_wrong $mask
return 1
fi

alphabet_block $ok_name $bad_name
echo
return 0
}

endings_order() {

_wrong=$1 _secret=$2

# [[ "$mask" != *"_"* ]] && {
case $_wrong in
0) mistakes0 ;;
1) mistakes1 ;;
2) mistakes2 ;;
3) mistakes3 ;;
4) mistakes4 ;;
5) mistakes5 ;;
*)
# mistakes6
echo "Du hast gewonnen!"
;;

esac

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
echo "$output"
fi

return

#
# }
local wrong=$1
local mask=$2

[[ "$mask" != *"_"* ]] && {
case $_wrong in
0) mistakes0 ;;
1) mistakes1 ;;
2) mistakes2 ;;
3) mistakes3 ;;
4) mistakes4 ;;
5) mistakes5 ;;
*)
mistakes6
echo "Du hast gewonnen!"
;;
esac

if [[ "${BASH_SOURCE[0]}" == $0 ]]; then
echo $output
fi
}
}

display_startup() {
Expand All @@ -71,5 +73,3 @@ display_startup() {
echo
sleep 3.3
}

#display_game_frame 12 99
105 changes: 51 additions & 54 deletions hangman/main.sh
Original file line number Diff line number Diff line change
@@ -1,58 +1,24 @@
#!/usr/bin/env bash
set -uo pipefail

bad_guess=()
ok_guess=()

mistake_countin() {

local ltr=$1
local secret=$2
declare -n ok_ref=$3
declare -n bad_ref=$4
declare -n wrong_ref=$5

all="${ok_ref[*]} ${bad_ref[*]}"
if [[ " $all " == *" $ltr "* ]]; then
if [[ "${BASH_SOURCE[0]}" == $0 ]]; then
echo "schon geraten"
fi
return 0
fi

if [[ "$secret" == *"$ltr"* ]]; then
ok_ref+=("$ltr")
else

bad_ref+=("$ltr")
((wrong_ref++))
fi

}

initialising() {

dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$dir/drawings.sh"
source "$dir/wordlist.sh"
source "$dir/alphabet.sh"
source "$dir/display.sh"
source "$dir/endings.sh"

secret="$(choose_word)"
secret=${secret//$'\r'/}
if [[ "${BASH_SOURCE[0]}" != $0 ]]; then
return
fi

# local -n ok_ref=$1
#local -n bad_ref=$2
local -n wrong=$1
local -n ok_word=$2
local -n bad_word=$3
local -n _secret=$4

wrongstate=0

display_startup "$secret"
display_startup "$_secret"

while :; do
display_game_frame "$wrongstate" "$secret" ok_ref bad_ref
if ! display_game_frame guessed_ok guessed_bad wrongstate secret; then
break
fi

# Eingabe
while true; do
read -rp "Rate einen Buchstaben (a-z): " -n1 ltr || {
echo
Expand All @@ -65,23 +31,54 @@ initialising() {
}
ltr=${ltr,,}

break
done
process_guess guessed_ok guessed_bad "$ltr" wrongstate
break
done
done
}

mistake_countin "$ltr" "$secret" ok_ref bad_ref wrongstate
process_guess() {
local -n ok_guess=$1
local -n bad_guess=$2
local ltr=$3
local -n wrong_count=$4

done
[[ " ${ok_guess[*]} ${bad_guess[*]} " == *" $ltr "* ]] && {
user_error="schon geraten"
if [[ "${BASH_SOURCE[0]}" == $0 ]]; then
echo "$user_error"
fi
return
}

if [[ "$secret" == *"$ltr"* ]]; then
ok_guess+=("$ltr")
else
bad_guess+=("$ltr")
((wrong_count++))
fi
}

main() {
dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$dir/drawings.sh"
source "$dir/wordlist.sh"
source "$dir/alphabet.sh"
source "$dir/display.sh"
source "$dir/endings.sh"

secret="$(choose_word)"
secret=${secret//$'\r'/}

guessed_ok=()
guessed_bad=()
wrongstate=0

ref_ok=()
ref_bad=()
initialising ref_ok ref_bad
mistake_countin $ltr $secret ref_ok ref_bad wrongstate
initialising wrongstate guessed_ok guessed_bad secret
}

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
main
else
exit
fi
Empty file added hangman/tests/test
Empty file.
30 changes: 30 additions & 0 deletions hangman/tests/test_block_multiple_letters.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/bash

set -ueo pipefail

source ../main.sh

ok_test=()
bad_test=(a)
ltr="a"
wrong_value=0


process_guess ok_test bad_test $ltr wrong_value

if ! [[ ${#ok_test[@]} == 0 && ${#bad_test[@]} == 1 ]]; then # testing if the array if the arrays
# are not manipulated.
exit 1

fi


# testing if there is the correct user_error in case of trying a letter again.



[[ $user_error == "schon geraten" ]] || exit 1 # more safety




12 changes: 3 additions & 9 deletions hangman/tests/test_endings_order.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,15 @@ test_endings_order() {
_wrong=3
_secret="affe"

## test1 : 3 mistakes

## test1: 3 mistakes
endings_order $_wrong $_secret

[[ $output == "Geschafft, aber mit vielen Fehlern. Übung macht den Meister." ]]
[[ $output == "Geschafft, aber mit vielen Fehlern. Übung macht den Meister." ]] || echo failed

## test2: 0 mistakes

_wrong=0
_secret="affe"

endings_order $_wrong $_secret

[[ $output == "Perfekt! 👍 Du hast das Wort ohne Fehler erraten." ]]

[[ $output == "Perfekt! 👍 Du hast das Wort ohne Fehler erraten." ]] || echo failed
}

test_endings_order
43 changes: 43 additions & 0 deletions hangman/tests/test_mistake_counter.currently_disabled
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

set -ueo pipefail

source "$(dirname "$0")/../main.sh"

test_mistake_countin() {

local guessed_ok=()
local guessed_bad=()
local wrongstate=0
ltr=a
local secret="Apfelsaft"

# test 1

mistake_treatement guessed_ok guessed_bad $ltr wrongstate


echo $wrongstate

[[ $wrongstate == 0 ]]

# test 2

set +e

mistake_treatement guessed_ok guessed_bad "x" wrongstate


[[ $wrongstate == 1 ]] && echo succes|| exit 1


mistake_treatement guessed_ok guessed_bad "x" wrongstate

[[ $wrongstate == 1 ]] && echo succes || exit 1 #should remaim the same because x was already guessed.




}

test_mistake_countin
Loading
Loading