рдпрд╣ рдкрд╛рда рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдорд╣рд╛рд░рдд рд░рдЦрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХрджрдо рд╕реЗ рдХрджрдо рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЦреЗрд▓ рд▓рд╛ рд▓рд╛
рд╡реЛрд▓реНрдлреЗрдВрд╕реНрдЯреАрди 3 рдбреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВ рдХрд╛рд░реНрдореИрдХ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ, рд╡рд╣ рдПрдХ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдХреЛрдб рд╕реБрдВрджрд░ рд╣реИред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрдЧрд╣ рдкрд░ рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рдореИрдВ рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреА рд╡рд┐рд╢рд╛рд▓ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЫрд╛рддреНрд░ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╡рд┐рдХрд╛рд░реЛрдВ рдореЗрдВ рдлрдВрд╕ рдЧрдП рдмрд┐рдирд╛ рдордЬрд╛рдХрд┐рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХреЗрдВред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреАрдорд╛ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред
рдХрд╛рд░реНрдореИрдХ 0x5f3759df рд▓рд┐рдЦрддрд╛ рд╣реИ , рдореИрдВ 1 / sqrt (x)
рд▓рд┐рдЦрддрд╛ рд╣реВрдВ ред рд╣рдорд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рд╣реИрдВред
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рдШрд░ рдкрд░ рдХреЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝реЗ рдореЗрдВ рдмреИрдарддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрдЯрд▓реЙрдЧ рдФрд░ рдЕрдиреНрдп рдмреЛрд░рд┐рдпрдд рдХреА рдЕрдВрддрд╣реАрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдкрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдУрд╣ред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдпрд╣ рдПрдХ рджреБрд╖реНрдЪрдХреНрд░ рд╣реИ: рдпрджрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЙрд╕ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рддрд╛ рд╣реИ, рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рджреЗрдЦрддрд╛ рд╣реИ (рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рд╣реЛ рдЧрдпрд╛ рд╣реИ!), рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдбреВрдм рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдареЛрд╕ рд▓рд╛рдн рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢реАрдЯ рд▓рдВрдмреА рд╣реЛ рдЧрдИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛:
рдореЗрд░реЗ рднрдВрдбрд╛рд░ рд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдпрд╣ рдПрдХ рд╕рдорд╛рдкреНрдд рдЦреЗрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рд╣реИред рджреЛ рдирдП рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рд╕рдорд╛рдкреНрдд рдЦреЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг,
рджреВрд╕рд░рд╛ рднрд╛рдЧ рджреЗрдЦреЗрдВ ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреВрд░рд╛ рдЧреЗрдо рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ 3D рдЗрдВрдЬрди рдмрдирд╛рдпрд╛ рд╣реИред рд░рд╛рдХреНрд╖рд╕ рдореБрдЭ рдкрд░ рдирд╣реАрдВ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЦреНрдп рдЪрд░рд┐рддреНрд░ рд╢реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореИрдВрдиреЗ рдЗрд╕ рдЗрдВрдЬрди рдХреЛ рдПрдХ рд╢рдирд┐рд╡рд╛рд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЖрдк рдХрдорд┐рдЯреНрд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд░рд╡рд┐рд╡рд╛рд░ рдХреБрдЫ рдЦреЗрд▓рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдк рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреЛрдб рдХреА 486 рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ:
haqreu@daffodil:~/tinyraycaster$ cat *.cpp *.h | wc -l 486
рдкрд░рд┐рдпреЛрдЬрдирд╛ SDL2 рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рджреЗрд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ,
рд╢рдирд┐рд╡рд╛рд░ рдХреА рдЖрдзреА рд░рд╛рдд рдХреЛ :), рдЬрдм рд╕рднреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛрдб рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕рднреА рдХреЛрдб рдХреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдЬреЛ рдирдВрдЧреЗ C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╢реЗрдбреНрдпреВрд▓ (
tyts ,
tyts ,
tyts ) рдкрд░ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рддрд░рд╣, рдореИрдВ рдирд┐рдпрдо "рд╡рди рд╕реНрдЯреЗрдк = рд╡рди рдХрдорд┐рдЯ" рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ,
рдХреНрдпреЛрдВрдХрд┐ рдЧрд┐рдЯрдм рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред
рдЪрд░рдг 1: рдбрд┐рд╕реНрдХ рдкрд░ рдЪрд┐рддреНрд░ рд╕рд╣реЗрдЬреЗрдВ
рддреЛ рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рднреА рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВ, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдбрд┐рд╕реНрдХ рдкрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдХреБрдЫ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдордЭреЗрдВрдЧреЗред рдореИрдВ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
рдпрд╣рд╛рдБ рдкреВрд░реНрдг C ++ рдХреЛрдб рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
#include <iostream> #include <fstream> #include <vector> #include <cstdint> #include <cassert> uint32_t pack_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t a=255) { return (a<<24) + (b<<16) + (g<<8) + r; } void unpack_color(const uint32_t &color, uint8_t &r, uint8_t &g, uint8_t &b, uint8_t &a) { r = (color >> 0) & 255; g = (color >> 8) & 255; b = (color >> 16) & 255; a = (color >> 24) & 255; } void drop_ppm_image(const std::string filename, const std::vector<uint32_t> &image, const size_t w, const size_t h) { assert(image.size() == w*h); std::ofstream ofs(filename); ofs << "P6\n" << w << " " << h << "\n255\n"; for (size_t i = 0; i < h*w; ++i) { uint8_t r, g, b, a; unpack_color(image[i], r, g, b, a); ofs << static_cast<char>(r) << static_cast<char>(g) << static_cast<char>(b); } ofs.close(); } int main() { const size_t win_w = 512; // image width const size_t win_h = 512; // image height std::vector<uint32_t> framebuffer(win_w*win_h, 255); // the image itself, initialized to red for (size_t j = 0; j<win_h; j++) { // fill the screen with color gradients for (size_t i = 0; i<win_w; i++) { uint8_t r = 255*j/float(win_h); // varies between 0 and 255 as j sweeps the vertical uint8_t g = 255*i/float(win_w); // varies between 0 and 255 as i sweeps the horizontal uint8_t b = 0; framebuffer[i+j*win_w] = pack_color(r, g, b); } } drop_ppm_image("./out.ppm", framebuffer, win_w, win_h); return 0; }
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рд╛рде рдореЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреАрдердм рдкрд░ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (sic!) рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реАрдзреЗ рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВред

рдЗрд╕ рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рдж, gitpod рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдПрдЧрд╛, VS рдХреЛрдб рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдЧрд╛ред рдЯрд░реНрдорд┐рдирд▓ рдХрдорд╛рдВрдб рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ (рдХрдВрд╕реЛрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдКрдкрд░ рддреАрд░ рджрдмрд╛рдПрдВ), рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ, рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рддрд╕реНрд╡реАрд░ рдЦреЛрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рд╕реЗ рдХреНрдпрд╛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЪрд╛рд░-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ uint32_t рдореЗрдВ рдЬреЛ рд░рдВрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдЖрд░, рдЬреА, рдмреА рдпрд╛ рдП рдХрд╛ рдПрдХ рдШрдЯрдХ рд╣реИред рдлрд╝рдВрдХреНрд╢рди pack_color () рдФрд░ unpack_color () рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рджреВрд╕рд░рд╛, рджреЛ рдЖрдпрд╛рдореА рдЪрд┐рддреНрд░, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВред рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (x, y) рдХреЗ рд╕рд╛рде рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЫрд╡рд┐ [x] [y] рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЫрд╡рд┐ [x + y * рдЪреМрдбрд╝рд╛рдИ] рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдпрджрд┐ рджреЛ-рдЖрдпрд╛рдореА рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ, рддреЛ рдЕрднреА рдПрдХ рдкреЗрди рд▓реЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдирд┐рдкрдЯреЗрдВред рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЪрд░рдг рдорд╕реНрддрд┐рд╖реНрдХ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдпрд╣ рд╕реАрдзреЗ рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рддреАрди рдФрд░ рдЕрдзрд┐рдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рджреЛ рдШрдЯрдХреЛрдВ рд╕реЗ рдКрдкрд░ рдирд╣реАрдВ рдЙрдареЗрдВрдЧреЗред
рдлрд┐рд░ рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбрдмрд▓ рдЪрдХреНрд░ рдореЗрдВ рдЕрдкрдиреА рддрд╕реНрд╡реАрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдПрдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ .ppm рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВред
рд╕реНрдЯреЗрдЬ 2: рдПрдХ рд╕реНрддрд░ рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдПрдВ
рд╣рдореЗрдВ рдЕрдкрдиреА рджреБрдирд┐рдпрд╛ рдХрд╛ рдирдХреНрд╢рд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рд╕рд┐рд░реНрдл рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

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

рд╕реНрдЯреЗрдЬ 3: рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдЬреЛрдбрд╝реЗрдВ
рдирдХреНрд╢реЗ рдкрд░ рдХрд┐рд╕реА рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЬреАрдкреАрдПрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ :)

рджреЛ рдЪрд░ x рдФрд░ y рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред Gitpod рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЕрдзрд┐рдХ рдпрд╛рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ :)

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

рдФрд░ рдЕрдм рдореИрдВ рдирд╛рд░рдВрдЧреА рдХрд┐рд░рдг рдХреЗ рд╕рд╛рде рд╕рд░рдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдмреЗрд╣рдж рд╕рд░рд▓ред рдЖрдЗрдП рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рджрд╛рд╣рд┐рдиреЗ рддреНрд░рд┐рднреБрдЬ рдХреЛ рджреЗрдЦреЗрдВред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ cos (player_a) = a / c, рдФрд░ рд╡рд╣ sin (player_a) = b / cред

рдпрджрд┐ рдореИрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ c (рдзрдирд╛рддреНрдордХ) рдорд╛рди рд▓реЗрддрд╛ рд╣реВрдБ рдФрд░ x = player_x + c * cos (player_a) рдФрд░ y = player_y + c * sin (player_a) рдЧрд┐рдирддрд╛ рд╣реВрдБ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╣рдо рдЦреБрдж рдХреЛ рдмреИрдВрдЧрдиреА рдмрд┐рдВрджреБ рдкрд░ рдкрд╛рдПрдВрдЧреЗ; рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдирдВрдд рддрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рдХреЗ, рд╣рдо рдЕрдкрдиреЗ рдирд╛рд░рдВрдЧреА рдХрд┐рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдмреИрдВрдЧрдиреА рдбреЙрдЯ рдХреЛ рд╕реНрд▓рд╛рдЗрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реА (x, y) рд╕реЗ (player_x, player_y) рдХреА рджреВрд░реА рд╣реИ!
рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЗрдВрдЬрди рдХрд╛ рджрд┐рд▓ рдЗрд╕ рдЪрдХреНрд░ рд╣реИ:
float c = 0; for (; c<20; c+=.05) { float x = player_x + c*cos(player_a); float y = player_y + c*sin(player_a); if (map[int(x)+int(y)*map_w]!=' ') break; }
рд╣рдо рдХрд┐рд░рдг рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ (x, y) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рдкрд╛рд░ рдЖрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЪрдХреНрд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЪрд░ c рдмрд╛рдзрд╛ рдХреЛ рджреВрд░реА рджреЗрддрд╛ рд╣реИ! рд▓реЗрдЬрд░ рд░реЗрдВрдЬрдлрд╛рдЗрдВрдбрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ?

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЪрд░рдг 5: рд╕реЗрдХреНрдЯрд░ рдЕрд╡рд▓реЛрдХрди
рдПрдХ рдмреАрдо рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдорд╛рд░реА рдЖрдБрдЦреЗрдВ рдПрдХ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рджреЗрдЦрддреА рд╣реИрдВред рдЖрдЗрдП рд╡реНрдпреВрдЗрдВрдЧ рдПрдВрдЧрд▓ рдлрд╝реЙрд╡ (рджреЗрдЦрдиреЗ рдХрд╛ рдХреНрд╖реЗрддреНрд░) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

рдФрд░ релрезреи рдХрд┐рд░рдгреЗрдВ рдЫреЛрдбрд╝реЗрдВ (рд╡реИрд╕реЗ, релрезреи?), рдкреВрд░реЗ рджреЗрдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЪрд┐рдХрдирд╛ рдХрд░рддреЗ рд╣реБрдП:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕реНрдЯреЗрдЬ 6: 3 рдбреА!
рдФрд░ рдЕрдм рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБред 512 рдХрд┐рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдХрдЯрддрдо рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдорд┐рд▓реА рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдЕрдм рдПрдХ рджреВрд╕рд░реА рддрд╕реНрд╡реАрд░ 512 рдкрд┐рдХреНрд╕реЗрд▓ рдЪреМрдбрд╝реА (рд╕реНрдкреЙрдЗрд▓рд░) рдмрдирд╛рддреЗ рд╣реИрдВ; рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЦрдВрдб рдЦреАрдВрдЪреЗрдВрдЧреЗ, рдФрд░ рдЦрдВрдб рдХреА рдКрдВрдЪрд╛рдИ рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЗ рд╡рд┐рдкрд░реАрдд рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИ:

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╣ 3 рдбреА рднреНрд░рдо рдмрдирд╛рдиреЗ рдХреА рдХреБрдВрдЬреА рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рджрд╛рдВрд╡ рдкрд░ рдХреНрдпрд╛ рд╣реИред рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЦрдВрдбреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдПрдХ рдкрд┐рдХреЗрдЯ рдмрд╛рдбрд╝ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рдХреА рдКрдВрдЪрд╛рдИ рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИ, рдпрд╣ рдЙрд╕рд╕реЗ рджреВрд░ рд╣реИ:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕реНрдЯреЗрдЬ 7: рдкрд╣рд▓рд╛ рдПрдиреАрдореЗрд╢рди
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдкрд╣рд▓реА рдмрд╛рд░, рд╣рдо рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдореИрдВ рд╕рд┐рд░реНрдл рдбрд┐рд╕реНрдХ рдкрд░ 360 рдЪрд┐рддреНрд░ рдбреНрд░реЙрдк рдХрд░рддрд╛ рд╣реВрдВ)ред рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реИ: рдореИрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ, рдПрдХ рдЪрд┐рддреНрд░ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ, рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА_рдХрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ, рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╣рдорд╛рд░реЗ рдирдХреНрд╢реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЗрд▓ рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧ рдорд╛рди рджрд┐рдпрд╛ред

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЪрд░рдг 8: рдордЫрд▓реА рдХреА рдЖрдВрдЦ рдореЗрдВ рд╕реБрдзрд╛рд░
рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рд╣рдо рдПрдХ рджреАрд╡рд╛рд░ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдордЫрд▓реА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ? рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдХреНрдпреЛрдВ? рд╣рд╛рдБ, рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рджреАрд╡рд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

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


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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рд╕рд┐рд░реНрдл рдмрдирд╛рд╡рдЯ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВред рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ 5 рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЪрд░рдг 10: рдмрдирд╛рд╡рдЯ рдХрд╛ рдЕрд▓реНрдкрд╡рд┐рдХрд╕рд┐рдд рдЙрдкрдпреЛрдЧ
рдЕрдм рдореИрдВ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд░рдВрдЧреЛрдВ рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реА рдмрдирд╛рд╡рдЯ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд▓реЗ рдЬрд╛рдХрд░ рдЕрдкрдиреА рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рд░рдВрдЧ рджреЗрддрд╛ рд╣реВрдВ:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЪрд░рдг 11: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рджреАрд╡рд╛рд░реЛрдВ рдХрд╛ рдмрдирд╛рд╡рдЯ
рдФрд░ рдЕрдм рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХреНрд╖рдг рдЖ рдЧрдпрд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрдВрдд рдореЗрдВ рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдпрд╣рд╛рдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рдХрд┐рд░рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рдВрджреБ x, y рдкрд░ рд░реБрдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдПрдХ "рдХреНрд╖реИрддрд┐рдЬ" рджреАрд╡рд╛рд░ рдкрд░ рдмрд╕реЗ рд╣реИрдВ, рддреЛ y рд▓рдЧрднрдЧ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд░рдг рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХрд╛ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдПрдХ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ)ред рдЖрдЗрдП x рдХрд╛ рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рд┐рдЯрдПрдХреНрд╕ рдХрд╣рддреЗ рд╣реИрдВред рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рдПрдХ рд╕реЗ рдХрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдореЗрд░реЗ рдкрд╛рд╕ 64 рд╣реИрдВ), рддреЛ рдпрд╣ рд╣рдореЗрдВ рдмрдирд╛рд╡рдЯ рд╕реНрддрдВрдн рджреЗрдЧрд╛ рдЬреЛ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕реЗ рд╕рд╣реА рдЖрдХрд╛рд░ рдореЗрдВ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдпрд╣ рдЪреАрдЬрд╝ рдЯреЛрдкреА рдореЗрдВ рд╣реИ:

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЕрддреНрдпрдВрдд рдЖрджрд┐рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдКрд░реНрдзреНрд╡рд╛рдзрд░" рджреАрд╡рд╛рд░реЗрдВ рд╣реИрдВ (рдЬреЛ рдХрд┐ рд╣рд┐рдЯ [рд╢реВрдиреНрдп рдкреВрд░реНрдгрд╛рдВрдХ] рдХреЗ рдХрд░реАрдм рд╣реИрдВ)ред рдЙрдирдХреЗ рд▓рд┐рдП, рдмрдирд╛рд╡рдЯ рд╕реНрддрдВрдн рдХреЛ hity, y рдХреЗ рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕реНрдЯреЗрдЬ 12: рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд╛ рд╕рдордп!
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореИрдВрдиреЗ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕рдлрд╛рдИ рд╢реБрд░реВ рдХреАред рдЕрдм рддрдХ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд╛рд▓ (185 рд▓рд╛рдЗрдиреЗрдВ!) рдлрд╝рд╛рдЗрд▓ рдереА, рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдПрдХ рдмрд╛рджрд▓ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рдХреЛрдб рдЖрдХрд╛рд░ (319 рд▓рд╛рдЗрдиреЛрдВ) рдХреЛ рд▓рдЧрднрдЧ рджреЛрдЧреБрдирд╛ рдХрд░ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдиреАрдореЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓реВрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
for (size_t frame=0; frame<360; frame++) { std::stringstream ss; ss << std::setfill('0') << std::setw(5) << frame << ".ppm"; player.a += 2*M_PI/360; render(fb, map, player, tex_walls); drop_ppm_image(ss.str(), fb.img, fb.w, fb.h); }
рдЦреИрд░, рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдмрджрд▓рд╛рд╡
рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

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