У меня есть карта координат [[Int]], которую я использую, чтобы определить, был ли игрок уже в каком-либо месте, и дает обзор этого места.
In order to make it look nicer, I want to have a dissolved border at the edges of the black spots. see example 2:
изображение с красивыми границами
для этого я проверяю свой массив зрения на 9 полей вокруг области, и если определенное c созвездие имеет черный цвет, оно выберет соответствующее изображение для отображения.
func getTileImage(index: Int) -> String {
let tileCoordinates = convertInto2D(index: index)
var tile : [Bool] = [false,false,false,false,false,false,false,false,false,false]
if (tileCoordinates.x >= 1) && (tileCoordinates.y >= 1) { if visionMap[tileCoordinates.x - 1][tileCoordinates.y - 1] == 0 { tile[1] = true } }
if (tileCoordinates.x >= 1) && (tileCoordinates.y >= 0) { if visionMap[tileCoordinates.x - 1][tileCoordinates.y - 0] == 0 { tile[2] = true } }
if (tileCoordinates.x >= 1) && (tileCoordinates.y < 19) { if visionMap[tileCoordinates.x - 1][tileCoordinates.y + 1] == 0 { tile[3] = true } }
if (tileCoordinates.x >= 0) && (tileCoordinates.y >= 1) { if visionMap[tileCoordinates.x - 0][tileCoordinates.y - 1] == 0 { tile[4] = true } }
if visionMap[tileCoordinates.x - 0][tileCoordinates.y - 0] == 0 { tile[5] = true }
if (tileCoordinates.x >= 0) && (tileCoordinates.y < 19) { if visionMap[tileCoordinates.x - 0][tileCoordinates.y + 1] == 0 { tile[6] = true } }
if (tileCoordinates.x < 14) && (tileCoordinates.y >= 1) { if visionMap[tileCoordinates.x + 1][tileCoordinates.y - 1] == 0 { tile[7] = true } }
if (tileCoordinates.x < 14) && (tileCoordinates.y >= 0) { if visionMap[tileCoordinates.x + 1][tileCoordinates.y - 0] == 0 { tile[8] = true } }
if (tileCoordinates.x < 14) && (tileCoordinates.y < 19) { if visionMap[tileCoordinates.x + 1][tileCoordinates.y + 1] == 0 { tile[9] = true } }
if tile[2] == true && tile[3] == true && tile[6] == true {return "righttop"}
if tile[3] == true && tile[6] == true && tile[7] == true && tile[8] == true && tile[9] == true {return"rightbottom"}
if tile[3] == true && tile[6] == true && tile[8] == true && tile[9] == true {return"rightbottom"}
if tile[6] == true && tile[7] == true && tile[8] == true && tile[9] == true {return"rightbottom"}
if tile[1] == true && tile[2] == true && tile[4] == true {return "lefttop"}
if tile[2] == true && tile[6] == false && tile[4] == false {return "top"}
if tile[4] == true && tile[2] == false && tile[8] == false {return "left"}
if tile[6] == true && tile[2] == false && tile[8] == false {return "right"}
if tile[7] == true && tile[4] == true && tile[8] == true {return "leftbottom"}
if tile[8] == true && tile[4] == false && tile[5] == false {return "bottom"}
if tile[9] == true && tile[6] == true && tile[8] == true {return "bottomright"}
if tile[4] == true && tile[1] == true && tile[2] == true && tile[3] == true && tile[6] == true {return "lefttopright"}
if tile[4] == true && tile[6] == true && tile[7] == true && tile[8] == true && tile[9] == true {return "leftrightbottom"}
if tile[1] == true && tile[2] == true && tile[4] == true && tile[7] == true && tile[8] == true {return "lefttopbottom"}
if tile[2] == true && tile[3] == true && tile[6] == true && tile[8] == true && tile[9] == true {return"righttopbottom"}
return ""
}
Этот код, на мой взгляд, не выглядит очень умным.
Прежде всего, есть общий способ проверить, нахожусь ли я на границах своей системы координат, поэтому мне не нужно проверять размер карты для каждого фрагмента: например, избавление от
if (tileCoordinates.x >= 1) && (tileCoordinates.y >= 1)
, потому что это зависит от размера карты, который в настоящее время составляет 15x20.
2-й: есть ли более разумный способ вернуть соответствующий image вместо проверки всех потенциальных возможностей?
Я почти уверен, что это используется во многих играх. Так что, если кто-то может помочь, мы будем очень признательны.