Ik heb een hangman spel gemaakt, geïmplementeerd in Bash. Natuurlijk denk je, "wat moet ik hier nu mee". Nou ik zou graag commentaar c.q. ideeën van jullie willen hebben hoe ik dit nu zou kunnen verbeteren, of gewoon wat jij anders zou doen.
De reden dat ik dit script heb gemaakt bestaat deels uit verveling en om te kijken hoe ik me schaar tussen de andere Bash fanatiekelingen
Het hoeft natuurlijk niet alleen over deze script te gaan, er is ook plaats om te discusiëren over shell scripten en het ontwikkelen ervan.
Hier nog een aantal url's waar ik het meest van heb geleerd:
• http://tldp.org/LDP/abs/html/
• http://wooledge.org:8000/BashPitfalls
• http://www.oreilly.com/catalog/bash3/
De reden dat ik dit script heb gemaakt bestaat deels uit verveling en om te kijken hoe ik me schaar tussen de andere Bash fanatiekelingen
Het hoeft natuurlijk niet alleen over deze script te gaan, er is ook plaats om te discusiëren over shell scripten en het ontwikkelen ervan.
Hier nog een aantal url's waar ik het meest van heb geleerd:
• http://tldp.org/LDP/abs/html/
• http://wooledge.org:8000/BashPitfalls
• http://www.oreilly.com/catalog/bash3/
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| #!/bin/bash
#
# Author: Cherwin Nooitmeer <cherwin@gmail.com>
#
read -p "Please enter a word to begin playing: " secret
secret=$(echo $secret | tr [:upper:] [:lower:])
clear
for ((i=0; i<${#secret}; i++))
do
# consult bash Parameter Expansion for more information
word[$i]=${secret:${i}:1}
done
index=0 # index to index characters array
characters=( 0 )
print_underscores() {
# just print the underscores if there were no parameters
if [ -z $1 ]; then
for i in ${word[@]}
do
echo -n "_ "
done
return
fi
dupe=0
# check to see if there aren't any duplicate guesses
for char in ${characters[@]}
do
if [ $char = $1 ]; then
dupe=1 ; break
fi
done
# add guess to array if there aren't any duplicate guesses
if [ $dupe -ne 1 ]; then
characters[$index]=$1
((index++))
fi
# check guesses against secret word
found=0
for letter in ${word[@]}
do
for char in ${characters[@]}
do
if [ $char = $letter ]; then
echo -n "$char "
found=1 # found character in secret
continue
fi
done
# didn't find character in secret
if [ $found -eq 0 ]; then
echo -n "_ "
fi
found=0
done
}
read() {
builtin read -p "Guess a letter: " guess
# sanitize input, only alpha characters are allowed
case "$guess" in
[abcdefghijklmnopqrstuvwxyz]) : ;;
[ABCDEFGHIJKLMNOPQRSTUVWXYZ])
guess=$(echo $guess | tr [:upper:] [:lower:]) ;;
*)
echo error
read ;;
esac
}
clear
print_underscores
echo
counter=0
while true
do
read
print_underscores $guess
echo
# exit loop after 10 tries
if [ $counter -eq 10 ]; then
echo "GAME OVER"
exit
fi
((counter++))
done |
[ Voor 11% gewijzigd door cherwin op 16-05-2008 18:38 ]
Tell me your problem, not the solution you think I should build for you.