- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
public static function findNeighbourEmpty(cx:int, cy:int, checkDebris:Boolean = true):Cell {
var cell:Cell = Cell.getCell(cx, cy);
var i:int = 0;
var distance:int = 1;
var n:int = 8;
while(!cell || !cell.accessible || (checkDebris && !isEmptyTile(cell))) {
if (i < n * distance / 4) {
cell = Cell.getCell(cx + Math.min(i, distance), cy + Math.min(distance * 2 - i, distance));
} else if (i < n * distance / 2) {
cell = Cell.getCell(cx + Math.min(distance * 2 - i + n * distance / 4, distance), cy + Math.max(n * distance / 4 - i, -distance));
} else if (i < 3 * n * distance / 4) {
cell = Cell.getCell(cx + Math.max(n * distance / 2 - i, -distance), cy + Math.max(-distance * 2 + i - n * distance / 2, -distance));
} else if (i < n * distance) {
cell = Cell.getCell(cx + Math.max(-distance * 2 + i - 3 * n * distance / 4, -distance), cy + Math.min(i - 3 * n * distance / 4, distance));
} else {
i = 0;
distance++;
if (distance > MAX_NEIGHBOUR_CELL_DISTANCE) {
return findNeighbourEmpty(cx, cy, false);
}
continue;
}
i++;
}
return cell;
}
годно, годно. И циклы, и рекурсия, и ифосвитч, и даже чуть математики!
кстати, Cell.getCell(cx, cy) меня тоже порадовал.
Нет, карта большая.
Разнообразных поисков кстати много там написано :).
А вообще, еще лучше, копировать отсюда:
Ṫ̼̥̖̙͌̃̒o͔̾ͤ̀̂ͧ̑̓̾ͨ ̤͚̮̻̌i̫̺̞͎̇͂̋ͨͨn̫̥̰̥̠̫͐ͫ̐́ͧ͌͗́ͅv̬̜͊̾̅̅̈́ͤ ̹o̤̫̜̼̥̪͓̱̊͒͑̈̉ͪͣ̈k̖̭͙͉̙̣͚͒̎̾̏̌̒̉̏ėͬ͋̔̚ ̤̠̠̯̤͖̮̗̉̒ͤ ͔̯͕̞̹̥̻̫͌͑̚t̗̯̗̞̮̼͖ͬ̄ͯ̒h̺̜̰͉̱̜̃ͬ̂ͫe͔ͫ͗͐͊ ͕̮̠ ̤̯̙̥̜̺ͯͮh͕̥͈̫̪̀̆͌̋͐ͮ̓ͅi̼̞̐ͩͤͯ̈́̎̽͌́v̓͆̉ͯͬ ̠͍̗͇̅̿̌ͦe̯͕̭̥̦̰̬̥͚̾̑͆ͤͫͪͥ̍-̙̫̭̠̮̳̮̉ͣͯm̝̓̉í̥͈̙͓̠͎̌ͥ̐̎̓̾ͤͩn̖͙͈̥͓̏͗̋̃ ̮d̩̲̙̺̎͊ͨ̽̚ ̣̝̗̻̩͕͇͇̓̾͐̒ͥͨr̥̜̬̱̺̠̖̩̱͂͌̑̃ẽ͚̱̮̣̲̑̃̇͒̓ ̙̙p͈̰ͥͪ̌̏̏̃̎̑ͅr͕̗̉͛͑͊̊͋̾e͉̤̩̠͈̹̹͌ͬ̋̂͗͑̚s ̘̗͎͙͎̽ͨͯͮe̦̝̝̟͕̭͕̻ͧͯͣ̐n̼͕͚̦̭̾̎ṱ̦͖̱͛ͣͣͅi ̻͛̈́ͬ̚ñ͔̣̪̄̅g̫͇͛ͭ ͈̮̙̥͉̹̯̻͚͊͊c͇̱̳̞̓̌͒̒͛̏ͨh̻̗̯̳̫̾ͪ̔ͩ͒a̒̈̒̄ͧ ̖͚̦̝̤̦͕̓́o̖͇̻̓̔s̲̥̝̘̼̺̠̻̜̋͆̇ͥ̔ͩ̏.̌͑̓̐͛͆̃ ͉̭̖͕̲
̻̥͎̺̻̐ͩI͓̟̖̘̥̪͎ͤ͑ñ̖̙̅͂̇ͦ̈́v̫̘͕̹̤̫̎ͅͅö͈́͐ ̣̞͈̬̦̻̤k̞̳̂̓̂̒̚i̙̳͍̝̗͈̺̓̅̅͌̆͐̇ǹ̫̗ͪ̽ğ͑̾ ̝̗̝̺̜̑ ͕̇̑̎̉̇t̜̜̰̬̰ͭ̇̇h͓̝͚͈̩͔͌̉ͬͦͧͮ̈͗ͅê͚̞͚͓̻̫̒ ͉ ̮̘̳̺̙̥̦̫͗͊ͯ̿͊ͧͬ͌f̬̰ͯe̜̙̞̺̯̭̞ͩ̒͒è͔͖̖͚͌̽̔ ̟l͕͉̱̺͒ͤ͒̋ͧ̚i͔̭̥̥̠̞͍͎͆̑͑̈ͯ̎ͅṅ̳̯̞̆̒ͮ́ͅgͪ ̼͓̪̦̱̮͕͂̔͊͂ ̥̺͓̬̳̳̣̽̃ͅo̻̳̭̙̹͍͋̍́͐̚f͙̰̗ͫͧ͒ͬͭ͐ ̤̺ͪ̉̿͒c̹͔̦͈̲̗ͣ͌͌ͨh̙̗̙̞͕̺ͯ͒̉ͮ̔ͧͯͯa̘̻ͨͥ͐ͫ̅ ͍͈͎͙̖ȯ̺̙͖͋̓̎̿̑ͫs̰̲͖͔̤̤̥̹͕ͣ͆̈́̍͋.ͦ̓͆͗͌̅̌͊ ͓̩͉̤̱̌ͅ
͓ͫW̳͇̰̣̭͈̯̭̃̋̎̏͋ͭi͍̪̫͐͐̆́͗̐t͍̰̫͍̆͒͒ͦ͑̒̓ͭ h̪̤͗͗ͪͣ̿͆̽̆ͥ ̱͍̟͔̲̹̗̫́͑̊͋ͦͨͣö͕̻̌̾͌̿u̗͔͍ͬͦͦ̃ͥ͐t̩͖̹̩͇͐ ͎̭͎ ̞͖͗o͎͓̝̱̣̟ͭ͒͐͆̔̆̒̅ͅͅr̖͚̭̝̜̄̎̀̈́ͦͭ̚d̩̰̼̠͆ͤ ͔̬̩ẽ̥̻ͥ̓̍͗̀̐̇r̥̗̳̠͚̟̪͎̮̃.͈̰̜̤̯̲̜̏̋͒ͤͧ͗ͅ
̞͇̪̰̙̖͍ͣͪṰ͕̫̇̑ͧ̌ͫh͎͈͓̀̓́ͭ̑̿͆e̟͇̬̅̓̅͌ͪ͌̆ ̼̺̞͖ͅ ͙̣̍ͥͅN͉̼̘̪̗̳͖̣̋ẹ̦̳̼͉̻̍ͦ̌̑z̥̭ͤ̿̂p̣̲̪͍̱̔̐ e͈͇̱͚̗͙̠̓ͥ͂̂̒̋r̺͐ͩ̀̍ͦ͋̚̚d̖̟̘̹̳̫̞͐̈ͮͩ͆i̒̇ ̼͔̀̊͑͗a̫̗̎ͣ͊̅ͩṉ͋̒ ͓̍͂ͣ̂h͖͍͙̭͍͈̃̐̓ͭ͒ͨ͛ï̖̰̟͒ͯ̐͌v̗̟͙̞̈̈̓̒ͪ̅ͪ e̠͕͓̫̮̬̗̭̯͂ͦ̂́̇̈́ͯ-̺̾ͅm͚͕̐̋́͆ͦͦ̏ï̲̮̘ͧͬ̆͋n̘̺̬̳͌̅̇̌̈́̒́͂d̋͌́͗ ̪̫͙̲͖͎̦ͤͬ ̜̥̻̹ͩ̅ͥͪ̐̍̐͌̋o͓̙ͣ̏ͫ̑̚f̰̟̓̒̊ͭ̑ͥ ͕̺ͩͯ̊͗͗c͓̭͂ͬͤ̒͆ͪ̚h̠͙͖̩͉̅̂ͦȧ̪͔̀o͓̖͇ͥ̓̄́̅ ̼͙̮͇ͅs̮̜̝̣ͨ̐͌ͤ͆̈́.͖͉̮̒̒̅̇ ̙̲̤͉̠̜̭͕̈̋ͥZ̰̗̥̤ͬ͂̾ͪ͌ͅa̭̩̞̽ͧ̐͗̂͒̏̋lͥ͐́͒ͨ ͓̭͓̜ͫg̳̺̼̖͆o̞̬̐̉̑͊͛ͦ.̮̹ͮ̒ͬͫͭ̅ͣ̉ ̝̝̲̤̺͇̱͙ͯ͋ͯͦ̓
̮͖͔̯̻ͣ͛͆͑͊̒̽̇H̫̫̃̎̂e͙̳̺̭͓̗̮̖ͬ̔ͥ̓ ͕̬͖̠͖͉͕̬̀ͣͩ͗w͉̺͚͙̘̞̍̄̌͗̃ͪ͒ͦh͈̦͇̮̟̲͈̋ȯ̓̉ ̰̦̜̲̣͖̲͓͛͊́̋ ̮̝̰̙̦͛͗͐ͥ̑̎ͩW̜̯̳͉͓͓̱̦͊̃̐a̺̺̭̽̾ͭͭ̒̅̓i̤̘͓̅ ̗̙̭̖̦t̩̺̞ͭ̓̎̚s̥͙̞̺̟̝͎̪̠̽̒̾̈́ ͙̰̞̺̈̂̑͌ͨ̆ͅB̭̰̰͖̜̒ͫ̌̾ĕ̗͕͇̤̱̤̹̞ͫͪh͙͎͔̪̓ͨ ̤̱î͙̙̦͎͈̠̓̒̐̑n̠͓͉̭̭̙̎̈́d̥͒͒̋ͥͩͫͧ ̠̖̦̮̹ͭ͛̊ͫT͇̘̫͖̗͓̤ͥ͑̂̑̊ͣͥ͐h͖̦͇̍̓ͩ̅̈́ͫͧͣ͛e͊ ̝̮̤̮̻̼͚̜͂ͬ͋ͧ̌̾͛ͅ ̭̳̩̦̞͎̜͛͑̓͂ͪ͐ͤͅͅW̟͚̫͕͓̺͍̅ả̜͕̭̻͚̗̖̂ͤl͊ͧͦ ͓̙̗͇̜͇̦͆̉ͣ͌̓l̰͍͇̟ͮ̓̇.̭͓̞̙̭̑ͬ͂
̹̘͇̳̘̥͍̉ͬ͆ͨ̃ͪ̿Ż̲̫͉̭̳̘̐̆ͯ̀A̦͖͉͉̪̥͓̋ͧ͊̏̏ͅ L̝͚͖̘̼͙̙͋ͨ̄͌͗̏̽G̟͇̣̺̬͖̭͂̎ͨͮͣ̾ͤO͇̓ͩ͊ͭͭ̐̆ͅ ̳̳̯̳̹̠!͉̤͉̻̫̻͂̿͛ͬ̃
Ответить
Вот, примерно так это было бы, если стараться сделать понятно, и без магических чисел.