MTN1_X_BASE = -125
MTN1_Y_BASE = -250
MTN1_X_PEAK = 25
MTN1_Y_PEAK = 100
CLIMBER_X_START = -125
CLIMBER_Y_START = -225
def display_word(progress):
for i in range(len(progress)):
x_pos = -200 + i * 25
text = codesters.Text(progress[i], x_pos, 225).set_size(1.5)
def display_guesses(guesses):
row_length = 6
num_rows = int(math.ceil(len(guesses) / float(row_length)))
for i in range(0, num_rows):
row = guesses[i*row_length:i*row_length+row_length]
for j in range(len(row)):
codesters.Text(row[j], 100 + j * 25,
225 - i * 25)
def display_climber(x, y):
climber = codesters.Sprite("person1", x, y)
climber.set_size(0.5)
return climber
def update_progress(letter, answer, progress):
i = 0
for char in answer:
if char == letter:
progress[i] = letter
i += 1
return progress
def display_background():
sky = codesters.Square(0, 0, 500, "SkyBlue")
ground = codesters.Rectangle(-0, -200, 500, 100, "green")
# sprite = codesters.Triangle3Pts(x1, y1, x2, y2, x3, y3, "color")
mtn1 = codesters.Triangle3Pts(MTN1_X_BASE, MTN1_Y_BASE,
MTN1_X_PEAK, MTN1_Y_PEAK,
MTN1_X_PEAK+150, -250,
"SaddleBrown")
# sprite = codesters.Triangle3Pts(x1, y1, x2, y2, x3, y3, "color")
mtn2_x = MTN1_X_PEAK + 125
mtn_x_diff = 175
mtn2 = codesters.Triangle3Pts(mtn2_x-mtn_x_diff, -250,
mtn2_x, 50,
mtn2_x+mtn_x_diff, -250,
"SaddleBrown")
def climb_up(climber, dist):
climber.towards(MTN1_X_PEAK, MTN1_Y_PEAK)
climber.set_speed(1.5)
climber.forward(dist)
climber.setheading(0)
return climber
def slip_down(climber, dist):
climber.towards(MTN1_X_PEAK, MTN1_Y_PEAK)
climber.set_speed(1.5)
climber.backward(dist)
climber.setheading(0)
return climber
def go_to_coordinate(climber, x, y):
climber.towards(MTN1_X_PEAK, MTN1_Y_PEAK)
climber.set_speed(1.5)
climber.glide_to(x, y)
climber.setheading(0)
return climber
def validate_input(input):
if len(input) > 1:
return False
return input.isalpha()
def main():
answer = random.choice(['photon'])
progress = []
guesses = []
misses = 0
for letter in answer:
progress.append('_')
display_background()
display_word(progress)
climber = display_climber(CLIMBER_X_START,
CLIMBER_Y_START)
total_dist = climber.distance(MTN1_X_PEAK,
MTN1_Y_PEAK)
unique_letters = []
for letter in answer:
if letter not in unique_letters:
unique_letters.append(letter)
incremental_dist = total_dist / len(unique_letters)
while progress != list(answer) and misses < 10:
letter = climber.ask("Choose a letter.")
if not validate_input(letter):
climber.say("You must enter 1 letter only.")
stage.wait(2)
continue
letter = letter.lower()
guesses.append(letter)
if letter in answer:
progress = update_progress(letter, answer,
progress)
climber = climb_up(climber,
incremental_dist)
climber.say("Good choice!")
else:
if (climber.get_x() != CLIMBER_X_START and
climber.get_y() != CLIMBER_Y_START):
climber = slip_down(climber,
incremental_dist/2)
climber.say("Not so lucky this time.")
misses += 1
stage.wait(1)
display_background()
display_word(progress)
display_guesses(guesses)
climber = display_climber(climber.get_x(),
climber.get_y())
if progress == list(answer):
climber = go_to_coordinate(climber,
MTN1_X_PEAK,
MTN1_Y_PEAK)
message = "I made it to the top!"
else:
climber = go_to_coordinate(climber,
CLIMBER_X_START,
CLIMBER_Y_START)
message = "I was tired and I\n" \
"had to turn around."
display_background()
display_word(progress)
display_guesses(guesses)
climber = display_climber(climber.get_x(),
climber.get_y())
climber.say(message)
if __name__ == "__main__":
main()