рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЗрд▓реЛрдВ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рдиреА-рдорд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ
Minecraft ,
Enter the Gungeon, рдФрд░
Descenders рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЙрди рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛
рдХрд░реВрдБрдЧрд╛ , рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ
рддрд┐рд▓рдордк рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдпреВрдирд┐рдЯреА 2017.2 рдореЗрдВ 2 рдбреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░
рд░реВрд▓рдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде
рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред
рдирдХреНрд╢реЛрдВ рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕рд┐рдВрдЧ рдЧреЗрдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдЧрд╛ред рдЖрдк рдЦреЗрд▓ рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рд╕рдордп рдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдкреЛрд╕реНрдЯ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ?
рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреБрдирд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рднреА рдХрд┐рдП рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЖрдк рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рддреАрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рддрд┐рд▓рдореИрдк рдФрд░
рдирд┐рдпрдо :
рдХрд┐рд╕реА рднреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рд╕рднреА рдирдП рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдПрдХ
int
рд╕рд░рдгреА рдорд┐рд▓рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдЯрд╛рдЗрд▓ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:
- рд╣рдо рднреЗрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЯрд╛рдЗрд▓ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред 1 рдПрдХ рдЯрд╛рдЗрд▓ рд╣реИ, 0 рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИред
- рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реМрдЯрд╛рдП рдЧрдП рджреЛ-рдЖрдпрд╛рдореА рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ (рдЙрд╕ рд╕реНрдерд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
- рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрдЕрдкрдмрд╛рдЙрдВрдб () рд╕рд░рдгреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ , рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рдЪрд░ рдорд┐рд▓реЗрдВ рдФрд░ рдХреЛрдб рдХреНрд▓реАрдирд░ рд╣реЛред
- рдореИрдВ рдЕрдХреНрд╕рд░ Mathf.FloorToInt () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЯрд┐рд▓реЗрдореИрдк рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдиреАрдЪреЗ рдмрд╛рдИрдВ рдУрд░ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ Mathf.FloorToInt () рдЖрдкрдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреЛрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рднреА рдХреЛрдб C # рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
рдЕрд░реНрд░реЗ рдкреАрдврд╝реА
GenerateArray рджрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдирдпрд╛
int
рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░рдгреА рдХреЛ рднрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЦрд╛рд▓реА (1 рдпрд╛ 0) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
public static int[,] GenerateArray(int width, int height, bool empty) { int[,] map = new int[width, height]; for (int x = 0; x < map.GetUpperBound(0); x++) { for (int y = 0; y < map.GetUpperBound(1); y++) { if (empty) { map[x, y] = 0; } else { map[x, y] = 1; } } } return map; }
рдирдХреНрд╢рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд╛рдЗрд▓ рдХреЗ рдирдХреНрд╢реЗ рдкрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдирдХреНрд╢реЗ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЯрд╛рдЗрд▓реЗрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдмрд┐рдВрджреБ рдкрд░ рд╕рд░рдгреА рдХрд╛ рдорд╛рди 1 рд╣реЛрддрд╛ рд╣реИред
public static void RenderMap(int[,] map, Tilemap tilemap, TileBase tile) {
рдирдХреНрд╢рд╛ рдЕрджреНрдпрддрди
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдореИрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рдЗрд▓ рдФрд░ рдЙрд╕рдХреЗ рдЯрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public static void UpdateMap(int[,] map, Tilemap tilemap)
рд╢реЛрд░рдЧреБрд▓
рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рд╢реАрд░реНрд╖ рдкрд░рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ x рдФрд░ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╕рд░рд▓ рдЙрдкрд╛рдп
рдпрд╣ рдкреАрдврд╝реА рдкрджреНрдзрддрд┐ рд╕реНрддрд░реЛрдВ рдХреА рдкреАрдврд╝реА рдореЗрдВ рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рд░рд▓рддрдо рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рд╣рдо Perlin рдХреЗ рд╢реЛрд░ рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рдХреЛрдб рди рд▓рд┐рдЦреЗрдВред рд╣рдо
Mathf.FloorToInt () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрд▓ рдХреЗ рдирдХреНрд╢реЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
public static int[,] PerlinNoise(int[,] map, float seed) { int newPoint;
рдЯрд╛рдЗрд▓ рдХреЗ рдирдХреНрд╢реЗ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЪреМрд░рд╕рд╛рдИ
рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рдХрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреЗрд░рд▓рд┐рди рдХреА рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдЪреМрд░рд╕рд╛рдИ рдХрд░реЗрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
public static int[,] PerlinNoiseSmooth(int[,] map, float seed, int interval) {
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд░рд╛рд▓ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╢реЛрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдкреАрдврд╝реА рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЪреМрд░рд╕рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдирд╛ рд╣реИред
рдЪреМрд░рд╕рд╛рдИ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:
- рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ
- рд╣рдо рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░
- рдлрд┐рд░ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдЕрдВрддрд░рд╛рд▓ рдЪрд░ рджреНрд╡рд╛рд░рд╛ y рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
- рдЬрдм рд╣рдо y рдЕрдХреНрд╖ рдкрд░ 0 рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдКрдВрдЪрд╛рдИ рдХреЛ рд╡рд░реНрддрдорд╛рди рдКрдВрдЪрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЕрдЧрд▓реЗ x рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ
- рдЕрдВрддрд┐рдо рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ
рдпрджрд┐ рдЕрдВрддрд░рд╛рд▓ рдПрдХ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
else {
рдЖрдЗрдП рд░реЗрдВрдбрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдмреЗрддрд░рддреАрдм рдЪрд▓рдирд╛
рд░реИрдВрдбрдо рд╡реЙрдХ рдЯреЙрдк
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рд╕рд┐рдХреНрдХрд╛ рдлреНрд▓рд┐рдк рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо "рдИрдЧрд▓" рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдмреНрд▓реЙрдХ рдКрдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо "рдкреВрдВрдЫ" рд╣реИ, рддреЛ рд╣рдо рдмреНрд▓реЙрдХ рдХреЛ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдКрдкрд░ рдпрд╛ рдиреАрдЪреЗ рдЬрд╛рдХрд░ рдКрдБрдЪрд╛рдИ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдЗрд╕рдХреА рдмрд╣реБрдд рд╣реА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрд╡рд░реЛрдз рд╣реИред рдЖрдЗрдП рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
public static int[,] RandomWalkTop(int[,] map, float seed) {
рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░реИрдВрдбрдо рд╡реЙрдХ рдЯреЙрдкрдРрд╕реА рдкреАрдврд╝реА рд╣рдореЗрдВ рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдкреАрдврд╝реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЪрд┐рдХрдиреА рдКрдВрдЪрд╛рдЗрдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
рд░реИрдВрдбрдо рд╡реЙрдХ рдХреА рдпрд╣ рднрд┐рдиреНрдирддрд╛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд┐рдХрдиреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рд╣рдо рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рдФрд░ рдЪрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдкрд╣рд▓реЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдКрдВрдЪрд╛рдИ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдФрд░ рдКрдВрдЪрд╛рдИ рдмрджрд▓рдиреЗ рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- рджреВрд╕рд░рд╛ рдЪрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╣реИ рдФрд░ рдЗрд╕реЗ рдКрдВрдЪрд╛рдИ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЦрдВрдб рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЖрдЗрдП рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
public static int[,] RandomWalkTopSmoothed(int[,] map, float seed, int minSectionWidth) {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП gif рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╕реНрддрд░ рдкрд░ рд╕реБрдВрджрд░ рдлреНрд▓реИрдЯ рдЦрдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирдХреНрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рд╡рд┐рдХреА рдпрд╛
Roguebitant.com рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкрддрд╛
рд▓рдЧрд╛рдПрдВ ред
рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЧреБрдлрд╛ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рднрд╛рдЧ реи
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рд╡рд╣
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рд╕рдВрдкрддреНрддрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реЛрд░рдЧреБрд▓
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╢реАрд░реНрд╖ рдкрд░рддреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкрд░реНрд▓рд┐рди рдХреЗ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреБрдлрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирдП рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрдХ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдВрд╢реЛрдзрдХ 0 рд╕реЗ 1 рддрдХ рдХрд╛ рдорд╛рди рд╣реИред рд╕рдВрд╢реЛрдзрдХ рдореВрд▓реНрдп рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдЕрд░рд╛рдЬрдХ рдкреЗрд░рд▓рд┐рди рдкреАрдврд╝реА рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ (0 рдпрд╛ 1) рдкрд░ рд░рд╛рдЙрдВрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдореИрдк рдРрд░реЗ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public static int[,] PerlinNoiseCave(int[,] map, float modifier, bool edgesAreWalls) { int newPoint; for (int x = 0; x < map.GetUpperBound(0); x++) { for (int y = 0; y < map.GetUpperBound(1); y++) { if (edgesAreWalls && (x == 0 || y == 0 || x == map.GetUpperBound(0) - 1 || y == map.GetUpperBound(1) - 1)) { map[x, y] = 1;
рд╣рдо рдмреАрдЬ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ 0 рд╕реЗ 0.5 рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдкрд░ рдкреЗрд░рд▓рд┐рди рдХреА рдкреАрдврд╝реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдмреЗрд╣рддрд░ рджрд┐рдЦрддреЗ рд╣реИрдВред рдореВрд▓реНрдп рдЬрд┐рддрдирд╛ рдХрдо рд╣реЛрдЧрд╛, рдкрд░рд┐рдгрд╛рдо рдЙрддрдирд╛ рдЕрдзрд┐рдХ рдЕрд╡рд░реБрджреНрдз рд╣реЛрдЧрд╛ред рдирдореВрдирд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред Gif 0.01 рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдореВрд▓реНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡реГрджреНрдзрд┐рд╢реАрд▓ 0.25 рдХреЗ рдорд╛рди рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред
рдЗрд╕ gif рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде Perlin рдкреАрдврд╝реА рдХреЗрд╡рд▓ рдкреИрдЯрд░реНрди рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИред
рдмреЗрддрд░рддреАрдм рдЪрд▓рдирд╛
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдХреНрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдКрдкрд░ рдпрд╛ рдиреАрдЪреЗ рдХрд╣рд╛рдБ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди
рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рдеред рд░реИрдВрдбрдо рд╡реЙрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдпрд╣ рднрд┐рдиреНрдирддрд╛ рд╣рдореЗрдВ рдЧреБрдлрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд┐рд╢рд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрд╛рдЗрд▓ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддрдм рддрдХ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд╛рдЗрд▓реЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдирд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдм рддрдХ, рд╣рдо рдХреЗрд╡рд▓ 4 рджрд┐рд╢рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдКрдкрд░, рдиреАрдЪреЗ, рдмрд╛рдПрдВ, рджрд╛рдПрдВред
public static int[,] RandomWalkCave(int[,] map, float seed, int requiredFloorPercent) {
рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
- рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
- рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд░реНрд╢ рдЯрд╛рдЗрд▓реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЯрд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
- рдЯрд╛рдЗрд▓реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗрдВред
рдлрд┐рд░ рд╣рдо
while
ред рд╡рд╣ рдПрдХ рдЧреБрдлрд╛ рдмрдирд╛рдПрдЧрд╛:
while (floorCount < reqFloorAmount) {
рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реИред рдлрд┐рд░ рд╣рдо
switch case
рд╕рд╛рде рдирдИ рджрд┐рд╢рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдХрдерди рдореЗрдВ, рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рдПрдХ рджреАрд╡рд╛рд░ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рд░рдгреА рд╕реЗ рдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рд╣рдо рдРрд╕рд╛ рддрдм рддрдХ рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдордВрдЬрд┐рд▓ рдХреНрд╖реЗрддреНрд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдЬрд╛рддреЗред рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдореИрдВрдиреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рднреА рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдХрд░реНрдг рджрд┐рд╢рд╛рдПрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдВрдХ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рджрд┐рд╢рд╛рддреНрдордХ рд╕реБрд░рдВрдЧ
рдПрдХ рджрд┐рд╢рд╛рддреНрдордХ рд╕реБрд░рдВрдЧ рдирдХреНрд╢реЗ рдХреЗ рдПрдХ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд┐рдкрд░реАрдд рдЫреЛрд░ рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИред рд╣рдо рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рд╕реБрд░рдВрдЧ рдХреА рд╡рдХреНрд░рддрд╛ рдФрд░ рдЦреБрд░рджрд░рд╛рдкрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕реБрд░рдВрдЧ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
public static int[,] DirectionalTunnel(int[,] map, int minPathWidth, int maxPathWidth, int maxPathChange, int roughness, int curvyness) {
рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?
рдкрд╣рд▓реЗ рд╣рдо рдЪреМрдбрд╝рд╛рдИ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЪреМрдбрд╝рд╛рдИ рдорд╛рди рд╢реВрдиреНрдп рд╕реЗ рдзрдирд╛рддреНрдордХ рдХреЗ рдорд╛рди рд╕реЗ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣рдореЗрдВ рд╡рд╣ рдЖрдХрд╛рд░ рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдорд╛рди 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдХреБрд▓ 3 рдХреА рдЪреМрдбрд╝рд╛рдИ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдорд╛рди -1, 0, 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ x рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдордзреНрдп рдХреЛ рд▓реЗрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдирдХреНрд╢реЗ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕реБрд░рдВрдЧ рдмрд┐рдЫрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдмрд╛рдХреА рдХреЗ рдирдХреНрд╢реЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред
рд╣рдо рдЦреБрд░рджрд░рд╛рдкрди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдЗрд╕ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдкрде рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рднреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЪреМрдбрд╝рд╛рдИ рдмрд╣реБрдд рдЫреЛрдЯреА рди рд╣реЛред рдХреЛрдб рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
- рд╣рдо рд╡рдХреНрд░рддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреА рддрд░рд╣, рдпрджрд┐ рдпрд╣ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдо рдкрде рдХреЗ рдХреЗрдВрджреНрд░ рдмрд┐рдВрджреБ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЬрд╛рдВрдЪ рднреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдирдХреНрд╢реЗ рд╕реЗ рдЖрдЧреЗ рди рдмрдврд╝ рд╕рдХреЗрдВред
- рдЕрдВрдд рдореЗрдВ, рд╣рдо рдирдП рдмрдирд╛рдП рдЧрдП рднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕реБрд░рдВрдЧ рдмрд┐рдЫрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛
рд╕реЗрд▓реНрдпреВрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдЪрд╛рд▓реВ рд╣реИ (1) рдпрд╛ рдмрдВрдж (0)ред рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд╛рд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рдЧреНрд░рд┐рдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо C #
Random.Next рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реНрд░реЛрдд рдЧреНрд░рд┐рдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдореВрд▓ рдЧреНрд░рд┐рдб рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public static int[,] GenerateCellularAutomata(int width, int height, float seed, int fillPercent, bool edgesAreWalls) {
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдк рдпрд╣ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд┐рдб рдХреЛ рджреАрд╡рд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рддрд┐рд╢рдд рднрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдореВрд░ рдХрд╛ рдкрдбрд╝реЛрд╕
рдореВрд░ рдкрдбрд╝реЛрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреАрдврд╝реА рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореВрд░ рдХрд╛ рдкрдбрд╝реЛрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдкрдбрд╝реЛрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:
- рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдкрдбрд╝реЛрд╕реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рдкрдбрд╝реЛрд╕реА рдПрдХ рд╕рдХреНрд░рд┐рдп рдЯрд╛рдЗрд▓ рд╣реИ, рддреЛ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдЯрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗрдВред
- рдпрджрд┐ рдкрдбрд╝реЛрд╕реА рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЯрд╛рдЗрд▓ рд╣реИ, рддреЛ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рдХрд┐рд╕реА рд╕реЗрд▓ рдореЗрдВ 4 рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рдкрд╛рд╕ рдХреА рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рд╕реЗрд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред
- рдпрджрд┐ рд╕реЗрд▓ рдореЗрдВ рд▓рдЧрднрдЧ 4 рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
- рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВ рдЬрдм рддрдХ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдЯрд╛рдЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗред
рдореВрд░ рдХрд╛ рдкрдбрд╝реЛрд╕ рдЬрд╛рдБрдЪ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
static int GetMooreSurroundingTiles(int[,] map, int x, int y, bool edgesAreWalls) { int tileCount = 0; for(int neighbourX = x - 1; neighbourX <= x + 1; neighbourX++) { for(int neighbourY = y - 1; neighbourY <= y + 1; neighbourY++) { if (neighbourX >= 0 && neighbourX < map.GetUpperBound(0) && neighbourY >= 0 && neighbourY < map.GetUpperBound(1)) {
рдЯрд╛рдЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдореВрдерд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреА рдкреАрдврд╝реА рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрдИ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдирдХреНрд╢реЗ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рджреАрд╡рд╛рд░реЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
public static int[,] SmoothMooreCellularAutomata(int[,] map, bool edgesAreWalls, int smoothCount) { for (int i = 0; i < smoothCount; i++) { for (int x = 0; x < map.GetUpperBound(0); x++) { for (int y = 0; y < map.GetUpperBound(1); y++) { int surroundingTiles = GetMooreSurroundingTiles(map, x, y, edgesAreWalls); if (edgesAreWalls && (x == 0 || x == (map.GetUpperBound(0) - 1) || y == 0 || y == (map.GetUpperBound(1) - 1))) {
рдпрд╣рд╛рдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд▓реВрдк рд╣реИ рдЬреЛ рдХрдИ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдХрд╛рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╣рдореЗрд╢рд╛ рдХрдорд░реЗ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдмреАрдЪ рдХреЗрд╡рд▓ рджреЛ рдмреНрд▓реЙрдХ рд╣реИрдВред
рд╡реЙрди рдиреНрдпреВрдореИрди рдкрдбрд╝реЛрд╕
рд╡реЙрди рдиреНрдпреВрдореИрди рдкрдбрд╝реЛрд╕ рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХрд╛ рд╣реИред рдРрд╕реА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП, рд╣рдо рдореВрд░ рдкреАрдврд╝реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдкрдбрд╝реЛрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкрдбрд╝реЛрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдкрдбрд╝реЛрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:
- рд╣рдо рддрд┐рд░рдЫреЗ рд▓реЛрдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реБрдП, рдЯрд╛рдЗрд▓ рдХреЗ рддрддреНрдХрд╛рд▓ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рдХреЛрд╢рд┐рдХрд╛ рд╕рдХреНрд░рд┐рдп рд╣реИ, рддреЛ рдПрдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
- рдпрджрд┐ рд╕реЗрд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИ, рддреЛ рдХреБрдЫ рднреА рди рдХрд░реЗрдВред
- рдпрджрд┐ рд╕реЗрд▓ рдореЗрдВ 2 рд╕реЗ рдЕрдзрд┐рдХ рдкрдбрд╝реЛрд╕реА рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдмрдирд╛рддреЗ рд╣реИрдВред
- рдпрджрд┐ рд╕реЗрд▓ рдореЗрдВ 2 рд╕реЗ рдХрдо рдкрдбрд╝реЛрд╕реА рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2 рдкрдбрд╝реЛрд╕реА рд╣реИрдВ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рди рдмрджрд▓реЗрдВред
рджреВрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрдбрд╝реЛрд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ: static int GetVNSurroundingTiles(int[,] map, int x, int y, bool edgesAreWalls) { int tileCount = 0;
рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рд░рдгреА рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдореЗрдВ for
рдЗрдирдкреБрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдЪреМрд░рд╕рд╛рдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред public static int[,] SmoothVNCellularAutomata(int[,] map, bool edgesAreWalls, int smoothCount) { for (int i = 0; i < smoothCount; i++) { for (int x = 0; x < map.GetUpperBound(0); x++) { for (int y = 0; y < map.GetUpperBound(1); y++) {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореВрд░ рдХреЗ рдкрдбрд╝реЛрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд╡рд░реБрджреНрдз рд╣реИ:рдпрд╣рд╛рдБ, рдореВрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЖрдк рдирдХреНрд╢реЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВредрдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред