Pyton
Игра имитирует бой между двумя игроками. Один управляется человеком, второй компьютером.
У каждого игрока есть выбор оружия: меч и копье, которое нужно выбрать перед боем. Человек вводит свой выбор
с клавиатуры, компьютер выбирает случайно.
У каждого игрока изначально есть 50 НР.
Копье наносит урон от с вероятностью 70%, урон может быть от 10 до 20.
Меч наносит урон от с вероятностью 50%, урон может быть от 15 до 25.
Игра продолжается до тех пор, пока у одного из игроков не закончится НР.
Answers & Comments
Ответ:
Корявенько конечно, но вроде работает)
import random
import time
#Костыль
CHANCE70 = [1,1,1,1,1,1,1,0,0,0]
CHANCE50 = [1, 0]
class Weapon(object):
def __init__(self, hit_chance = [], dmg_range = (0, 0), wtype = None):
self.hit_chance = hit_chance
self.dmg = dmg_range
self.wtype = wtype
def __str__(self):
return self.wtype
def attack(self, trg):
is_hit = random.choice(self.hit_chance)
if is_hit:
dmg = random.choice(range(self.dmg[0], self.dmg[1]))
trg.hp -= dmg
return (dmg)
else:
trg.msg('Miss!')
return 0
class Player(object):
def __init__(self, health = 50, weapon = None, name = 'AI'):
self.hp = health
self.wp = weapon
self.name = name
def msg(self, msg):
print(f'<{self.name}>: ' + msg)
def wname_to_hc(wname):
if wname == 'sword':
return CHANCE50
return CHANCE70
def wname_to_dmg_rng(wname):
if wname == 'sword':
return (15, 25)
return (10, 20)
def main():
player_weapon = input('Choose your weapon (spear, sword):\n').lower()
assert player_weapon in ['spear', 'sword']
player = Player(weapon=Weapon( hit_chance=wname_to_hc(player_weapon ), dmg_range= wname_to_dmg_rng(player_weapon), wtype=player_weapon), name='You')
bot_weapon = random.choice(['spear','sword'])
bot = Player(weapon= Weapon( hit_chance=wname_to_hc(bot_weapon), dmg_range= wname_to_dmg_rng(bot_weapon), wtype=bot_weapon ) )
print(f'Your enemy choosen {str(bot.wp)}!')
vs = [player, bot]
choose = [0, 1]
time.sleep(2)
while True:
hit = vs[choose[0]].wp.attack(vs[choose[1]])
if hit:
print(f'Player <{vs[choose[0]].name}> dealed <{vs[choose[1]].name}> {hit} dmg')
print(f'Player <{vs[choose[0]].name}> has {vs[choose[0]].hp} left')
print(f'Player <{vs[choose[1]].name}> has {vs[choose[1]].hp} left')
if vs[choose[0]].hp <= 0:
print(vs[choose[1]].name + ' wins!')
break
elif vs[choose[1]].hp <= 0:
print(vs[choose[0]].name + ' Wins!')
break
time.sleep(1)
choose.reverse()
if __name__ == '__main__':
main()
Объяснение: