Skip to content

Instantly share code, notes, and snippets.

@wgeorgecook
Created June 24, 2019 17:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wgeorgecook/74a5ec21d728866a1c91a7523f42be1b to your computer and use it in GitHub Desktop.
Save wgeorgecook/74a5ec21d728866a1c91a7523f42be1b to your computer and use it in GitHub Desktop.
class Equipment:
pass
class Weapon(Equipment):
def __init__(self, damage):
self.damage = damage
class Armour(Equipment):
def __init__(self, defence):
self.defence = defence
class Character:
def __init__(self, name, startingHealth):
self.name = name
self.health = startingHealth
self.equipment = []
def speak(self):
print("%s makes a sound" % self.name)
def takeDamage(self, attacker, amount):
# Prevent healing from damage
if amount < 0:
print("Can't take negative damage")
return
# Reduce the character's health by the amount of damage
self.health -= amount
print("%s took %d damage from %s" % (self.name, amount, attacker.name))
def displayStats(self):
print("== %s ==" % self.name)
print("Health: %d" % self.health)
print()
def equip(self, equipment):
self.equipment.append(equipment)
def getAttackPower(self):
totalAP = 0
for item in self.equipment:
if isinstance(item, Weapon):
totalAP += item.damage
return totalAP
class Game:
def __init__(self):
# Create the characters
self.playerCharacter = Character("Player", 100)
self.enemyCharacter = Character("Enemy", 50)
# Give the characters some weapons
self.playerCharacter.equip(Weapon(10))
self.enemyCharacter.equip(Weapon(5))
self.currentCharacter = self.playerCharacter
self.gameOver = False
def getNextCharacter(self):
# TODO: Refactor this for more than 2 characters eventually
if self.currentCharacter is self.playerCharacter:
self.currentCharacter = self.enemyCharacter
else:
self.currentCharacter = self.playerCharacter
return self.currentCharacter
def displayStats(self):
self.playerCharacter.displayStats()
self.enemyCharacter.displayStats()
def getOtherCharacter(self):
if self.currentCharacter is self.playerCharacter:
return self.enemyCharacter
else:
return self.playerCharacter
def isOver(self):
return self.playerCharacter.health <= 0 or self.enemyCharacter.health <= 0
game = Game()
# While the game is running
while True:
# Display the characters' stats
game.displayStats()
print("%s's turn" % game.currentCharacter.name)
# Perform the battle action for the current character
game.getOtherCharacter().takeDamage(game.currentCharacter, game.currentCharacter.getAttackPower())
# Change characters
currentCharacter = game.getNextCharacter()
if game.isOver():
break
print("Game Over")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment