Advertisement
Guest User

Untitled

a guest
Aug 15th, 2014
1,330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import random
  2. import math
  3.  
  4. def play(totals, player, win, can_attack, hand):
  5. if win != -1:
  6. return totals, win, can_attack, hand[player]
  7. else:
  8. for i in range(3):
  9. tar = math.floor(random.random() * float(len(totals[0]) + len(totals[1])))
  10. if ((tar < len(totals[0])) and (len(totals[0]) < 9)):
  11. totals[0][tar] -= 1
  12. if ((totals[0][tar] <= 0) and (tar != 0)):
  13. totals[0].pop(tar)
  14. can_attack[0].pop(tar)
  15. elif ((totals[0][tar] <= 0) and (tar <= 0)):
  16. totals[player].append(2)
  17. return totals, 1, can_attack, (hand[player]-1)
  18. elif ((tar >= len(totals[0])) and (len(totals[0]) < 9)):
  19. totals[1][tar-len(totals[0])] -= 1
  20. if ((totals[1][tar-len(totals[0])] <= 0) and ((tar-len(totals[0])) != 0)):
  21. totals[1].pop(tar-len(totals[0]))
  22. can_attack[1].pop(tar-len(totals[0]))
  23. elif ((totals[1][tar-len(totals[0])] <= 0) and ((tar-len(totals[0])) <= 0)):
  24. totals[player].append(2)
  25. return totals, 0, can_attack, (hand[player]-1)
  26. else:
  27. return totals, -1, can_attack, hand
  28. totals[player].append(2)
  29. can_attack[player].append(False)
  30. return totals, -1, can_attack, (hand[player]-1)
  31.  
  32. def attack(can_attack, player):
  33. dmg = 0
  34. for i in can_attack[player]:
  35. if i:
  36. dmg += 3
  37. return dmg
  38.  
  39. def wakeup(can_attack, player):
  40. for i in range(1,len(can_attack[player])):
  41. if not can_attack[player][i]:
  42. can_attack[player][i] = True
  43. return can_attack
  44.  
  45. def hero_power(totals, player, toon, atk_list):
  46. opp = int(math.cos((math.pi/2.0) * player))
  47. if toon == "huntard":
  48. totals[opp][0] -= 2
  49. elif toon == "wario":
  50. totals[player][0] += 2
  51. elif toon == "durid":
  52. totals[opp][0] -= 1
  53. totals[player][0] += 1
  54. elif toon == "jaina":
  55. min_health = 150816
  56. mindex = 0
  57. boop = totals[opp]
  58. for i in range(len(boop)):
  59. if ((boop[i] < min_health) and (boop[i] > 0)):
  60. mindex = i
  61. min_health = boop[i]
  62. totals[opp][mindex] -= 1
  63. elif toon == "uther":
  64. totals[player].append(1)
  65. atk_list[player].append(False)
  66. else:
  67. return totals, atk_list
  68. return totals, atk_list
  69.  
  70. win_counter = 0
  71. turn_counter = 0
  72. iterations = 100000
  73. toon = ["uther", "durid"]
  74.  
  75. #testurds
  76. #print("hp")
  77. #print(boards[0])
  78. #print(boards[1])
  79.  
  80. for i in range(iterations):
  81. boards = [[30], [30]]
  82. attack_list = [[False], [False]]
  83. mana = 2
  84. win = -1
  85. n=2
  86. hand_size = [5,5]
  87.  
  88. boards, win, attack_list, hand_size[1] = play(boards, 1, win, attack_list, hand_size)
  89. while win == -1:
  90. attack_list = wakeup(attack_list, 0)
  91. hand_size[0] += 1
  92.  
  93. hp = True
  94. for i in range(math.floor(mana/2)):
  95. if (((math.floor(mana/2) - 1) > hand_size[0]) and hp):
  96. boards, attack_list = hero_power(boards, 0, toon[0], attack_list)
  97. hp = False
  98. elif hand_size[0] > 0:
  99. boards, win, attack_list, hand_size[0] = play(boards, 0, win, attack_list, hand_size)
  100. boards[1][0] -= attack(attack_list, 0)
  101. hp = False
  102. if boards[1][0] <= 0:
  103. win = 0
  104. n += 1
  105.  
  106. attack_list = wakeup(attack_list, 1)
  107. hand_size[1] += 1
  108. hp = True
  109. for i in range(math.floor(mana/2)):
  110. if (((math.floor(mana/2) - 1) > hand_size[1]) and hp):
  111. boards, attack_list = hero_power(boards, 1, toon[1], attack_list)
  112. hp = False
  113. elif hand_size[1] > 0:
  114. boards, win, attack_list, hand_size[1] = play(boards, 1, win, attack_list, hand_size)
  115. boards[0][0] -= attack(attack_list, 1)
  116. if boards[0][0] <= 0:
  117. win = 1
  118. n += 1
  119.  
  120. mana += 1
  121.  
  122. win_counter += win
  123. turn_counter += n
  124.  
  125. print("coin winrate: " + str(100.0 * (float(win_counter)/float(iterations))) + "\navg turn count: " + str(float(turn_counter)/float(iterations)) + "\ntested over " + str(iterations) + " iterations")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement