Example #1
0
class Game:
    def __init__(self, mapFile, enemies=[Enemy(10, 10, 1), Enemy(11, 10, 1)]):
        self.player = Player()
        self.enemies = enemies
        self.prevLoc = (self.player.getX(), self.player.getY())
        self.map = [[]]
        self.items = [Weapon(WeaponType.SWORD, 3, 3)]
        with open(mapFile, "r") as mapTxt:
            for line in mapTxt.readlines():
                self.map.append(self.split(line.rstrip()))
            self.updatePlayer()

    def updatePlayer(self, direction=Direction.UP, isTick=True):
        self.map[self.prevLoc[1]][self.prevLoc[0]] = " "
        self.map[self.player.getY()][self.player.getX()] = direction.value
        self.player.setDirection(direction)
        self.prevLoc = (self.player.getX(), self.player.getY())
        self.updateMap(isTick)

    def updateMap(self, isTick=True):
        os.system('cls' if os.name == 'nt' else 'clear')
        # 🛡
        if isTick:
            self.updateEntities()
            self.updateItems()
            print("Tick")
        else:
            print("Not tick")
        printMap = f"\n{TermColors.OKGREEN}{self.player}{TermColors.ENDC}\n"
        for arr in self.map:
            printMap += self.convert(arr)
        print(printMap)

    def move(self, direction):
        if self.player.entityCanMove(direction, self.map):
            if direction == Direction.UP:
                self.player.moveUp()
            elif direction == Direction.LEFT:
                self.player.moveLeft()
            elif direction == Direction.RIGHT:
                self.player.moveRight()
            elif direction == Direction.DOWN:
                self.player.moveDown()
            self.updatePlayer(direction)
        else:
            self.updatePlayer(direction, False)

    def performAction(self):
        direction = self.player.getDirection()
        location = (self.player.getX(), self.player.getY())
        if direction == Direction.UP:
            location = (location[0], location[1] - 1)
        elif direction == Direction.DOWN:
            location = (location[0], location[1] + 1)
        elif direction == Direction.LEFT:
            location = (location[0] - 2, location[1])
        elif direction == Direction.RIGHT:
            location = (location[0] + 2, location[1])
        for item in self.items:
            itemLocation = item.getLocation()
            print(
                f"item x: {itemLocation[0]}, item y: {itemLocation[1]}, statement evaluates to {itemLocation[0] == location[0]//2 + 1 and itemLocation[1] == location[1]}"
            )
            if itemLocation[0] == location[0] and itemLocation[1] == location[
                    1]:
                print("We did it")
                self.getItem(item)
        for index, enemy in enumerate(self.enemies):
            enemyLocation = enemy.getCurrentLocation()
            print(
                f"Enemy health: {enemy.getHealth()}, enemy location: {enemyLocation}, location in front of player: ({location[0]//2 + 1}, {location[1]})"
            )
            if enemyLocation[0] == location[0] // 2 + 1 and enemyLocation[
                    1] == location[1]:
                enemy.removeHealth(self.player.getDamage())
                print(enemy.checkIfDead())
                if enemy.checkIfDead():
                    print("Dead")
                    del (self.enemies[index])
                    self.items.append(enemy.dropItem())
                self.updatePlayer(self.player.getDirection(), True)

    def switchWeapon(self, index):
        self.player.setSelectedWeapon(index)

    def getItem(self, item):
        self.map[item.getX() // 2 + 1][item.getY()] = " "
        self.player.addItemToInv(item)
        self.items.remove(item)
        self.updatePlayer(self.player.getDirection(), True)

    def updateEntities(self):
        for enemy in self.enemies:
            enemy.updateEntity(self.map, self.player)

    def updateItems(self):
        for item in self.items:
            self.map[item.getY()][item.getX()] = "+"

    def split(self, str):
        return [char for char in str]

    def convert(self, arr):
        string = ""
        for char in arr:
            string += char
        return string