C # / WPF + рдкрд╛рд╕реНрдХрд▓ + рдЕрд╕реЗрдВрдмрд▓рд░: рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЧреЗрдо рдХреИрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛



рдореИрдВрдиреЗ рд╕реНрдХреВрд▓ рдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЕрдлрд╡рд╛рд╣ рдЙрдбрд╝рд╛рдИ, рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдпрд╛:

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

рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕


рдмреБрдирд┐рдпрд╛рджреА

рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдРрд╕реЗ рд╕реНрдХреВрд▓ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдЖрдпрд╛ рдерд╛ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рд▓реЛрдЧреЛ , рдлрд┐рд░ рдмреЗрд╕рд┐рдХ рдФрд░ рдлрд┐рд░ рдкрд╛рд╕реНрдХрд▓ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рдмреЗрд╕рд┐рдХ рдкрд░ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рдЬрдЧрд╛рдИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЦреЗрд▓ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛! рдЗрд╕рдХрд╛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 640x480, 256 рд░рдВрдЧ, рд╕рднреА рд╕реНрдкреНрд░рд╛рдЗрдЯ рдПрдирд┐рдореЗрдЯреЗрдб рд╣реИрдВ (рдЫрджреНрдо -3 рдбреА рдореЗрдВ рдШреБрдорд╛рдПрдВ), рдзреНрд╡рдирд┐ред рдлреНрдпреВрдЪрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЖрдк рдЕрднреА рднреА "qbasic future" рдкрд░ Google рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ - 1552 рд▓рд╛рдЗрдиреЗрдВ, рдЧреЛрдЯреЛ рдСрдкрд░реЗрдЯрд░ рдХреЗ 19 рдЙрдкрдпреЛрдЧред рдЦреЗрд▓ рдХреЛ рд▓реИрдВрдбрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рдХреНрд▓рд╛рд╕рд┐рдХ рдЦреЗрд▓ рдХреЗ рд╕рдорд╛рди рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЧреНрд░рд╣ рдкрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рдЙрддрд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдЬ рдЙрддрд░рдирд╛ рдЙрдмрд╛рдК рд╣реИ, рдореИрдВ рдЧреЛрд▓реА рдорд╛рд░рдирд╛ рдФрд░ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд▓реИрдВрдбрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣ рдмреЗрд▓реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦреБрдж рдХреЛ 3DS рдореИрдХреНрд╕ рдореЗрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкреЗрдВрдЯ рдХрд┐рдпрд╛ (рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣ рдлреНрд░реИрдХреНрдЯрд▓ рд╢реЛрд░ рдХреЗ рд╕рд╛рде рдЧреЛрд▓рд╛рдХрд╛рд░ рд╣реИрдВ, рдмрд╛рдХреА рд╕рд░рд▓ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╣реИрдВ, рджрд╣рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╕реНрдлреЛрдЯ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрд░реЛрдд рдЕрдзрд┐рдХрддрдо рдлрд╛рдЗрд▓реЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЦреЛ рдЧрдИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

рдкрд╛рд╕реНрдХрд▓

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

рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб

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

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

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



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

рдЬрд╡рд╛рдм рдореЗрдВ, рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ 320x200 рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ рд╕рдордп рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдирдП рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреАред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рдореЗрдВ рдмрдбрд╝реЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд░реЗрдЦреАрдп рд░реВрдк рд╕реЗ 64 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЙрдЪреНрдЪ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдмреИрдВрдХреЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА (рдХреБрдЦреНрдпрд╛рдд 640 рд╡реЙрдмреАрдЯреАрдЬрд╝) рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмреЛрд░рд▓реИрдВрдб рд╕реЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдЯреАрдПрдордЯреА рдкрд╛рд╕реНрдХрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ 32 рдмрд┐рдЯреНрд╕ рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб dos4gw рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореЗрдореЛрд░реА рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдлрд┐рд▓реНрдорд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рд╣реЛ рдЧрдИ рдереАред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╖рдп рд╕реЗ рд╡рд┐рдЪрд▓рди рд╣реИред


рд╣рдорд╛рд░реЗ рджрд┐рди


рдмреИрдХрдЕрдк рдХреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдореЗрдВ рдЖ рдЧрдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдбреЙрд╕рдмреЙрдХреНрд╕ рд▓рд┐рдпрд╛, рдЗрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдПрдХ рдФрд╕рдд рдЖрдВрд╕реВ рдХреЛ рджреВрд░ рдХрд┐рдпрд╛ред рдХрдИ рд╕рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рдж, C # рдлрд┐рд░ рд╕реЗ "рд▓реЛрд╣реЗ рдХреЗ рдХрд░реАрдм" рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рддреЛ рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдереА - рдореЗрдореЛрд░реА рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рд▓реЗ рд▓реЛ, рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ WPF рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВред TMT рдкрд╛рд╕реНрдХрд▓ Win32 dlls рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рд╣реБрдП (рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХреЗрдВ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП stdcall рдЬреЛрдбрд╝реЗрдВ)ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд╛рдЗрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрдЯрдХреЛрд▓рд░ рдХреЗ рд░рдВрдЧреАрди рдкрд┐рдХреНрд╕рд▓ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реИрдВ):

рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд╛рдВрдЪ рдХреЗ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрддреЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдореВрд▓ рд╣реИрдВ
Procedure tPut32 conv arg_stdcall (X,Y,TransparentColor:DWord;Arr:Pointer);Assembler; {Transparent PUT} Var IMSX, IMSY :DWord; Asm Cmp Arr, 0 Je @ExitSub {Check ON-SCREEN POS} Mov Eax, ScreenSY; Mov Ebx, ScreenSX Cmp Y, Eax; Jl @PUT1; Jmp @ExitSub; @PUT1: Cmp X, Ebx; Jl @PUT2; Jmp @ExitSub; @PUT2: {--------} Mov Edi, LFBMem {Set Destination Loct} {Get Sizes} Mov Esi, Arr LodsD; Mov IMSX, Eax LodsD; Mov IMSY, Eax Add Esi, SizeOfSprite-8 {Check ON-SCREEN POS} Mov Eax, IMSY; Neg Eax; Cmp Eax, Y; Jl @PUT3; Jmp @ExitSub; @PUT3: Mov Eax, IMSX; Neg Eax; Cmp Eax, X; Jl @PUT4; Jmp @ExitSub; @PUT4: {VERTICAL Clipping} Mov Eax, Y {Clipping Bottom} Add Eax, IMSY Cmp Eax, ScreenSY Jl @SkipClipYB Sub Eax, ScreenSY Cmp Eax, IMSY Jl @DoClipYB Jmp @ExitSub @DoClipYB: Sub IMSY, Eax @SkipClipYB: Cmp Y, -1 {Clipping Top} Jg @SkipClipYT Xor Eax, Eax Sub Eax, Y Cmp Eax, IMSY Jl @DoClipYT Jmp @ExitSub @DoClipYT: Sub IMSY, Eax Add Y, Eax Mov Ebx, IMSX Mul Ebx Shl Eax, 2 {<>} Add Esi, Eax @SkipClipYT: {End Clipping} {Calculate Destination MemLocation} Mov Eax, Y; Mov Ebx, ScreenSX; Mul Ebx Add Eax, X Shl Eax, 2 {<>} Add Edi, Eax Mov Ecx, IMSY {Size Y} Mov Ebx, IMSX {Size X} Mov Edx, ScreenSX Sub Edx, Ebx {HORIZ.CLIPPING} Push Edx Xor Eax, Eax {RIGHT} Sub Edx, X Cmp Edx, 0 Jge @NoClip1 {IF EDX>=0 THEN JUMP} Mov Eax, Edx; Neg Eax; Sub Ebx, Eax @NoClip1: Pop Edx {LEFT} Cmp X, 0 Jge @NoClip2 Sub Edi, X; Sub Esi, X // \ Sub Edi, X; Sub Esi, X // \ Sub Edi, X; Sub Esi, X // 32 bit!!! Sub Edi, X; Sub Esi, X // / Sub Eax, X; Sub Ebx, Eax @NoClip2: {bitshifts} Shl Eax, 2 {<>} Shl Edx, 2 {<>} ALIGN 4 @PutLn: {DRAW!!!!!} Push Ecx; Push Eax; Mov Ecx, Ebx ALIGN 4 @PutDot: LodsD; Cmp Eax, TransparentColor //Test Al, Al Je @NextDot {if Al==0} StosD; Sub Edi, 4 {<>} @NextDot: Add Edi, 4 {<>} Dec Ecx; Jnz @PutDot {Looping is SLOW} Pop Eax; Add Esi, Eax Add Edi, Edx; Add Edi, Eax Pop Ecx Dec Ecx; Jnz @PutLn {Looping is SLOW} @ExitSub: End; 



рдмрд╛рдХреА рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИрдВ: code.google.com/p/lander-net/source/browse/trunk/tmt_pascal/TG_32bit.pas

C #

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

Google рдХреЛрдб рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда: code.google.com/p/lander-net

DllImport рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдорд╛рдирдХ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
  [DllImport("TPSGRAPH", CallingConvention = CallingConvention.StdCall)] public static extern uint tPut32(uint x, uint y, uint transparentColor, uint spritePtr); 


рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рддрд░рдл рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣реА рдорд╛рд░реНрд╢рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкреНрд░рд╛рдЗрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рд╣рд╛, рд╣рдм рдкрд░ рд╕реНрд░реЛрдд рдЯреИрдЧ рдкрд╛рд╕реНрдХрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╣рдо рдбреЗрд▓реНрдлреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ):

  Type TSprite = Packed record W : DWord; H : DWord; Bpp : DWord; RESERVED : Array[0..6] of DWORD; End; 


рдЕрдкреНрд░рдмрдВрдзрд┐рдд InitSprite рдлрд╝рдВрдХреНрд╢рди рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣реЗрдбрд░ рдХреЛ рднрд░рддрд╛ рд╣реИ, рдлрд┐рд░ FormatConvertedBitmap рдФрд░ memcpy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ (рдХреЛрдб рджреЗрдЦреЗрдВред

рддреЛ, рдЕрдм рд╣рдо рдлреНрд░реЗрдо рдмрдлрд░ рдореЗрдВ "рджреГрд╢реНрдп" рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрдореЛрд░реА рдореЗрдВ рдХрдИ рд╕реМ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдлрдкреАрдПрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рд╣рдЬрд╛рд░реЛрдВ рдореЗрдВ рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╡рд┐рдВрдбреЛ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ WriteableBitmap рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛, рдореИрдВрдиреЗ DirectX (SlimDX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ InteropBitmap рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрд╕реЗ рддреЗрдЬрд╝реА рд╕реЗ рдирд┐рдХрд▓рд╛: Sprite.GetOrUpdateBitmapSource

  public unsafe BitmapSource GetOrUpdateBitmapSource() { if (_bitmapSourcePtr == null) { var stride = Width*4; // Size of "horizontal row" var section = NativeMethods.CreateFileMapping(NativeMethods.INVALID_HANDLE_VALUE, IntPtr.Zero, (int) NativeMethods.PAGE_READWRITE, 0, (int) _sizeInBytes, null); _bitmapSource = Imaging.CreateBitmapSourceFromMemorySection(section, (int) Width, (int) Height, PixelFormats.Bgr32, (int) stride, 0); _bitmapSourcePtr = (uint)NativeMethods.MapViewOfFile(section, NativeMethods.FILE_MAP_ALL_ACCESS, 0, 0, _sizeInBytes).ToPointer(); NativeMethods.CloseHandle(section); NativeMethods.UnmapViewOfFile(section); } CopyPixelsTo((uint) _bitmapSourcePtr); return _bitmapSource; } 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╛рдЗрд▓рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рд▓реЗ рдЬрд╛рджреВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦрд┐рдбрд╝рдХреА рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдореЗрдореЛрд░реА рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рд╕реВрдЪрдХ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдереНрд░реЗрдб рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, UI рдереНрд░реЗрдб рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ InteropBitmap.Invalidate () рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╕рд┐рджреНрдз рдкреЛрд╕реНрдЯ рд▓рд┐рдВрдХрди 6 рдЗрдХреЛ WPF, WinForms рд╕реЗ рд╡рд┐рдзрд┐ : рдмрд┐рдЯрдореИрдк c> 15000 FPS рдбреНрд░рд╛рдЗрдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ 120 рдПрдлрдкреАрдПрд╕ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╡рд┐рдВрдбреЛ рдХреЛ рдкреВрд░реНрдг-рдПрдЪрдбреА рдореЙрдирд┐рдЯрд░ рдкрд░ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ InteropBitmap ~ 800 рдПрдлрдкреАрдПрд╕ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рд╣реА рдорд╢реАрди (рдХреЛрд░ i5) рдкрд░ рдЧреЗрдо рд▓рдЧрднрдЧ 300 рдПрдлрдкреАрдПрд╕ рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдк ComposTarget.Rendering рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

"рд╕реНрдХреНрд░реАрди рдлрд╛рдбрд╝" рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб, рдФрд░ WPF рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдорд╛рдирдХ 60 рдлрд╝реНрд░реЗрдореЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо ComposTarget.Rendering рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдереНрд░реЗрдб рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореБрдЦреНрдп рд▓реЛрдб рди рд╣реЛ рдФрд░ WPF рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо GameViewModel.RunGameLoop () рдХрд░рдиреЗ рджреЗрдВ ред

WPF рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧреЗрдо рдкрд┐рдХреНрдЪрд░ рдХреЗ рдКрдкрд░, рдЧреЗрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА (рд╕реНрд╡рд╛рд╕реНрдереНрдп, рд╣рдерд┐рдпрд╛рд░, рдЕрдВрдХ) рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реБрдЦрдж рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ: MainWindow.xaml ред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдЖрдк MMX ( PADDUSB рдирд┐рд░реНрджреЗрд╢) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╡рд┐рд╕реНрдлреЛрдЯреЛрдВ рдХреЗ рдЬреЛрдбрд╝ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ



рд╕рднреА рдЦреЗрд▓ рддрд░реНрдХ рд╕реА # рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрд╖реБрджреНрд░рдЧреНрд░рд╣реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд╢реВрдЯрд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реЗ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдШреБрдордХреНрдХрдбрд╝ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рд╕реНрд▓рд┐рдордбрдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдзреНрд╡рдирд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдореИрдВрдиреЗ рдЦреЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЦрддреНрдо рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдмреНрдпрд╛рдЬ рдЦреЛ рдЧрдпрд╛, рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдмрдиреЗ рд░рд╣реЗ, рдФрд░ рдХреМрди рдЗрд╕реЗ рдЦреЗрд▓реЗрдЧрд╛ред рдирдП рдЬреАрд╡рди рдХреЛ рдкреБрд░рд╛рдиреЗ рд╢рд┐рд▓реНрдк рдореЗрдВ рд╕рд╛рдВрд╕ рд▓реЗрдирд╛ рдЕрдЪреНрдЫрд╛ рдерд╛ред "рд▓реЛрд╣реЗ рдХреЗ рдХрд░реАрдм" - рд╕рднреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╕реЗ: рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ 40% рд╕рдордп рдлреНрд░реЗрдордлрд╛рдпрд░ рдХреА рд╕рдлрд╛рдИ рдкрд░ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрдВрдЯрд░реЛрдкрд┐рдЯрдореИрдк рдкрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдкрд░ 40%) ред

GitHub: github.com/kefir0/LanderNet
Google рдХреЛрдб: code.google.com/p/lander-net
рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ (win32): ge.tt/1YvTlAh1/v/0

рдЧреЗрдордкреНрд▓реЗ рд╡реАрдбрд┐рдпреЛ:

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


All Articles