рд░рдЪрдирд╛ рдмрдирд╛рдо рд╡рд┐рд░рд╛рд╕рдд, рдЯреАрдо рдкреИрдЯрд░реНрди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЦреЗрд▓ рд╡рд┐рдХрд╛рд╕


рдЕрд╕реНрд╡реАрдХрд░рдг: рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рди рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрдгрд┐рдд рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрд░ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рднреА рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╣рд▓ рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЙрд╕рдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рд╣реИрдВред рдФрд░ рдпрд╣ рдЕрдиреБрднрд╡, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдЕрдиреНрдп рд╕рднреА рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рд╕реАрдЦрддрд╛ рд╣реИ, рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЦреБрдж рдХреЛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЕрдиреБрднрд╡ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдХрд▓рд╛ рдФрд░ рддрдХрдиреАрдХреА рднрд╛рдЧ рдХреЗ рдмреАрдЪ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреНрд░рдпреЛрдЧ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
- рд╕реБрдиреЛ, рдореИрдВ рдПрдХ рдорд╣рд╛рди рдЦреЗрд▓ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛! - рдЧреЗрдо рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рд╡рд╛рд╕реНрдпрд╛ рдХреЛ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ, рдФрд░ рдЙрдирдХреА рдЖрдБрдЦреЗрдВ рд▓рд╛рд▓ рд╣реЛ рдЧрдИрдВред рдореИрдВрдиреЗ рдЕрднреА рднреА рдЦрдбрд╝реЗ-рдЦрдбрд╝реЗ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдмреЗ рдкрд░ рдХреЙрдлреА рдФрд░ рд╣реЛрд▓реАрд╡рд░ рдкрд┐рдпрд╛ред рдЬрдм рддрдХ рдореИрдВ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛, рддрдм рддрдХ рдЙрд╕рдиреЗ рдореЗрд░реА рдУрд░ рдЙрдореНрдореАрдж рд╕реЗ рджреЗрдЦрд╛ред рд╡рд╛рд╕рд┐рдпрд╛ рдХреЛ рдкрддрд╛ рдерд╛ рдХрд┐ рдЬрдм рддрдХ рдиреНрдпрд╛рдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдЪреНрдЪрд╛рдИ рдХрд╛ рдмрдЪрд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рддрдм рддрдХ рдореЗрд░реЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рд╛ рдФрд░ рдЙрд╕рдХреА рддрд░рдл рджреЗрдЦрд╛ред

- рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдореИрдирд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рджреВрдЧрд░ рдордВрддреНрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпреЛрджреНрдзрд╛ рдХрд░реАрдмреА рд▓рдбрд╝рд╛рдИ рдореЗрдВ рд▓рдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣рдирд╢рдХреНрддрд┐ рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рджреВрдЧрд░ рдФрд░ рдпреЛрджреНрдзрд╛ рджреЛрдиреЛрдВ рд╣рд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдБ, рд╡рд╣рд╛рдБ рдЕрднреА рднреА рдЧрд╛рдпреЛрдВ рдХреЛ рд▓реВрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд░ рд▓реЗрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдк рд╕реНрдЯреИрдВрдб-рдЕрдк рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рджрд┐рдЦрд╛рдПрдВрдЧреЗ, рдареАрдХ рд╣реИ?

рд╡рд╣ рдЕрдкрдиреЗ рдЦреЗрд▓ рдбрд┐рдЬрд╛рдЗрди рд╡реНрдпрд╡рд╕рд╛рдп рдкрд░ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЖрдИрдбреАрдИ рдЦреЛрд▓рд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рд╖рдп "рд░рдЪрдирд╛ рдмрдирд╛рдо рд╡рд┐рд░рд╛рд╕рдд", "рдХреЗрд▓рд╛-рдмрдВрджрд░ рд╕рдорд╕реНрдпрд╛", "рд░реЛрдореНрдмрд╕ рд╕рдорд╕реНрдпрд╛ (рдмрд╣реБ рд╡рд┐рд░рд╛рд╕рдд)" рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдФрд░ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рд╣реИрдВред рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрднрд╡рд╣реАрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдУрдУрдкреА рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ (рдпрд╛ рдЬреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╕реНрдорд╛рд░реНрдЯ рдЪреАрдЬреЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ) рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрдирд╛ рдЕрдкрдирд╛ рдХрд░реНрддрд╡реНрдп рд╕рдордЭрддреЗ рд╣реИрдВред рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрддреНрддрд░ рд╣реИ "рд░рдЪрдирд╛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдЧреНрд░реЗ рдХреЗ рдХрд┐рд╕реА рднреА рд╢реЗрдб рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред" рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рд░ рдЙрддреНрддрд░ рдХреЛ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ рд╡реЗ 100% рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛ рдерд╛, рдкреНрд░рддреНрдпреЗрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рд╡рд┐рд░рд╛рд╕рдд рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреЗрд▓реЗ рдХреЗ рд╕рд╛рде рдмрдВрджрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ - рдЗрд╕реЗ рдмрдирд╛рдПрдВред рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреБрдЫ рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛ред рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдПрдлрдкреАрдПрд╕ рдЖрдкрдХреЛ рд╣рдВрд╕рд╛рдПрдЧрд╛ред

class Character { x = 0; y = 0; moveTo (x, y) { this.x = x; this.y = y; } } class Mage extends Character { mana = 100; castSpell () { this.mana--; } } class Warrior extends Character { stamina = 100; meleeHit () { this.stamina--; } } 

рд╕реНрдЯреИрдВрдб-рдЕрдк, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рдХреБрд░реНрд╕реА рдкрд░ рдкрддреНрдерд░ рдорд╛рд░рд╛ рдФрд░ рдлреЛрди рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛, рдЬрдмрдХрд┐ рдЬреВрди рдкреЗрдЯрд┐рдпрд╛ рдиреЗ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рд╕рд╣реА рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд╡рд░рд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╣реАрдВ рднреА рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреВрд░реНрд╡-рдЙрддреНрдкрд╛рджрди рд╡рд┐рднрд╛рдЧ рдХреЛ рдХрд╛рд░реНрдп рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдХ рдиреЗ рддрд░реНрдХ рджрд┐рдпрд╛ рдХрд┐ рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджрд╛рд╣рд┐рдиреЗ рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЦрд┐рд▓рд╛рдбрд╝реА, рдЬреЛ рдпреБрджреНрдз рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреВрд░реНрд╡-рдЙрддреНрдкрд╛рджрди рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдиреМрдХрд░рд╢рд╛рд╣реА рдорд╢реАрди рдЗрд╕реЗ 4 рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧреАред рдорд╣реАрдиреЛрдВ, рдФрд░ рдЗрд╕реЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ - рдЖрдк рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрдХ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рджреЗрд░ рд╣реЛ рдЪреБрдХреА рдереА, рдФрд░ рд▓реЛрдЧ рдЗрддрдиреЗ рднрдпрдВрдХрд░ рд░реВрдк рд╕реЗ рдХреЛрд╕ рд░рд╣реЗ рдереЗ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╣реА рдореИрдЯ рдкрд░ рдЬрд╛ рдЪреБрдХреЗ рдереЗ рдФрд░ рд╢рд╛рдпрдж, рд╕реНрдЯреВрдбрд┐рдпреЛ рдирд┐рджреЗрд╢рдХ рдиреЗ рд╢рд╛рдк рдореЗрдВ рди рдЬрд╛рдиреЗ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░, рдЬрд▓реНрдж рд╣реА рдПрдХ рд╡рд┐рд╡рд╛рдж рдореЗрдВ рдЖ рдЧрдПред рд╕рдВрднрд╡рдд: 300 рд░реБрдкрдпреЗ рдХрд╛ рдЬреБрд░реНрдорд╛рдирд╛ рдлрд┐рд░ рд╕реЗред

рдЬрдм рдореИрдВрдиреЗ рд░реИрд▓реА рдХрдХреНрд╖ рдЫреЛрдбрд╝рд╛, рддреЛ рдПрдХ рдЧреЗрдо рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рдФрд░ рдЦреБрд╢реА рд╕реЗ рдХрд╣рд╛ рдХрд┐ рд╕рднреА рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд╕рдВрдж рдЖрдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдФрд░ рдЕрдм рдЕрдЧрд▓реЗ рдЫрд╣ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЬрдм рд╣рдо рдореЗрд░реА рдореЗрдЬ рдХреА рдУрд░ рдЪрд▓ рд░рд╣реЗ рдереЗ, рддреЛ рдЙрд╕рдиреЗ рдЙрддреНрд╕рд╛рд╣ рд╕реЗ рдмрддрд╛рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реЛрдВрдЧреАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рддрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдордВрддреНрд░реЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд░рд╛рдЬрдкреВрдд рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдЧрд╛ рдЬреЛ рдЬрд╛рджреВ рд╕реЗ рд▓рдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рднрд╛рдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рдПрдирд┐рдореЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЪреАрди рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╕рдордЭреМрддреЗ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рдЪреБрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рдЙрдирдХреЗ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рдЪреБрдкрдЪрд╛рдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрд╛, рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реЛрдЪрд╛, рд╕рдм рдХреБрдЫ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХрд╛ рд╕рд╛рдордирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдПрдХ рдЯреАрдо рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдФрд░ рд╣рдорд╛рд░реА рдкреБрд░рд╛рдиреА "рд╡рд╛рд╕реНрддреБрдХрд▓рд╛" рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддреА рд╣реИред

рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рд╡реЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реВрдкреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдордЧрд░рдордЪреНрдЫ, рдЬреЛ рддреИрд░рдирд╛ рдФрд░ рджреМрдбрд╝рдирд╛ рджреЛрдиреЛрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреИрдВрдХ рдЬреЛ рдПрдХ рддреЛрдк рдпрд╛ рдПрдХ рдорд╢реАрди рдЧрди рдФрд░ рдЗрддрдиреЗ рдкрд░ рдЖрдЧ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдФрд░ рдЖрдкрдХреА рд╡рд┐рд░рд╛рд╕рдд рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлреНрд▓рд╛рдЗрдВрдЧрдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╕реНрд╡рд┐рдорд┐рдВрдЧрдСрдмреНрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд░рдЪрдирд╛ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ:

 class Character { abilities = []; addAbility (...abilities) { for (const a of abilities) { this.abilities.push(a); } return this; } getAbility (AbilityClass) { for (const a of this.abilities) { if (a instanceof AbilityClass) { return a; } } return null; } } /////////////////////////////////////// // //    ,      //       // /////////////////////////////////////// class Ability {} class HealthAbility extends Ability { health = 100; maxHealth = 100; } class MovementAbility extends Ability { x = 0; y = 0; moveTo(x, y) { this.x = x; this.y = y; } } class SpellCastAbility extends Ability { mana = 100; maxMana = 100; cast () { this.mana--; } } class MeleeFightAbility extends Ability { stamina = 100; maxStamina = 100; constructor (power) { this.power = power; } hit () { this.stamina--; } } /////////////////////////////////////// // //        // /////////////////////////////////////// class CharactersFactory { createMage () { return new Character().addAbility( new MovementAbility(), new HealthAbility(), new SpellCastAbility() ); } createWarrior () { return new Character().addAbility( new MovementAbility(), new HealthAbility(), new MeleeFightAbility(3) ); } createPaladin () { return new Character().addAbility( new MovementAbility(), new HealthAbility(), new SpellCastAbility(), new MeleeFightAbility(2) ); } } 

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╡ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрдм рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдлреЗрдВрдХрдХрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд░реНрдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдорд░ рдЬрд╛рджреВ рдХрд╛ рдкреЗрдбрд╝ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

 createMagicTree () { return new Character().addAbility( new SpellCastAbility() ); } 

рд╣рдордиреЗ рд╡рд┐рд░рд╛рд╕рдд рдЦреЛ рджреА рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд░рдЪрдирд╛ рджрд┐рдЦрд╛рдИ рджреАред рдЕрдм рд╣рдо рдПрдХ рдЪрд░рд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рд╣рдореЗрд╢рд╛ рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИ, рдмрд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рд╕рд╣реА рд╣реИ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд░рд┐рд╢реНрддреЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрдиреЗрдХреНрд╢рди "рд╣реИ-рдП" рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд▓реЗрдлрд╛рдЗрдЯрдмрд┐рд▓рд┐рдЯреА рдПрдХ рдХреНрд╖рдорддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХрджрдо рд╕рд╣реА рд╣реИред рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ "has-a" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд╢рд╛рдирджрд╛рд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдореЗрдВ рдордЬрд╛ рдЖрдпрд╛ред рдпрд╣ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдФрд░ рдмрдЧ рдХреЗ рдмрд┐рдирд╛, рдбреНрд░реАрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордп рдХреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд▓реЗрдХрд░ рдЗрддрдирд╛ рдЙрддреНрд╕рд╛рд╣реА рдерд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЬреВрди рдкреЗрдЯрд┐рдпрд╛ рдиреЗ рдореБрдЭрд╕реЗ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ред

рдЧрд▓реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрдзреЗрд░реА рдереА, рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджрд┐рдпрд╛ рдХрд┐ рд╡рд╣ рдХреИрд╕реЗ рдЦреБрд╢реА рд╕реЗ рдЪрдордХрддреА рдереАред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╡рд╣ рдХрд╛рд░реНрдп рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдореИрдЯ рдХреЗ рд▓рд┐рдП рджрдВрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд┐рд╕рдХреА рдШреЛрд╖рдгрд╛ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреА рдЧрдИ рдереАред

"рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдиреЗ рдмрд╕ рджрд┐рд╡реНрдп рдПрдирд┐рдореЗрд╢рди рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛," рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдмрд╛рдд рдХреА, "рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЦрд░рд╛рдм рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред" рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╡реНрдп рдЙрдбрд╝рд╛рди рдкреНрд▓рд╕ рдЬрдм рдПрдХ рдЙрдкрдЪрд╛рд░ рдордВрддреНрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдмрд╣реБрдд рд╣рд░реЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ рдкреНрд▓рд╕рд╕!

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╢рд╛рдк рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рджреГрд╢реНрдп рдХреЛ рдЦрд░рд╛рдм рдХрд░рдирд╛ рд╣реИред рдЕрд░реЗ, рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдореВрд░реНрдд рдФрд░ рд╡рдпрд╕реНрдХ рд╣реИ, рдФрд░ рдЖрдк "рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП" рдЬреВрди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реЛред рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЛ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд╣ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХреЗред рдЧреЗрдордбреЗрд╡ рдореЗрдВ, "рдЯреАрдо" рдкреИрдЯрд░реНрди рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд░рд╛рдЬреНрдп рд╣реИ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЯреАрдореЛрдВ рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЬрдм рдПрдХ рдЯреАрдо рджреВрд╕рд░реЗ рдХреЛ рдмреБрд▓рд╛рддреА рд╣реИ рддреЛ рд╡реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдардмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ
- рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдШрдЯрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ
- рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реАрд░рд┐рдпрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд╖рддрд┐ рдЖрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрдм рд╣реИ рдХрд┐ рдЬрдм рддрд▓рд╡рд╛рд░ рдФрд░ рдЬрд╛рджреВрдЧрд░ рдХреЛ рдЖрдЧ рдХреЗ рдЧреЛрд▓реЗ рд╕реЗ рдорд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпреЛрджреНрдзрд╛ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдЧрд╛ред рдЕрдм, рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдорд╛рдВрдб рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 class DealDamageCommand extends Command { constructor (target, damage) { this.target = target; this.damage = damage; } execute () { const healthAbility = this.target.getAbility(HealthAbility); if (healthAbility == null) { throw new Error('NoHealthAbility'); } const resultHealth = healthAbility.health - this.damage; healthAbility.health = Math.max( 0, resultHealth ); } } 

рдореБрдЭреЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдХрдорд╛рдВрдб рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рд╣реИ - рдЬрдм рдХрд┐рд╕реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрдИ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ , рдЬреЛ рддрдм рдЗрдВрдЬрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд╖рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╣рдо рд╣рд╛рдерд╛рдкрд╛рдИ рдХреА рд╣рдбрд╝рддрд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 class MeleeHitCommand extends Command { constructor (source, target, damage) { this.source = source; this.target = target; this.damage = damage; } execute () { const fightAbility = this.source.getAbility(MeleeFightAbility); if (fightAbility == null) { throw new Error('NoFightAbility'); } this.addChildren([ new DealDamageCommand(this.target, fightAbility.power); ]); } } 

рдЗрди рджреЛ рдЯреАрдореЛрдВ рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдПред рдПрдХ рд░реЗрдВрдбрд░рд░ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рд╕рдм рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд▓рд╛рдХрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 async onMeleeHit (meleeHitCommand) { await view.drawMeleeHit( meleeHitCommand.source, meleeHitCommand.target ); } async onDealDamage (dealDamageCommand) { await view.showDamageNumbers( dealDamageCommand.target, dealDamageCommand.damage ); } 

рдореИрдВрдиреЗ рдЧрд┐рдирддреА рдЦреЛ рджреА, рдЬреЛ рдПрдХ рдмрд╛рд░ рдореИрдВ рдЕрдВрдзреЗрд░реЗ рддрдХ рдХрд╛рдо рдкрд░ рд░рд╣рддрд╛ рд╣реВрдВред рдмрдЪрдкрди рд╕реЗ, рдЦреЗрд▓реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдиреЗ рдореБрдЭреЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛, рдпрд╣ рдореБрдЭреЗ рдХреБрдЫ рдЬрд╛рджреБрдИ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЕрдм рднреА, рдЬрдм рдореИрдВ рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд░рд╣рд╕реНрдп рд╕реАрдЦрд╛ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдЬрд╛рджреВ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЬрд╛рджреВ рдореБрдЭреЗ рд░рд╛рдд рдореЗрдВ рдРрд╕реА рдкреНрд░реЗрд░рдгрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реИред рд╡рд╕реНрдпрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдИред рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред

- рдпрд╣рд╛рдБ - рдЦреЗрд▓ рдбрд┐рдЬрд╛рдЗрдирд░ рдиреЗ рдореЗрд░реЗ рд╕рд╛рдордиреЗ A4 рд╢реАрдЯ рдкрд░ рдЫрдкреЗ 200 рдкрдиреНрдиреЛрдВ рдХреЗ рдПрдХ рддрд▓реНрдореВрдб рдХреЛ рд╕рд╛рдордиреЗ рд░рдЦрд╛ред рдпрджреНрдпрдкрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рдВрдЧрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рднреМрддрд┐рдХ рдЕрд╡рддрд╛рд░ рдореЗрдВ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдгреЛрдВ рдореЗрдВ рдореБрджреНрд░рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреГрд╖реНрда рдкрд░ рдЦреЛрд▓рд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдордВрддреНрд░реЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рдкрд░ рдкрд╛рдпрд╛, рдЬреЛ рдПрдХ рджрд╛рдирд╛ рдФрд░ рдкрд▓рд╛рдбрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдмреБрджреНрдзрд┐рдорддреНрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдорди рдХреА рдХреАрдордд рдФрд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд┐рд╡рд░рдг рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХрдИ рдорд╣реАрдиреЛрдВ рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдореИрдВ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдкрд░ рд░рд╣реВрдВрдЧрд╛ред
рд╣рдорд╛рд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдордВрддреНрд░ рдХреЗ рдЬрдЯрд┐рд▓ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред рдмрд╕ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрддрдиреА рдЙрди рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

 class CastSpellCommand extends Command { constructor (source, target, spell) { this.source = source; this.target = target; this.spell = spell; } execute () { const spellAbility = this.source.getAbility(SpellCastAbility); if (spellAbility == null) { throw new Error('NoSpellCastAbility'); } this.addChildren(new PayManaCommand(this.source, this.spell.manaCost)); this.addChildren(this.spell.getCommands(this.source, this.target)); } } class Spell { manaCost = 0; getCommands (source, target) { return []; } } class DamageSpell extends Spell { manaCost = 3; constructor (damageValue) { this.damageValue = damageValue; } getCommands (source, target) { return [ new DealDamageCommand(target, this.damageValue) ]; } } class HealSpell extends Spell { manaCost = 2; constructor (healValue) { this.healValue = healValue; } getCommands (source, target) { return [ new HealDamageCommand(target, this.healValue) ]; } } class VampireSpell extends Spell { manaCost = 5; constructor (value) { this.value = value; } getCommands (source, target) { return [ new DealDamageCommand(target, this.value), new HealDamageCommand(source, this.value) ]; } } 

рдбреЗрдврд╝ рд╕рд╛рд▓ рдмрд╛рдж

рд╕реНрдЯреИрдВрдб-рдЕрдк, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ред рдореИрдВ рдХреБрд░реНрд╕реА рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рд▓реИрдкрдЯреЙрдк рдореЗрдВ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЬрдмрдХрд┐ рдордзреНрдп рдкреЗрдЯреНрдпрд╛ рдиреЗ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рдмрд╣рд╕ рдХреА рдереА рдЬрд┐рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреВрд░реА рдИрдорд╛рдирджрд╛рд░реА рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рд╣рдорд╛рд░реЗ рдирдП рдЧреЗрдо рдореЗрдВ рд╕рд╣реА рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдХрдореА рдХреЛ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХрднреА рдЦрдбрд╝реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рдереЗ рдФрд░ рдпрд╣ рдЧреЗрдо рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдпрд╛ рдЧреНрд░рд╛рдлрд┐рдХ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдбреАрдЬрд╛ рд╡реВ рдХреА рднрд╛рд╡рдирд╛ рдереА, рд▓реЗрдХрд┐рди рдХрд▓рд╣ рдореЗрдВ рдПрдХ рдирдП рд╕рдВрджреЗрд╢ рдиреЗ рдореБрдЭреЗ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░ рджрд┐рдпрд╛:

- рд╕реБрдиреЛ - рдЦреЗрд▓ рдбрд┐рдЬрд╛рдЗрдирд░ рдиреЗ рд▓рд┐рдЦрд╛ - рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИ ...

Source: https://habr.com/ru/post/hi438510/


All Articles