Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding=utf-8
- """
- Programa para probar cosas en Fate
- """
- import random
- NUM_DADOS = 4
- NUM_COMBATES = 100000
- combatiente_1 = {'Ataque': 6,
- 'Defensa': 2}
- combatiente_2 = {'Ataque': 3,
- 'Defensa': 4}
- casillas = [1, 2, 3, 2, 4, 6]
- # casilZas = [2, 4, 6]
- def tirada():
- """
- Devuelve el resultado de una tirada de fate
- """
- resultado = 0
- for i in range(0, NUM_DADOS):
- resultado += random.randrange(-1, 1)
- return resultado
- def ataque(atacante, defensor):
- """
- Devuelve el daño de un ataque
- @param atacante: Diccionario personaje atacante
- @param defensor: Diccionar personade defensor
- """
- tirada_ataque = atacante['Ataque'] + tirada()
- tirada_defensa = defensor['Defensa'] + tirada()
- dano = tirada_ataque - tirada_defensa
- return dano
- def aplicaDano(dano, casillas_pj):
- """
- Aplica el daño a un contador de casillas
- @param dano: Cantidad de daño
- @param casillas_pj: Lista con las casillas a tachar ordenadas por prioridad
- """
- casillas_posibles = []
- for casilla in casillas_pj:
- if dano > 0:
- dano -= casilla
- casillas_posibles.append(casilla)
- else:
- break
- if dano > 0:
- # Muerto
- return []
- if dano < 0:
- # Hemos marcado demasiadas, ver si podemos librar una,
- # empezando por la más importante
- for casilla in reversed(casillas_posibles):
- if casilla <= abs(dano):
- casillas_posibles.remove(casilla)
- dano += casilla
- # Eliminar las casillas
- for casilla in casillas_posibles:
- casillas_pj.remove(casilla)
- return casillas_pj
- def combate():
- """
- Resuelve un combate
- """
- rondas = 0
- casillas_1 = list(casillas)
- casillas_2 = list(casillas)
- boost_1 = 0
- boost_2 = 0
- while casillas_1 and casillas_2:
- rondas += 1
- ataque_1 = ataque(combatiente_1, combatiente_2) + boost_1
- boost_1 = 0
- if ataque_1 > 0:
- aplicaDano(ataque_1, casillas_2)
- elif ataque_1 == 0:
- boost_1 = 2
- elif ataque_1 < -2:
- boost_2 = 2
- ataque_2 = ataque(combatiente_2, combatiente_1) + boost_2
- boost_2 = 0
- if ataque_2 > 0:
- aplicaDano(ataque_2, casillas_1)
- elif ataque_2 == 0:
- boost_2 = 0
- elif ataque_2 < -2:
- boost_1 = 2
- if casillas_1:
- return 1, rondas
- else:
- return 2, rondas
- if __name__ == "__main__":
- numero_combates = 0.0
- ganados = {1: 0, 2: 0}
- duracion_total = 0
- for indice in range(0, NUM_COMBATES):
- print("Combate %s" % indice)
- numero_combates += 1
- ganador, ronda = combate()
- ganados[ganador] += 1
- duracion_total += ronda
- print("Realizados %d combates" % NUM_COMBATES)
- print("Luchador 1 ha ganado: %d, el %.5f" % (ganados[1],
- ganados[1] / numero_combates))
- print("Luchador 2 ha ganado: %d, el %.5f" % (ganados[2],
- ganados[2] / numero_combates))
- print("Duracion media: %.2f" % (duracion_total / numero_combates))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement