mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-05 20:40:25 -08:00
198 lines
6.5 KiB
Python
198 lines
6.5 KiB
Python
MAX_UNITS = 72000
|
|
plane_crash_win = False
|
|
usr_army = 0
|
|
usr_navy = 0
|
|
usr_air = 0
|
|
cpu_army = 30000
|
|
cpu_navy = 20000
|
|
cpu_air = 22000
|
|
|
|
|
|
def show_intro() -> None:
|
|
global MAX_UNITS
|
|
|
|
print(" " * 32 + "COMBAT")
|
|
print(" " * 14 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
|
|
print("\n\n")
|
|
print("I AM AT WAR WITH YOU.")
|
|
print(f"WE HAVE {str(MAX_UNITS)} SOLDIERS APIECE.")
|
|
|
|
|
|
def get_forces() -> None:
|
|
global usr_army, usr_navy, usr_air
|
|
|
|
while True:
|
|
print("DISTRIBUTE YOUR FORCES.")
|
|
print(" ME YOU")
|
|
print(f"ARMY {str(cpu_army)} ? ", end="")
|
|
usr_army = int(input())
|
|
print(f"NAVY {str(cpu_navy)} ? ", end="")
|
|
usr_navy = int(input())
|
|
print(f"A. F. {str(cpu_air)} ? ", end="")
|
|
usr_air = int(input())
|
|
if (usr_army + usr_navy + usr_air) <= MAX_UNITS:
|
|
break
|
|
|
|
|
|
def attack_first() -> None:
|
|
global usr_army, usr_navy, usr_air
|
|
global cpu_army, cpu_navy, cpu_air
|
|
|
|
unit_type = 0
|
|
|
|
while True:
|
|
print("YOU ATTACK FIRST. TYPE (1) FOR ARMY; (2) FOR NAVY;")
|
|
print("AND (3) FOR AIR FORCE.")
|
|
print("?", end=" ")
|
|
unit_type = int(input())
|
|
if unit_type >= 1 and unit_type <= 3:
|
|
break
|
|
|
|
num_units = 0
|
|
while True:
|
|
print("HOW MANY MEN")
|
|
print("?", end=" ")
|
|
num_units = int(input())
|
|
if (
|
|
num_units >= 0
|
|
and (unit_type != 1 or num_units <= usr_army)
|
|
and (unit_type != 2 or num_units <= usr_navy)
|
|
and (unit_type != 3 or num_units <= usr_air)
|
|
):
|
|
break
|
|
|
|
if unit_type == 1:
|
|
if num_units < (usr_army / 3):
|
|
print(f"YOU LOST {str(num_units)} MEN FROM YOUR ARMY.")
|
|
usr_army = usr_army - num_units
|
|
elif num_units < (2 * usr_army / 3):
|
|
print(f"YOU LOST {int(num_units / 3)} MEN, BUT I LOST {int(2 * cpu_army / 3)}")
|
|
usr_army = int(usr_army - (num_units / 3))
|
|
cpu_army = 0
|
|
else:
|
|
print("YOU SUNK ONE OF MY PATROL BOATS, BUT I WIPED OUT TWO")
|
|
print("OF YOUR AIR FORCE BASES AND 3 ARMY BASES.")
|
|
usr_army = int(usr_army / 3)
|
|
usr_air = int(usr_air / 3)
|
|
cpu_navy = int(2 * cpu_navy / 3)
|
|
elif unit_type == 2:
|
|
if num_units < cpu_navy / 3:
|
|
print("YOUR ATTACK WAS STOPPED!")
|
|
usr_navy = usr_navy - num_units
|
|
elif num_units < 2 * cpu_navy / 3:
|
|
print(f"YOU DESTROYED {int(2 * cpu_navy / 3)} OF MY ARMY.")
|
|
cpu_navy = int(cpu_navy / 3)
|
|
else:
|
|
print("YOU SUNK ONE OF MY PATROL BOATS, BUT I WIPED OUT TWO")
|
|
print("OF YOUR AIR FORCE BASES AND 3 ARMY BASES.")
|
|
usr_army = int(usr_army / 3)
|
|
usr_air = int(usr_air / 3)
|
|
cpu_navy = int(2 * cpu_navy / 3)
|
|
elif unit_type == 3:
|
|
if num_units < usr_air / 3:
|
|
print("YOUR ATTACK WAS WIPED OUT.")
|
|
usr_air = usr_air - num_units
|
|
elif num_units < 2 * usr_air / 3:
|
|
print("WE HAD A DOGFIGHT. YOU WON - AND FINISHED YOUR MISSION.")
|
|
cpu_army = int(2 * cpu_army / 3)
|
|
cpu_navy = int(cpu_navy / 3)
|
|
cpu_air = int(cpu_air / 3)
|
|
else:
|
|
print("YOU WIPED OUT ONE OF MY ARMY PATROLS, BUT I DESTROYED")
|
|
print("TWO NAVY BASES AND BOMBED THREE ARMY BASES.")
|
|
usr_army = int(usr_army / 4)
|
|
usr_navy = int(usr_navy / 3)
|
|
cpu_army = int(2 * cpu_army / 3)
|
|
|
|
|
|
def attack_second() -> None:
|
|
global usr_army, usr_navy, usr_air, cpu_army, cpu_navy, cpu_air
|
|
global plane_crash_win
|
|
unit_type = 0
|
|
|
|
print()
|
|
print(" YOU ME")
|
|
print("ARMY ", end="")
|
|
print("%-14s%s\n" % (usr_army, cpu_army), end="")
|
|
print("NAVY ", end="")
|
|
print("%-14s%s\n" % (usr_navy, cpu_navy), end="")
|
|
print("A. F. ", end="")
|
|
print("%-14s%s\n" % (usr_air, cpu_air), end="")
|
|
|
|
while True:
|
|
print("WHAT IS YOUR NEXT MOVE?")
|
|
print("ARMY=1 NAVY=2 AIR FORCE=3")
|
|
print("? ", end="")
|
|
unit_type = int(input())
|
|
if unit_type >= 1 and unit_type <= 3:
|
|
break
|
|
|
|
num_units = 0
|
|
while True:
|
|
print("HOW MANY MEN")
|
|
print("? ", end="")
|
|
num_units = int(input())
|
|
if (
|
|
num_units >= 0
|
|
and (unit_type != 1 or num_units <= usr_army)
|
|
and (unit_type != 2 or num_units <= usr_navy)
|
|
and (unit_type != 3 or num_units <= usr_air)
|
|
):
|
|
break
|
|
|
|
if unit_type == 1:
|
|
if num_units < (cpu_army / 2):
|
|
print("I WIPED OUT YOUR ATTACK!")
|
|
usr_army = usr_army - num_units
|
|
else:
|
|
print("YOU DESTROYED MY ARMY!")
|
|
cpu_army = 0
|
|
elif unit_type == 2:
|
|
if num_units < (cpu_navy / 2):
|
|
print("I SUNK TWO OF YOUR BATTLESHIPS, AND MY AIR FORCE")
|
|
print("WIPED OUT YOUR UNGUARDED CAPITOL.")
|
|
usr_army = int(usr_army / 4)
|
|
usr_navy = int(usr_navy / 2)
|
|
else:
|
|
print("YOUR NAVY SHOT DOWN THREE OF MY XIII PLANES,")
|
|
print("AND SUNK THREE BATTLESHIPS.")
|
|
cpu_air = int(2 * cpu_air / 3)
|
|
cpu_navy = int(cpu_navy / 2)
|
|
elif unit_type == 3:
|
|
if num_units > (cpu_air / 2):
|
|
print("MY NAVY AND AIR FORCE IN A COMBINED ATTACK LEFT")
|
|
print("YOUR COUNTRY IN SHAMBLES.")
|
|
usr_army = int(usr_army / 3)
|
|
usr_navy = int(usr_navy / 3)
|
|
usr_air = int(usr_air / 3)
|
|
else:
|
|
print("ONE OF YOUR PLANES CRASHED INTO MY HOUSE. I AM DEAD.")
|
|
print("MY COUNTRY FELL APART.")
|
|
plane_crash_win = True
|
|
|
|
if not plane_crash_win:
|
|
print()
|
|
print("FROM THE RESULTS OF BOTH OF YOUR ATTACKS,")
|
|
|
|
if plane_crash_win or (
|
|
(usr_army + usr_navy + usr_air) > (int(3 / 2 * (cpu_army + cpu_navy + cpu_air)))
|
|
):
|
|
print("YOU WON, OH! SHUCKS!!!!")
|
|
elif (usr_army + usr_navy + usr_air) < int(2 / 3 * (cpu_army + cpu_navy + cpu_air)):
|
|
print("YOU LOST-I CONQUERED YOUR COUNTRY. IT SERVES YOU")
|
|
print("RIGHT FOR PLAYING THIS STUPID GAME!!!")
|
|
else:
|
|
print("THE TREATY OF PARIS CONCLUDED THAT WE TAKE OUR")
|
|
print("RESPECTIVE COUNTRIES AND LIVE IN PEACE.")
|
|
|
|
|
|
def main() -> None:
|
|
show_intro()
|
|
get_forces()
|
|
attack_first()
|
|
attack_second()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|