

Here's a text-based implementation of "State of War" in Python. This turn-based strategy game lets you command armies and battle opponents:
import random
import time
class Unit:
def __init__(self, name, health, attack):
self.name = name
self.max_health = health
self.health = health
self.attack = attack
self.is_alive = True
def take_damage(self, damage):
self.health -= damage
if self.health <= 0:
self.health = 0
self.is_alive = False
def __str__(self):
return f"{self.name} (HP: {self.health}/{self.max_health}, ATK: {self.attack})"
class Army:
def __init__(self, name):
self.name = name
self.units = []
self.generate_units()
def generate_units(self):
unit_types = [
("Infantry", 100, 20),
("Tank", 150, 30),
("Artillery", 80, 40),
("Scout", 60, 15),
("Medic", 70, 10)
]
for unit_name, health, attack in random.choices(unit_types, k=5):
self.units.append(Unit(unit_name, health, attack))
def get_alive_units(self):
return [unit for unit in self.units if unit.is_alive]
def is_defeated(self):
return len(self.get_alive_units()) == 0
class Game:
def __init__(self):
self.player_army = Army("Player's Army")
self.enemy_army = Army("Enemy Army")
self.turn_count = 1
def display_armies(self):
print("\n" + "="*40)
print(f"TURN {self.turn_count}")
print("="*40)
print("\nYour Army:")
for unit in self.player_army.get_alive_units():
print(f" - {unit}")
print("\nEnemy Army:")
for unit in self.enemy_army.get_alive_units():
print(f" - {unit}")
def player_turn(self):
print("\n--- YOUR TURN ---")
player_units = self.player_army.get_alive_units()
enemy_units = self.enemy_army.get_alive_units()
if not player_units or not enemy_units:
return
for i, unit in enumerate(player_units):
print(f"\nSelect action for {unit}:")
print("1. Attack")
print("2. Defend")
while True:
choice = input("Enter choice (1-2): ")
if choice in ('1', '2'):
break
print("Invalid choice!")
if choice == '1': # Attack
print("\nEnemy targets:")
for j, target in enumerate(enemy_units):
print(f"{j+1}. {target}")
while True:
target_choice = input("Select target number: ")
if target_choice.isdigit() and 1 <= int(target_choice) <= len(enemy_units):
target = enemy_units[int(target_choice)-1]
break
print("Invalid target!")
damage = unit.attack + random.randint(-5, 5)
target.take_damage(damage)
print(f"\n{unit.name} attacks {target.name} for {damage} damage!")
if not target.is_alive:
print(f"{target.name} has been defeated!")
else: # Defend
print(f"{unit.name} takes a defensive stance!")
# In a more complex game, this could reduce incoming damage
input("\nPress Enter to end your turn...")
def enemy_turn(self):
print("\n--- ENEMY TURN ---")
player_units = self.player_army.get_alive_units()
enemy_units = self.enemy_army.get_alive_units()
if not player_units or not enemy_units:
return
for unit in enemy_units:
if random.random() < 0.3: # 30% chance to defend
print(f"\n{unit.name} takes a defensive stance!")
continue
# Attack random player unit
target = random.choice(player_units)
damage = unit.attack + random.randint(-5, 5)
target.take_damage(damage)
print(f"\n{unit.name} attacks {target.name} for {damage} damage!")
if not target.is_alive:
print(f"{target.name} has been defeated!")
input("\nPress Enter to continue...")
def check_victory(self):
if self.player_army.is_defeated():
print("\n*** DEFEAT! Your army has been destroyed! ***")
return False
elif self.enemy_army.is_defeated():
print("\n*** VICTORY! You have defeated the enemy! ***")
return False
return True
def play(self):
print("=== STATE OF WAR ===")
print("Command your army to victory!")
print("Each unit has Health (HP) and Attack (ATK) power.")
print("Defend when you need to recover, but attack to win!")
input("\nPress Enter to start battle...")
while True:
self.display_armies()
if not self.check_victory():
break
self.player_turn()
self.turn_count += 1
if not self.check_victory():
break
self.enemy_turn()
self.turn_count += 1
if __name__ == "__main__":
game = Game()
game.play()
How to Play:
- Run the game: Save the code as
state_of_war.pyand run it with Python 3 - Your Turn:
- Select action for each unit (Attack or Defend)
- When attacking, choose an enemy target
- Damage includes random variance (-5 to +5)
- Enemy Turn:
AI units will attack or defend randomly
- Victory Conditions:
- Win by destroying all enemy units
- Lose if all your units are defeated
Game Features:
- 5 randomly generated units per army
- 5 unit types with different stats
- Turn-based combat system
- Simple AI opponent
- Victory/defeat conditions
To Play:
- Copy the code into a Python file
- Run from terminal:
python state_of_war.py - Follow on-screen instructions
This is a complete, self-contained game that requires no external files or downloads. The game focuses on tactical decision-making with simple mechanics suitable for quick play sessions.
