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()
  • Run Code
  • Show Console
  • Codesters How To (opens in a new tab)