Demostração de Jogo de RPG em Texto 

Aceito sugestões de melhoria do código

import os
import random 

MAPA = [
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"],
        ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"], ["[", " ", "]"]
    ]
    
class Player:
    
    def __init__(self):
        
        self.hp = 10
        self.ataque = 5
        self.defesa = 8
        self.agilidade = 6
        
    def atacar(self, enemy):
        
        dano = random.randint(1, self.ataque)
        
        if enemy.agilidade < dano:
            
            if self.ataque > enemy.defesa:
                
                enemy.hp -= self.ataque - enemy.defesa
                
                if enemy.hp < 0:
                    enemy.hp = 0
        
class Enemy:
    
    def __init__(self):
        
        self.hp = 5
        self.ataque = 2
        self.defesa = 2
        self.agilidade = 3
        
    def atacar(self, enemy):
        
        dano = random.randint(1, self.ataque)
        
        if enemy.agilidade < dano:
            
            if self.ataque > enemy.defesa:
                
                enemy.hp = self.ataque - enemy.defesa

class StartGame:
    
    def __init__(self):
        
        self.x = 38
        self.y = 1
        self.enemy = Enemy()
        self.player = Player()
        
    def run(self):
        
        count = 0
        
        for elemento in MAPA:
            for i in range(3):
                print(elemento[i], end=" ")
            
            count += 1
            
            if count == 4:
                count = 0
                print()
                
    def mover(self, x, y, item):
        
        print("Direita(a) Cima(w) Direita(d) Baixo(s) Voltar(v)")
        direcao = input("Escolha >>> ")
        if direcao == "a":
            MAPA[self.x][self.y] = " "
            self.x -= 1
            MAPA[self.x][self.y] = "P"
        if direcao == "w":
            MAPA[self.x][self.y] = " "
            self.x -= 4
            MAPA[self.x][self.y] = "P"
        if direcao == "d":
            MAPA[self.x][self.y] = " "
            self.x += 1
            MAPA[self.x][self.y] = "P"
        if direcao == "s":
            MAPA[self.x][self.y] = " "
            self.x += 4
            MAPA[self.x][self.y] = "P"
            
    def ataque_player(self, enemy):
        
        print("Atacar(a) Defender(d) Habilidade(h) Menu(M)")
        ataque = input("Escolha >>> ")
        if ataque == "a":
            self.player.atacar(enemy)
        
            
    def combate(self, player, enemy):
        
        continua = True
        while continua:
            os.system("clear")
            print(f'HP {self.player.hp}%')
            print(f'HP Enemy {self.enemy.hp}%')
            print()
            self.ataque_player(self.enemy)
            
            if enemy.hp == 0:
                continua = False
                
            self.enemy.atacar(self.player)
            
            if player.hp == 0:
                continua = False
            
        
if __name__ == "__main__":
    
    start = StartGame()
    
    MAPA[start.x][start.y] = "P"
    
    loop = True
    
    while loop:
        start.run()
        
        print("Andar(a), Menu(m) Salvar(s) Carregar(c) Sair(q)")
        opcao = input("Escolha >>> ")
        
        if opcao == "a":

            loop_mover = True
            
            while loop_mover:
                os.system("clear")
                start.run()
                start.mover(start.x, start.y, MAPA[start.x][start.y])
                
                enemy_ataque = random.randint(0, 5)
                start.combate(start.player, start.enemy)
                   
                    
            
        
        
        

Comentários