View difference between Paste ID: RXkzgAgP and b3qaqNS4
SHOW: | | - or go back to the newest paste.
1
*title Choicescript Hangman Coding Challenge
2
3
*comment -- LETTER DEFINITIONS --
4
5
*temp l1 "a"
6
*temp l2 "b"
7
*temp l3 "c"
8
*temp l4 "d"
9
*temp l5 "e"
10
*temp l6 "f"
11
*temp l7 "g"
12
*temp l8 "h"
13
*temp l9 "i"
14
*temp l10 "j"
15
*temp l11 "k"
16
*temp l12 "l"
17
*temp l13 "m"
18
*temp l14 "n"
19
*temp l15 "o"
20
*temp l16 "p"
21
*temp l17 "q"
22
*temp l18 "r"
23
*temp l19 "s"
24
*temp l20 "t"
25
*temp l21 "u"
26
*temp l22 "v"
27
*temp l23 "w"
28
*temp l24 "x"
29
*temp l25 "y"
30
*temp l26 "z"
31
32
*comment -- GAME [RE]START --
33
*label hm_reset
34
	
35
*comment Number of guesses allowed
36
*temp hm_lives 10
37
*temp n
38
*temp hmvictory false
39
*comment Randomly select this game's word
40
*rand n 1 10
41
*gotoref "hmword_"&n
42
43
*comment -- THE WORDS --
44
45
*label hmword_1
46
*temp hmword "dog"
47
*temp hmletter_count 3
48
*temp hmletter_1 "d"
49
*temp hmletter_1_found false
50
*temp hmletter_2 "o"
51
*temp hmletter_2_found false
52
*temp hmletter_3 "g"
53
*temp hmletter_3_found false
54
*goto hang_man_top
55
56
*label hmword_2
57
*temp hmword "cat"
58
*temp hmletter_count 3
59
*temp hmletter_1 "c"
60
*temp hmletter_1_found false
61
*temp hmletter_2 "a"
62
*temp hmletter_2_found false
63
*temp hmletter_3 "t"
64
*temp hmletter_3_found false
65
*goto hang_man_top
66
67
*label hmword_3
68
*temp hmword "fish"
69
*temp hmletter_count 4
70
*temp hmletter_1 "f"
71
*temp hmletter_1_found false
72
*temp hmletter_2 "i"
73
*temp hmletter_2_found false
74
*temp hmletter_3 "s"
75
*temp hmletter_3_found false
76
*temp hmletter_4 "h"
77
*temp hmletter_4_found false
78
*goto hang_man_top
79
80
*label hmword_4
81
*temp hmword "shark"
82
*temp hmletter_count 5
83
*temp hmletter_1 "s"
84
*temp hmletter_1_found false
85
*temp hmletter_2 "h"
86
*temp hmletter_2_found false
87
*temp hmletter_3 "a"
88
*temp hmletter_3_found false
89
*temp hmletter_4 "r"
90
*temp hmletter_4_found false
91
*temp hmletter_5 "k"
92
*temp hmletter_5_found false
93
*goto hang_man_top
94
95
*label hmword_5
96
*temp hmword "horse"
97
*temp hmletter_count 5
98
*temp hmletter_1 "h"
99
*temp hmletter_1_found false
100
*temp hmletter_2 "o"
101
*temp hmletter_2_found false
102
*temp hmletter_3 "r"
103
*temp hmletter_3_found false
104
*temp hmletter_4 "s"
105
*temp hmletter_4_found false
106
*temp hmletter_5 "e"
107
*temp hmletter_5_found false
108
*goto hang_man_top
109
110
*label hmword_6
111
*temp hmword "rabbit"
112
*temp hmletter_count 6
113
*temp hmletter_1 "r"
114
*temp hmletter_1_found false
115
*temp hmletter_2 "a"
116
*temp hmletter_2_found false
117
*temp hmletter_3 "b"
118
*temp hmletter_3_found false
119
*temp hmletter_4 "b"
120
*temp hmletter_4_found false
121
*temp hmletter_5 "i"
122
*temp hmletter_5_found false
123
*temp hmletter_6 "t"
124
*temp hmletter_6_found false
125
*goto hang_man_top
126
127
*label hmword_7
128
*temp hmword "mouse"
129
*temp hmletter_count 5
130
*temp hmletter_1 "m"
131
*temp hmletter_1_found false
132
*temp hmletter_2 "o"
133
*temp hmletter_2_found false
134
*temp hmletter_3 "u"
135
*temp hmletter_3_found false
136
*temp hmletter_4 "s"
137
*temp hmletter_4_found false
138
*temp hmletter_5 "e"
139
*temp hmletter_5_found false
140
*goto hang_man_top
141
142
*label hmword_8
143
*temp hmword "badger"
144
*temp hmletter_count 6
145
*temp hmletter_1 "b"
146
*temp hmletter_1_found false
147
*temp hmletter_2 "a"
148
*temp hmletter_2_found false
149
*temp hmletter_3 "d"
150
*temp hmletter_3_found false
151
*temp hmletter_4 "g"
152
*temp hmletter_4_found false
153
*temp hmletter_5 "e"
154
*temp hmletter_5_found false
155
*temp hmletter_6 "r"
156
*temp hmletter_6_found false
157
*goto hang_man_top
158
159
*label hmword_9
160
*temp hmword "elephant"
161
*temp hmletter_count 8
162
*temp hmletter_1 "e"
163
*temp hmletter_1_found false
164
*temp hmletter_2 "l"
165
*temp hmletter_2_found false
166
*temp hmletter_3 "e"
167
*temp hmletter_3_found false
168
*temp hmletter_4 "p"
169
*temp hmletter_4_found false
170
*temp hmletter_5 "h"
171
*temp hmletter_5_found false
172
*temp hmletter_6 "a"
173
*temp hmletter_6_found false
174
*temp hmletter_7 "n"
175
*temp hmletter_7_found false
176
*temp hmletter_8 "t"
177
*temp hmletter_8_found false
178
*goto hang_man_top
179
180
*label hmword_10
181
*temp hmword "meerkat"
182
*temp hmletter_count 7
183
*temp hmletter_1 "m"
184
*temp hmletter_1_found false
185
*temp hmletter_2 "e"
186
*temp hmletter_2_found false
187
*temp hmletter_3 "e"
188
*temp hmletter_3_found false
189
*temp hmletter_4 "r"
190
*temp hmletter_4_found false
191
*temp hmletter_5 "k"
192
*temp hmletter_5_found false
193
*temp hmletter_6 "a"
194
*temp hmletter_6_found false
195
*temp hmletter_7 "t"
196
*temp hmletter_7_found false
197
*goto hang_man_top
198
199
*comment -- / END THE WORDS --
200
201
202
203
*label hang_man_top
204
*comment Going to "hang_man_top" label basically refreshes the page information, via the routine below.
205
*gosub hangman_parse
206
207
*comment GAME MENU/INTERFACE
208
*choice
209-
		*comment convert input to lowercase:
209+
210
		*goto hang_man_top
211
	*if (hm_lives = 0) #YOU LOSE!!
212
		*goto hang_man_top
213
	*if ((hm_lives != 0) and (hmvictory != true)) #Guess a Letter
214
		*label guess_letter
215
		*gosub hangman_parse
216
		What letter?
217
		*temp str
218
		*input_text str
219
		*comment convert input to lowercase for easier matching:
220
		*script temps.str = temps.str.toLowerCase();
221
		*temp n 1
222
		*temp count 0
223
		*temp this_letter
224-
		*comment reset n
224+
		*comment Seeing as we can't limit length in input fields, the following loop
225
		*comment makes sure that input string matches the value of a single letter.
226
		*comment If for some reason it doesn't, it prints an error and prompts re-entry.
227
		*label check_letter_loop
228
		*set this_letter ({"l"&n})
229
		*if (this_letter != str)
230
			*if (n < 26)
231
				*comment if we've not checked the input against all 26 letters, check the next one.
232
				*set n + 1
233
				*goto check_letter_loop
234
			*line_break
235
			Error: '${str}' is not a letter.
236
			*line_break
237
			*goto guess_letter
238
		*comment reset n (count variable) for next loop
239
		*set n 1
240
		*comment Once we know the input is a valid letter we can check that letter against the word itself.
241
		*comment The following loop checks the input string (letter) against all the letters of the word in play.
242
		*comment Note that if we get a match we still carry on searching the rest as a letter may appear more than once.
243
		*label guess_letter_loop
244
		*set this_letter {("hmletter_"&n)}
245
		*if (this_letter = str)
246
			*comment Mark the letter as found/which in turn will tell the parse routine to display it.
247-
		*comment convert input to lowercase:
247+
248
			*set count + 1
249
		*if (n < hmletter_count)
250
			*set n + 1
251-
			*comment show all letters
251+
252
		*comment Tell the player how many matches there were for that letter.
253
		${count} letters matched.
254
		*comment If there were no matches, i.e. the player guessed wrong, we deduct a life.
255
		*if (count = 0)
256
			*line_break
257
			Life lost.
258
			*line_break
259
			*set hm_lives - 1
260
		*line_break
261
		*goto hang_man_top
262
	*if ((hm_lives != 0) and (hmvictory != true)) #Guess the Word
263
		*gosub hangman_parse
264-
	#QUIT
264+
265-
		*goto_scene act0
265+
266-
*set hm_lives - 1
266+
267
		*comment convert input to lowercase for easier matching:
268
		*script temps.str = temps.str.toLowerCase();
269
		*comment Check if the input string matches the word...
270
		*if (str = hmword)
271
			*set hmvictory true
272
			*comment The following loop just sets all the word's letters to 'found'/true so they're displayed on screen.
273
			*temp n 1
274
			*label guessed_word_loop
275
			*setref (("hmletter_"&n)&"_found") true
276
			*if (n != hmletter_count)
277
				*set n + 1
278
				*goto guessed_word_loop
279
			*goto hang_man_top
280
		*else
281
			*comment If it doesn't set the lives to 0 and reset the screen, essentially causing an instant game over.
282
			*set hm_lives 0
283
			*goto hang_man_top
284
	#Start Over
285
		*comment Reset the game
286
		*goto hm_reset
287
288
*comment This whole routine is responsible for printing the text display
289
*label hangman_parse
290
The Word: 
291
*temp n 1
292
*temp count 0
293
*comment This loop checks every letter's (in the active word) found status - if it's not been found (false) then we print an underscore.
294
*comment If it has been found, we print that letter instead.
295
*label hmword_print_loop
296
*temp this_letter {(("hmletter_"&n)&"_found")}
297
*if (this_letter != true)
298
	_
299
*if (this_letter)
300
	*set this_letter {("hmletter_"&n)}
301
	*set count + 1
302
	${this_letter}
303
*if (n < hmletter_count)
304
	*set n + 1
305
	*goto hmword_print_loop
306
*comment Check for victory
307
*if (count = hmletter_count)
308
	*set hmvictory true
309
*comment Print hangman diagram parts based on current lives.
310
*line_break
311
*line_break
312
*if (hm_lives < 5)
313
	_____
314
*line_break
315
*if (hm_lives < 6)
316
	|/
317
*if (hm_lives < 4)	
318
	|
319
*line_break
320
*if (hm_lives < 7)
321
	|
322
*if (hm_lives < 3)
323
	(x)
324
*line_break
325
*if (hm_lives < 8)
326
	|
327
*if (hm_lives < 2)
328
	/|\
329
*line_break
330
*if (hm_lives < 9)
331
	|
332
*if (hm_lives < 1)
333
	/ \
334
*line_break
335
*if (hm_lives < 10)
336
	|\_
337
*line_break
338
*line_break
339
*comment Display remaining lives to the player.
340
Lives: ${hm_lives}
341
*line_break
342
*line_break
343
344
*return