From dc65b242d9ce9010e3062076c8522ed0f2596204 Mon Sep 17 00:00:00 2001 From: Leonid-Murzinov Date: Sun, 20 Nov 2022 14:30:58 +0300 Subject: [PATCH] =?UTF-8?q?backend:=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=20=D0=B4=D1=83=D1=8D=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/textsouls/models.py | 53 ++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/backend/textsouls/models.py b/backend/textsouls/models.py index ca5d817..abf16bd 100644 --- a/backend/textsouls/models.py +++ b/backend/textsouls/models.py @@ -1,6 +1,9 @@ import datetime +from random import randint + from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.orm import backref from sqlalchemy_serializer import SerializerMixin @@ -196,5 +199,53 @@ class Duel(db.Model, SerializerMixin): db.DateTime, nullable=False, default=datetime.datetime.now() ) participants = db.relationship( - "DuelParticipants", backref="duel", lazy="dynamic" + "DuelParticipants", + backref=backref("duel", order_by="DuelParticipants.turn_order.asc()"), + lazy="dynamic", ) + + def attack(attacked_character, defensive_character): + defensive_character_endurance = ( + attacked_character.attack_power + - defensive_character.endurance_base + ) + + return defensive_character_endurance + + def defence(defensive_character): + procced = False + if randint(1 * defensive_character.defence_chance, 50) == 50: + procced is True + + return procced + + def dodge(defensive_character): + procced = False + if randint(1 * defensive_character.dodge_chance, 50) == 50: + procced is True + + return procced + + def duel_one_to_one(self): + + character_first = self.participants[0] + character_second = self.participants[1] + + while ( + character_first.endurance_base > 0 + and character_second.endurance_base > 0 + ): + if not self.defence(character_second) or not self.dodge( + character_second + ): + self.attack(character_first, character_second) + if not self.defence(character_first) or not self.dodge( + character_second + ): + self.attack(character_second, character_first) + if character_first.endurance_base > 0: + return character_first.name + elif character_second.character_second > 0: + return character_second.name + else: + return "Ничья"