import random, math
def Shot_Result(acc, morale, power, armor):
Morale = {1: 1., 2: 0.75, 3: 0.5, 4: 0.25}
actual_acc = acc * Morale[morale]
roll = random.random()
if roll < actual_acc:
dmg = max(0,math.floor((power-armor)/2))
else:
dmg = -1
return dmg
def main(Red, Blue):
red_rate, red_acc, red_armor, red_pow = Red
blue_rate, blue_acc, blue_armor, blue_pow = Blue
red_health = blue_health = 10
red_morale = blue_morale = 1
red_shots = [("Red", shot/100.) for shot in range(0,10000,int(red_rate*100))]
blue_shots = [("Blue", shot/100.) for shot in range(0,10000,int(blue_rate*100))]
Shots = sorted(red_shots + blue_shots, key=lambda x: x[1])
print "{:^6}|{:^6}|{:^12}|{:^12}|{:^12}|{:^12}|".format("Shot","Time","Red Health","Blue Health","Red Morale","Blue Morale")
for shot in Shots:
if shot[0] == "Red":
dmg = Shot_Result(red_acc, red_morale, red_pow, blue_armor)
if dmg >= 0:
blue_health -= dmg
blue_morale = min(blue_morale+1,4)
else:
blue_morale = max(blue_morale-1,1)
else:
dmg = Shot_Result(blue_acc, blue_morale, blue_pow, red_armor)
if dmg >= 0:
red_health -= dmg
red_morale = min(red_morale+1,4)
else:
red_morale = max(red_morale-1,1)
print "{:^6}|{:^6}|{:^12}|{:^12}|{:^12}|{:^12}|".format(shot[0], shot[1], red_health, blue_health, red_morale, blue_morale)
if red_health <= 0:
print "Blue tank is victorious!"
break
if blue_health <= 0:
print "Red tank is victorious!"
break
else:
print "It's a draw!"#
main((8.5,0.5,15,20),(6.5,.6,10,20)) #Fire Rate, accuracy, power, armor
aW1wb3J0IHJhbmRvbSwgbWF0aAoKZGVmIFNob3RfUmVzdWx0KGFjYywgbW9yYWxlLCBwb3dlciwgYXJtb3IpOgogICAgTW9yYWxlID0gezE6IDEuLCAyOiAwLjc1LCAzOiAwLjUsIDQ6IDAuMjV9CiAgICBhY3R1YWxfYWNjID0gYWNjICogTW9yYWxlW21vcmFsZV0KICAgIHJvbGwgPSByYW5kb20ucmFuZG9tKCkKICAgIGlmIHJvbGwgPCBhY3R1YWxfYWNjOgogICAgICAgIGRtZyA9IG1heCgwLG1hdGguZmxvb3IoKHBvd2VyLWFybW9yKS8yKSkKICAgIGVsc2U6CiAgICAgICAgZG1nID0gLTEKCiAgICByZXR1cm4gZG1nCgoKZGVmIG1haW4oUmVkLCBCbHVlKToKICAgIHJlZF9yYXRlLCByZWRfYWNjLCByZWRfYXJtb3IsIHJlZF9wb3cgPSBSZWQKICAgIGJsdWVfcmF0ZSwgYmx1ZV9hY2MsIGJsdWVfYXJtb3IsIGJsdWVfcG93ID0gQmx1ZQoKICAgIHJlZF9oZWFsdGggPSBibHVlX2hlYWx0aCA9IDEwCiAgICByZWRfbW9yYWxlID0gYmx1ZV9tb3JhbGUgPSAxCgogICAgcmVkX3Nob3RzID0gWygiUmVkIiwgc2hvdC8xMDAuKSBmb3Igc2hvdCBpbiByYW5nZSgwLDEwMDAwLGludChyZWRfcmF0ZSoxMDApKV0KICAgIGJsdWVfc2hvdHMgPSBbKCJCbHVlIiwgc2hvdC8xMDAuKSBmb3Igc2hvdCBpbiByYW5nZSgwLDEwMDAwLGludChibHVlX3JhdGUqMTAwKSldCgogICAgU2hvdHMgPSBzb3J0ZWQocmVkX3Nob3RzICsgYmx1ZV9zaG90cywga2V5PWxhbWJkYSB4OiB4WzFdKQoKICAgIHByaW50ICJ7Ol42fXx7Ol42fXx7Ol4xMn18ezpeMTJ9fHs6XjEyfXx7Ol4xMn18Ii5mb3JtYXQoIlNob3QiLCJUaW1lIiwiUmVkIEhlYWx0aCIsIkJsdWUgSGVhbHRoIiwiUmVkIE1vcmFsZSIsIkJsdWUgTW9yYWxlIikKCiAgICBmb3Igc2hvdCBpbiBTaG90czoKICAgICAgICBpZiBzaG90WzBdID09ICJSZWQiOgogICAgICAgICAgICBkbWcgPSBTaG90X1Jlc3VsdChyZWRfYWNjLCByZWRfbW9yYWxlLCByZWRfcG93LCBibHVlX2FybW9yKQogICAgICAgICAgICBpZiBkbWcgPj0gMDoKICAgICAgICAgICAgICAgIGJsdWVfaGVhbHRoIC09IGRtZwogICAgICAgICAgICAgICAgYmx1ZV9tb3JhbGUgPSBtaW4oYmx1ZV9tb3JhbGUrMSw0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYmx1ZV9tb3JhbGUgPSBtYXgoYmx1ZV9tb3JhbGUtMSwxKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRtZyA9IFNob3RfUmVzdWx0KGJsdWVfYWNjLCBibHVlX21vcmFsZSwgYmx1ZV9wb3csIHJlZF9hcm1vcikKICAgICAgICAgICAgaWYgZG1nID49IDA6CiAgICAgICAgICAgICAgICByZWRfaGVhbHRoIC09IGRtZwogICAgICAgICAgICAgICAgcmVkX21vcmFsZSA9IG1pbihyZWRfbW9yYWxlKzEsNCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJlZF9tb3JhbGUgPSBtYXgocmVkX21vcmFsZS0xLDEpCgogICAgICAgIHByaW50ICJ7Ol42fXx7Ol42fXx7Ol4xMn18ezpeMTJ9fHs6XjEyfXx7Ol4xMn18Ii5mb3JtYXQoc2hvdFswXSwgc2hvdFsxXSwgcmVkX2hlYWx0aCwgYmx1ZV9oZWFsdGgsIHJlZF9tb3JhbGUsIGJsdWVfbW9yYWxlKQoKICAgICAgICBpZiByZWRfaGVhbHRoIDw9IDA6CiAgICAgICAgICAgIHByaW50ICJCbHVlIHRhbmsgaXMgdmljdG9yaW91cyEiCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgYmx1ZV9oZWFsdGggPD0gMDoKICAgICAgICAgICAgcHJpbnQgIlJlZCB0YW5rIGlzIHZpY3RvcmlvdXMhIgogICAgICAgICAgICBicmVhawogICAgZWxzZTogICAgICAgIAogICAgICAgIHByaW50ICJJdCdzIGEgZHJhdyEiIyAKICAgICAgICAKbWFpbigoOC41LDAuNSwxNSwyMCksKDYuNSwuNiwxMCwyMCkpICAgICNGaXJlIFJhdGUsIGFjY3VyYWN5LCBwb3dlciwgYXJtb3IgICAgCg==