
ASCII рдХрд▓рд╛ рдореЗрдВ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдШрдЯрдирд╛ рдХрддрд╛рд░, рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рд╕рдВрдЧреНрд░рд╣, рдИрд╕реАрдПрд╕ рд╕рдорд░реНрдерди рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде
рднрд╛рд▓реВ_ рд╣рдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреНрдпрд╛рдЧ- рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрдХреНрд╖рдкрд╛рддреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- bear_hug рдореВрд▓ рд░реВрдк рд╕реЗ рджрд╛рдврд╝реА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирд┐рдореНрди-рд╕реНрддрд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
- рдХреНрд▓рдмреИрдВрдбрд╡рд┐рдЪ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
Bear_hug рдХреЗ рд╣реБрдб рдХреЗ рддрд╣рдд, рдПрдХ рдЫрджреНрдо-рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ SDL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬреЛ bearlibterminal рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╢реБрджреНрдз TTY рдореЗрдВ, рдХреБрдЫ ncurses рдХреА рддрд░рд╣, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЪрд┐рддреНрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд░реНрдорд┐рдирд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк рдлрд╝реЙрдиреНрдЯ ASCII- рдХрд▓рд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рднрдЧрд╡рд╛рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдбреНрд░рд╛рдЗрдВрдЧ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдмрд╛рджрдмреЗрд╢рдХ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЦреЗрд▓ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдХреБрдЫ рд╕рд░рд▓ рдмрдирд╛рдПрдВрдЧреЗред рдПрдХ рд░рд╛рдд рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛, рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред рдирд╛рдореА - рдбрдВрдбреА рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реАрдВ рдЯреИрдВрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХреНрд▓реЛрди (рд╡реЗ рднреА рдмреИрдЯрд▓ рд╕рд┐рдЯреА рд╣реИрдВ)ред рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЯреИрдВрдХ, рджреБрд╢реНрдорди рдХреЗ рдЯреИрдВрдХ, рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рджреАрд╡рд╛рд░реЗрдВ, рдзреНрд╡рдирд┐ рдФрд░ рд╕реНрдХреЛрд░рд┐рдВрдЧ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдореЗрдиреВ, рд╕реНрддрд░ рдФрд░ рдЪрдпрдирд┐рдд рдмреЛрдирд╕ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рд╣реЙрд▓рд╡рд░реНрд▓реНрдб рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
рдПрдХ рдЧреЗрдордУрд╡рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЬреАрдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рдЬреАрд╡рди рдкреАрдбрд╝рд╛ рд╣реИредрд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рд╛рдордЧреНрд░реА
рдЧреАрдердм рдкрд░ рд╣реИ ; рдкреБрд╕реНрддрдХрд╛рд▓рдп
рднреА PyPI (MIT рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд) рдкрд░ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдЪрд╛рд╣рд┐рдПред ASCII рдХрд▓рд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдЬреНрдЮрд╛рди рдЧрд▓реНрдк рдмреИрдЧреЗрд▓
рдХреЛрдЧрдорд┐рдВрдб рдХреЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛, рдЬреЛрд╢ рдЬреА (рдЙрд░реНрдлрд╝ рдХрдЬрд╝рд░рд╛рддреА) рд╕реЗ
REXpaint рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддрд╛ рд╣реВрдВ ред рд╕рдВрдкрд╛рджрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ; рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рд╢рд░рд╛рдм рдХреЗ рддрд╣рдд рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

рд╣рдо рд╕реНрдерд╛рдиреАрдп рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рднрд╡рд┐рд╖реНрдп рдХреЗ рдЧреЗрдо рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
/path/to/rexpaint/images
рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, .txt рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдгреЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ ASCII рдХрд▓рд╛ рдХрд╛ рд╕рдВрдкрд╛рджрди рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЖрдХрд╛рд░ рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбреЗрдЯрд╛ рдПрдХ рдЕрд▓рдЧ JSON рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:
battlecity.json [ { "name": "player_r", "x": 1, "y": 2, "xsize": 6, "ysize": 6 }, { "name": "player_l", "x": 1, "y": 8, "xsize": 6, "ysize": 6 }, ... ]
рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рддрд╣рдд рд▓рдЧрддрд╛ рд╣реИред рдЕрдм рддрдХ, рдХреЗрд╡рд▓ .wav рд╕рдорд░реНрдерд┐рдд рд╣реИред рдпрд╣ рд╕рдм рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╣реИ, рдЖрдк рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдЗрд╡реЗрдВрдЯ рдХрддрд╛рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЯрд░реНрдорд┐рдирд▓ рдЦреЗрд▓ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрд┐рдбрд╝рдХреА рд╣реИред рдЖрдк рдЗрд╕ рдкрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ
рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЯрд░реНрдорд┐рдирд▓ рдмрдирд╛рддреЗ рд╕рдордп рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рд╕рднреА
рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдлрд╝реЙрдиреНрдЯ, рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ (рд╡рд░реНрдгреЛрдВ рдореЗрдВ), рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ, рдФрд░ рдмреНрдпрд╛рдЬ рдХреА рдЗрдирдкреБрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдИрд╡реЗрдВрдЯ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ: dispatcher.add_event (рдИрд╡реЗрдВрдЯ) рдХрддрд╛рд░ рдореЗрдВ рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ dispatcher.register_listener (рд╢реНрд░реЛрддрд╛, рдИрд╡реЗрдВрдЯ_рдЯрд╛рдЗрдкреНрд╕) рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдЬреЗрдЯ рдпрд╛ рдШрдЯрдХ) рдХреЗ рдкрд╛рд╕ рдПрдХ on_event рдХреЙрд▓рдмреИрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдПрдХ рдПрдХрд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдирд╛ рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╕реЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдШрдЯрдирд╛ рдореЗрдВ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ; рдпрд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ str рдпрд╛ int рдХреЗ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ "рд╡рд┐рд╡рд┐рдзрддрд╛" рдХреЗ рдЕрд░реНрде рдореЗрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'key_down' рдпрд╛ 'tick'ред рдХрддрд╛рд░ рдЗрд╕реЗ рдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдХреЗрд╡рд▓ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ) рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрди рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рднреЗрдЬрддреА рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдиреНрдп рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рдХрдиреНрд╡реЗрдВрд╢рди рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдЬреЗрдЯ рдпрд╛ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ on_event рд╡рд┐рдзрд┐ рдереАред
рдмрд┐рд▓реНрдЯ-рдЗрди рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╣реИ ред рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрд╖рддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╡рд╕реНрддреБрдПрдБ рд╣реЛрдВрдЧреА рдЬреЛ рдПрдХ рд╢реЙрдЯ (рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рджреАрд╡рд╛рд░реЛрдВ рдФрд░ рдЯреИрдВрдХ) рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдПрдВрдЧреЗ:
рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХрд░рдг рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐, рдПрдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рдИрд╡реЗрдВрдЯ рдореЗрдВ рдЙрд╕ рдЗрдХрд╛рдИ рдХреА рдЖрдИрдбреА рд╕реЗ рдПрдХ рдЯрдкрд▓ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдиреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдХреНрд╖рддрд┐ рдХрд╛ рдореВрд▓реНрдпред LoggingListener рд╕рд┐рд░реНрдл рдПрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд░рд╛рдкреНрдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рднреА рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ stderr рдореЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрд╖рддрд┐ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдзреНрд╡рдирд┐ рдХреЛ рд╣рдореЗрд╢рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрднреА рдХреЗ рд▓рд┐рдП рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдкрд╣рд▓рд╛ рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ ECSLayout рдХреНрд▓рд╛рд╕ рдкреНрд▓реЗрдЗрдВрдЧ рдлреАрд▓реНрдб рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рд▓реЗрдЖрдЙрдЯ рд╣реИ, рдЬреЛ рдИрдХрд╕_рдореВрд╡ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЯрдХрд░рд╛рд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреА рддрд░рд╣, рдЗрд╕рдореЗрдВ рджреЛ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рд╣реИрдВ: рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреА (рд╕рдВрднрд╡рддрдГ рдЦрд╛рд▓реА - рд╕реНрдерд╛рди рдпрд╛ рдХреЛрдИ рдирд╣реАрдВ) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреАред рдирд╛рдорд┐рдд рд░рдВрдЧреЛрдВ рдХреЛ рд░рдВрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрд░рдЬреАрдмреА `0xAARRGGBB` (рдпрд╛` 0xARGB`, `0xRGB`,` 0xRRGGBB`) рдФрд░ рдкреНрд░рд╛рд░реВрдк '#fff' рдореЗрдВред рджреЛрдиреЛрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдЕрдиреНрдпрдерд╛, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рд╡рд┐рдЬреЗрдЯ рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди-рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдВрдЯрд┐рдЯреА рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░ рд╣реИред рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдХреИрд╕реЗ рд░рд╣рдирд╛ рд╣реИ, рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рдЯрдХрд░рд╛рд╡ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ рдХреНрд╖рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдкрд░реНрдпрд╛рдкреНрдд рдХреНрд╖рддрд┐ рдХреЗ рдмрд╛рдж, рджреАрд╡рд╛рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
entities.py def create_wall(dispatcher, atlas, entity_id, x, y):
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрдХрд╛рдИ рд╡рд╕реНрддреБ рдЦреБрдж рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо (рдЬреЛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡реЗ рдпрд╛ рддреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛, рдЬреИрд╕реЗ рдХрд┐, рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрд╡рд┐рдЪрд╡рд┐рдбрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреЗ рдХрдИ рдЪрд┐рддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдПрдЯрд▓рд╕ рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░, рдЕрдВрдд рдореЗрдВ, рдЗрдХрд╛рдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░ рдЗрд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдЖрджреЗрд╢ рдХрддрд╛рд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рдЧреИрд░-рдирд┐рд░реНрдорд┐рдд рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╣реИред рдореИрдВрдиреЗ рдЖрдзрд╛рд░ рдШрдЯрдХ "рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ" рдмрдирд╛рдпрд╛ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ "рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдЬреЗрдЯ" (рджреАрд╡рд╛рд░ рдХреЛ рдЕрдХреНрд╖реБрдгреНрдг рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЗ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рдХреНрд▓рд╛рд╕ рд╣реЗрд▓реНрдердХрдВрдкреЛрдиреЗрдВрдЯ class HealthComponent(Component): def __init__(self, *args, hitpoints=3, **kwargs): super().__init__(*args, name='health', **kwargs) self.dispatcher.register_listener(self, 'ac_damage') self._hitpoints = hitpoints def on_event(self, event): if event.event_type == 'ac_damage' and event.event_value[0] == self.owner.id: self.hitpoints -= event.event_value[1] @property def hitpoints(self): return self._hitpoints @hitpoints.setter def hitpoints(self, value): if not isinstance(value, int): raise BearECSException( f'Attempting to set hitpoints of {self.owner.id} to non-integer {value}') self._hitpoints = value if self._hitpoints < 0: self._hitpoints = 0 self.process_hitpoint_update() def process_hitpoint_update(self): """ Should be overridden by child classes. """ raise NotImplementedError('HP update processing should be overridden') def __repr__(self):
рдПрдХ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╕рдордп, 'рдирд╛рдо' рдХреБрдВрдЬреА рд╕реБрдкрд░ () .__ init__ рдХреЛ рдкрд╛рд╕ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИред рдЬрдм рдПрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдЗрдХрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдирд╛рдо рдХреЗ рддрд╣рдд рдЗрд╕реЗ рдЗрдХрд╛рдИ рдХреЗ __dict__ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ Unit_object.health рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рд╕рдЬрд╛рддреАрдп рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд╣рд╛рд░реНрдбрдХреЛрдб рд╣реИ, рдЖрдкрдХреЛ рдЧрд▓рддреА рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рдХреЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ WidgetComponentред рдирд┐рд░реНрдорд╛рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдШрдЯрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреНрдпрд╛рдЬ рдХреА рдШрдЯрдирд╛ рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ ac_damageред рдЗрд╕ рддрд░рд╣ рдХреА рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, on_event рд╡рд┐рдзрд┐ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреА рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╣рд┐рдЯ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдХреЛ рдШрдЯрд╛рдПрдЧрд╛ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЛ рдЦреАрдВрдЪреЗрдЧрд╛, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕рд╛рд░ рд╣реИред __Repr__ рд╡рд┐рдзрд┐ рднреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
JSON рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдЪрдд рдХреЗ рд▓рд┐рдП)ред рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдШрдЯрдХреЛрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдпрд╣ рд╣реИред
VisualDamageHealthComponent рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдХреЙрд▓рдмреИрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ:
рдХреНрд▓рд╛рд╕ рд╡рд┐рдЬреБрдЕрд▓рдбреИрдореЗрдЬрд╣реЗрд▓реНрдердХреЙрдкреНрдЯреЗрдВрдЯ class VisualDamageHealthComponent(HealthComponent): """ . HP=0 """ def __init__(self, *args, widgets_dict={}, **kwargs): super().__init__(*args, **kwargs) self.widgets_dict = OrderedDict() for x in sorted(widgets_dict.keys()): self.widgets_dict[int(x)] = widgets_dict[x] def process_hitpoint_update(self): if self.hitpoints == 0 and hasattr(self.owner, 'destructor'): self.owner.destructor.destroy() for x in self.widgets_dict: if self.hitpoints >= x: self.owner.widget.switch_to_image(self.widgets_dict[x])
рдЬрдмрдХрд┐ рд╕реНрд╡рд╛рд╕реНрдереНрдп 0 рд╕реЗ рдКрдкрд░ рд╣реИ, рд╡рд╣ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреАрд╡рд╛рд░ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдШрдЯрдХ рдкреВрдЫрддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдХрд╛рдИ рд╡рд╕реНрддреБ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд┐рдЯрдкреЙрдЗрдВрдЯ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдХрд╛рдИ рдХреЗ рд╕рд╣реА рд╡рд┐рдирд╛рд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдШрдЯрдХ рдФрд░ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рд╕реЗрдЯ рдЕрд▓рдЧ рд╣реИред рдЯреИрдВрдХреЛрдВ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ (рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ, рд╡рд┐рд░реЛрдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдЖрдИ) рдФрд░ рдШреВрд░реНрдгрди рд╡рд┐рдЧреЗрдЯреНрд╕, рдЧреЛрд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЯрдХрд░рд╛рд╡ рдШрдЯрдХ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╣рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╛рд░реА рдФрд░ рддреБрдЪреНрдЫ рд╣реИ; рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЛ рджреЗрдЦреЗрдВред рдЗрд╕рдХреА рдПрдХ рдЯрдХрд░рд╛рд╡ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЬрд┐рд╕реЗ рд╣реЛрд╕реНрдЯ рдЗрдХрд╛рдИ рдХрд┐рд╕реА рдЪреАрдЬ рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рддреА рд╣реИ:
рдмреБрд▓реЗрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛрд▓рд╛рдЗрдбрд░ def collided_into(self, entity): if not entity: self.owner.destructor.destroy() elif hasattr(EntityTracker().entities[entity], 'collision'): self.dispatcher.add_event(BearEvent(event_type='ac_damage', event_value=( entity, self.damage))) self.owner.destructor.destroy()
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╢рд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрдарднреВрдорд┐ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдкреНрд░рдХреНрд╖реЗрдкреНрдп EntityTracker () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ рдЬреЛ рд╕рднреА рдирд┐рд░реНрдорд┐рдд рдФрд░ рдирд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдирд╛рдо рд╕реЗ рдПрдХ рдЗрдХрд╛рдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Unit.collision (рдкреАрдбрд╝рд┐рдд рдЯрдХреНрдХрд░ рд╣реИрдВрдбрд▓рд░) рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рд╣реИред
рдЕрдм рдЦреЗрд▓ рдХреА рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдмрд╕ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд╣рддреЗ рд╣реИрдВ:
рд╡рд╛рдкрд╕ рдЧреЗрдорд╣реЛрдо рдореЗрдВ рдкреНрд╡рд╛рдЗрдВрдЯ рдФрд░ рд╣рд┐рдЯ рдкреНрд╡рд╛рдЗрдВрдЯ рдХрд╛рдЙрдВрдЯрд░ рдЗрдХрд╛рдЗрдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдпреБрджреНрдз рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ ECSLayout рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдХреНрд╢реЗ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реАрдзреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рдЧреЗрдЯреНрд╕ рд▓реЗрдмрд▓ (рдкрд╛рда рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдЬреЗрдЯ) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╣рд┐рддреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ on_event рд╡рд┐рдзрд┐ рд╣реИред рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯрд░реНрдорд┐рдирд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдЯрд┐рдХ рдХреЛ рд╡рд┐рдЬреЗрдЯ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рда рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рдЬреЗрдЯ рдЙрд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ:
listeners.py class ScoreLabel(Label): """ """ def __init__(self, *args, **kwargs): super().__init__(text='Score:\n0') self.score = 0 def on_event(self, event): if event.event_type == 'ecs_destroy' and 'enemy' in event.event_value and 'bullet' not in event.event_value:
рджреБрд╢реНрдорди рдЬрдирд░реЗрдЯрд░ рдФрд░ "GAME OVER" рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд╕реНрддреБ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╢реНрд░реЛрддрд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдорд╛рди рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрддрд╛рд░ рдореЗрдВ рд╕реБрдирддреЗ рд╣реИрдВ, рд╕рд╣реА рдХреНрд╖рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдЗрдХрд╛рдИ рдпрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдордиреЗ рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рдмрдирд╛рдИ рд╣реИ, рдФрд░ рд╣рдо рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рд╡рд┐рдЬреЗрдЯреНрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдирд┐рд░реНрдорд╛рдг рдХреА рдШрдЯрдирд╛рдПрдВ (рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реА рдЗрдХрд╛рдИ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ) рдмрд╕ рдХрддрд╛рд░ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдЯрд┐рдХ рдкрд░ рд╣рд▓ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЖрдк
рдмреАрд╕ рд░реБрдкрдпреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧреЗрдордкреНрд▓реЗ рдХреЛ рдкреЙрд▓рд┐рд╢ рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рдЕрд░реНрд▓реА рдПрдХреНрд╕реЗрд╕ рдореЗрдВ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЙрд▓рд╡рд░реНрд▓реНрдб рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣
рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрдЬрдЧрд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдмрд┐рд▓реНрдб рдХреЛ
pyinstaller рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред