From 2b1c65352472b387caf0e13fbd78b0b2706a76a3 Mon Sep 17 00:00:00 2001 From: Daniel Piron Date: Sat, 20 Feb 2021 13:28:05 -0500 Subject: [PATCH] Attack portion as partial functions --- 11 Bombardment/python/bombardment.py | 52 ++++++++++++++++------------ 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/11 Bombardment/python/bombardment.py b/11 Bombardment/python/bombardment.py index 4320803a..5bc3765e 100755 --- a/11 Bombardment/python/bombardment.py +++ b/11 Bombardment/python/bombardment.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import random +from functools import partial def display_intro(): print("" * 33 + "BOMBARDMENT") @@ -67,6 +68,18 @@ def prompt_player_for_target(): return target +def attack(target, positions, hit_message, miss_message, progress_messages): + + if target in positions: + print(hit_message.format(target)) + positions.remove(target) + print(progress_messages[len(positions)].format(target)) + + print(miss_message.format(target)) + + return len(positions) == 0 + + # Messages correspond to outposts remaining (3, 2, 1, 0) PLAYER_PROGRESS_MESSAGES = ( "YOU GOT ME, I'M GOING FAST. BUT I'LL GET YOU WHEN\n" @@ -93,33 +106,28 @@ def play(): enemy_positions = generate_enemy_positions() player_positions = prompt_for_player_positions() - print(enemy_positions) + # Build partial functions only requiring the target as input + player_attacks = partial(attack, + positions=enemy_positions, + hit_message="YOU GOT ONE OF MY OUTPOSTS!", + miss_message="HA, HA YOU MISSED. MY TURN NOW:\n\n", + progress_messages=PLAYER_PROGRESS_MESSAGES) + + enemy_attacks = partial(attack, + positions=player_positions, + hit_message="I GOT YOU. IT WON'T BE LONG NOW. POST {} WAS HIT.", + miss_message="I MISSED YOU, YOU DIRTY RAT. I PICKED {}. YOUR TURN:\n\n", + progress_messages=ENEMY_PROGRESS_MESSAGES) + while True: target = prompt_player_for_target() - - if target in enemy_positions: - print("YOU GOT ONE OF MY OUTPOSTS!") - enemy_positions.remove(target) - - outposts_left = len(enemy_positions) - print(PLAYER_PROGRESS_MESSAGES[outposts_left]) - if outposts_left == 0: - break + if (player_attacks(target)): + break else: - print("HA, HA YOU MISSED. MY TURN NOW:\n\n") - - target = random.randint(1, 25) - if target in player_positions: - print("I GOT YOU. IT WON'T BE LONG NOW. POST", target, "WAS HIT.") - player_positions.remove(target) - - outposts_left = len(player_positions) - print(ENEMY_PROGRESS_MESSAGES[len(player_positions)].format(target)) - if outposts_left == 0: + target = random.randint(1, 25) + if (enemy_attacks(target)): break - else: - print("I MISSED YOU, YOU DIRTY RAT. I PICKED", target, ". YOUR TURN:\n\n") if __name__ == "__main__":