Clase Numero 20 – Repaso Clases, objetos, atributos y metodos

Ejercicio Soldados

"""
Ejercicio con clases y objetos que
enfrenta dos batallones con distintos (random)
atributos de ataque y defensa y calcula el
vencedor
"""

import random as R


class Soldado(object):

    def __init__(self, color, potAt, potEs):
        self.color = color
        self.potAt = potAt
        self.potEs = potEs
        self.vida = 100

    def atacar(self):
        at = R.randint(0, 100)
        de = R.randint(0, 100)
        print(self.color, " at ", at, " de ", de)
        return [at, de]

    def restarVida(self, cant):
        if cant > 0:
            self.vida -= cant

    def estaMuerto(self):
        x = self.vida

        if x < 0:
            print("Muerto: ", self.color)
            return True
        return False


class Guerra(object):

    def __init__(self, cantMaxSold, colorBando1, colorBando2):
        self.bando1 = []
        self.bando2 = []

        self.bando1 = self.llenarConSoldados(colorBando1, cantMaxSold)
        self.bando2 = self.llenarConSoldados(colorBando2, cantMaxSold)

    def llenarConSoldados(self, color, cantMaxSold):
        lista = []

        cantidad = R.randint(1, cantMaxSold)
        for x in range(cantidad):
            at = R.randint(1, 100)
            de = R.randint(1, 100)
            lista.append(Soldado(color, at, de))
        return lista

    def luchar(self):
        cant = max(len(self.bando1), len(self.bando2))
        print("LUCHARAN: ", cant)
        while cant > 0 and self.haySoldados():
            rb1 = R.randint(0, len(self.bando1)-1)
            rb2 = R.randint(0, len(self.bando2)-1)

            res1 = self.bando1[rb1].atacar()
            res2 = self.bando2[rb2].atacar()

            self.bando1[rb1].restarVida(res2[0]-res1[1])
            self.bando2[rb2].restarVida(res1[0]-res2[1])

            if self.bando1[rb1].estaMuerto():
                s = self.bando1[rb1]
                self.bando1.remove(s)

            if self.bando2[rb2].estaMuerto():
                s = self.bando2[rb2]
                self.bando2.remove(s)
        print("resultado")
        t1 = len(self.bando1)
        if t1 > 0:
            print(self.bando1[0].color, " soldados: ", t1)
        t2 = len(self.bando2)
        if t2 > 0:
            print(self.bando2[0].color, " soldados: ", t2)

    def haySoldados(self):
        return len(self.bando1) > 0 and len(self.bando2) > 0


def main():
    g = Guerra(25, "china", "eeuu")
    g.luchar()


main()

Resultado

>>> %Run soldados.py
LUCHARAN:  18
china  at  82  de  42
eeuu  at  12  de  44
china  at  81  de  30
eeuu  at  55  de  22
china  at  51  de  31
eeuu  at  11  de  56
china  at  69  de  3
eeuu  at  72  de  67
china  at  9  de  45
eeuu  at  32  de  68
china  at  43  de  48
eeuu  at  86  de  7
china  at  36  de  91
eeuu  at  68  de  45
china  at  42  de  70
eeuu  at  84  de  100
china  at  53  de  48
eeuu  at  84  de  15
china  at  73  de  52
eeuu  at  65  de  37
china  at  85  de  68
eeuu  at  26  de  27
china  at  36  de  48
eeuu  at  53  de  78
china  at  20  de  88
eeuu  at  32  de  15
china  at  15  de  51
eeuu  at  38  de  97
china  at  71  de  43
eeuu  at  80  de  68
china  at  22  de  50
eeuu  at  100  de  64
china  at  92  de  57
eeuu  at  17  de  12
Muerto:  eeuu
china  at  49  de  93
eeuu  at  45  de  98
china  at  12  de  7
eeuu  at  13  de  56
china  at  39  de  41
eeuu  at  96  de  79
china  at  11  de  94
eeuu  at  84  de  84
china  at  75  de  35
eeuu  at  4  de  67
china  at  66  de  5
eeuu  at  52  de  39
china  at  75  de  57
eeuu  at  97  de  85
Muerto:  china
china  at  59  de  61
eeuu  at  96  de  35
china  at  100  de  1
eeuu  at  75  de  23
Muerto:  china
Muerto:  eeuu
china  at  22  de  71
eeuu  at  2  de  97
china  at  79  de  13
eeuu  at  88  de  73
Muerto:  china
china  at  85  de  81
eeuu  at  62  de  14
china  at  28  de  74
eeuu  at  4  de  65
china  at  16  de  9
eeuu  at  85  de  71
china  at  18  de  46
eeuu  at  59  de  69
china  at  80  de  81
eeuu  at  82  de  22
china  at  99  de  7
eeuu  at  74  de  97
Muerto:  china
china  at  27  de  63
eeuu  at  75  de  100
china  at  38  de  25
eeuu  at  6  de  65
china  at  99  de  93
eeuu  at  38  de  24
Muerto:  eeuu
china  at  14  de  44
eeuu  at  43  de  8
Muerto:  eeuu
china  at  26  de  24
eeuu  at  29  de  36
china  at  63  de  75
eeuu  at  39  de  85
china  at  18  de  88
eeuu  at  53  de  17
china  at  54  de  50
eeuu  at  46  de  90
china  at  63  de  91
eeuu  at  72  de  86
china  at  39  de  18
eeuu  at  21  de  70
china  at  46  de  52
eeuu  at  64  de  33
china  at  71  de  1
eeuu  at  38  de  35
china  at  74  de  79
eeuu  at  79  de  47
Muerto:  eeuu
china  at  55  de  31
eeuu  at  3  de  6
Muerto:  eeuu
china  at  31  de  34
eeuu  at  82  de  34
china  at  46  de  52
eeuu  at  43  de  77
china  at  61  de  95
eeuu  at  18  de  81
china  at  77  de  70
eeuu  at  24  de  30
china  at  49  de  46
eeuu  at  87  de  53
Muerto:  china
china  at  82  de  89
eeuu  at  18  de  71
china  at  7  de  65
eeuu  at  41  de  58
china  at  26  de  50
eeuu  at  1  de  80
china  at  36  de  81
eeuu  at  60  de  37
china  at  87  de  39
eeuu  at  60  de  28
Muerto:  eeuu
china  at  65  de  75
eeuu  at  85  de  32
china  at  80  de  6
eeuu  at  52  de  97
Muerto:  china
china  at  15  de  95
eeuu  at  5  de  86
china  at  39  de  19
eeuu  at  63  de  51
china  at  58  de  10
eeuu  at  63  de  0
Muerto:  eeuu
china  at  87  de  92
eeuu  at  4  de  91
china  at  84  de  39
eeuu  at  100  de  99
Muerto:  china
china  at  70  de  42
eeuu  at  47  de  32
china  at  28  de  60
eeuu  at  45  de  35
china  at  98  de  84
eeuu  at  25  de  58
china  at  41  de  68
eeuu  at  65  de  14
Muerto:  eeuu
china  at  93  de  2
eeuu  at  91  de  58
Muerto:  china
Muerto:  eeuu
resultado
china  soldados:  10

Leave a Reply

Your email address will not be published. Required fields are marked *