Created
June 24, 2019 17:01
-
-
Save wgeorgecook/74a5ec21d728866a1c91a7523f42be1b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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