辐射图增加矩阵预览,去除不合理掉落辅助函数
This commit is contained in:
parent
dd68a7c8e9
commit
dff93e922d
|
@ -27,49 +27,6 @@ func SlideDropXY[T any](matrix [][]T, x, y int, isStop func(start T, x, y int, d
|
|||
return
|
||||
}
|
||||
|
||||
// SlideDropX 侧滑掉落一整列
|
||||
// - 返回每一个成员的x、y轴新坐标
|
||||
func SlideDropX[T any](matrix [][]T, x int, isStop func(start T, x, y int, data T) bool) (result [][2]int, change bool) {
|
||||
result = make([][2]int, len(matrix[x]))
|
||||
for y := len(matrix[x]) - 1; y >= 0; y-- {
|
||||
dropX, dropY := SlideDropXY(matrix, x, y, isStop)
|
||||
result[y] = PositionToArray(dropX, dropY)
|
||||
if y != dropY {
|
||||
change = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// SlideDropY 侧滑掉落一整行
|
||||
// - 返回每一个成员的x、y轴新坐标
|
||||
func SlideDropY[T any](matrix [][]T, y int, isStop func(start T, x, y int, data T) bool) (result [][2]int, change bool) {
|
||||
result = make([][2]int, len(matrix))
|
||||
for x := 0; x < len(matrix); x++ {
|
||||
dropX, dropY := SlideDropXY(matrix, x, y, isStop)
|
||||
result[x] = PositionToArray(dropX, dropY)
|
||||
if x != dropX {
|
||||
change = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// SlideDrop 侧滑掉落整个矩阵
|
||||
func SlideDrop[T any](matrix [][]T, isStop func(start T, x, y int, data T) bool) (result [][][2]int, change bool) {
|
||||
result = make([][][2]int, len(matrix))
|
||||
for x := 0; x < len(matrix); x++ {
|
||||
ys := make([][2]int, len(matrix[x]))
|
||||
var dropYs [][2]int
|
||||
dropYs, change = SlideDropX(matrix, x, isStop)
|
||||
for y, position := range dropYs {
|
||||
ys[y] = position
|
||||
}
|
||||
result[x] = ys
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// VerticalDropXY 垂直掉落特定位置成员
|
||||
func VerticalDropXY[T any](matrix [][]T, x, y int, isStop func(start T, x, y int, data T) bool) (dropX, dropY int) {
|
||||
height := len(matrix[0])
|
||||
|
@ -83,46 +40,3 @@ func VerticalDropXY[T any](matrix [][]T, x, y int, isStop func(start T, x, y int
|
|||
offsetY++
|
||||
}
|
||||
}
|
||||
|
||||
// VerticalDropX 垂直掉落一整列
|
||||
// - 返回每一个成员的y轴新坐标
|
||||
func VerticalDropX[T any](matrix [][]T, x int, isStop func(start T, x, y int, data T) bool) (result []int, change bool) {
|
||||
result = make([]int, len(matrix[x]))
|
||||
for y := len(matrix[x]) - 1; y >= 0; y-- {
|
||||
_, dropY := VerticalDropXY(matrix, x, y, isStop)
|
||||
result[y] = dropY
|
||||
if y != dropY {
|
||||
change = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// VerticalDropY 垂直掉落一整行
|
||||
// - 返回每一个成员的x轴新坐标
|
||||
func VerticalDropY[T any](matrix [][]T, y int, isStop func(start T, x, y int, data T) bool) (result []int, change bool) {
|
||||
result = make([]int, len(matrix))
|
||||
for x := 0; x < len(matrix); x++ {
|
||||
dropX, _ := VerticalDropXY(matrix, x, y, isStop)
|
||||
result[x] = dropX
|
||||
if x != dropX {
|
||||
change = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// VerticalDrop 垂直掉落整个矩阵
|
||||
func VerticalDrop[T any](matrix [][]T, isStop func(start T, x, y int, data T) bool) (result [][][2]int, change bool) {
|
||||
result = make([][][2]int, len(matrix))
|
||||
for x := 0; x < len(matrix); x++ {
|
||||
ys := make([][2]int, len(matrix[x]))
|
||||
var dropYs []int
|
||||
dropYs, change = VerticalDropX(matrix, x, isStop)
|
||||
for y, positionY := range dropYs {
|
||||
ys[y] = PositionToArray(x, positionY)
|
||||
}
|
||||
result[x] = ys
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package g2d
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/kercylan98/minotaur/utils/hash"
|
||||
"github.com/kercylan98/minotaur/utils/synchronization"
|
||||
"sync"
|
||||
|
@ -159,3 +160,16 @@ func (slf *RadiationPattern[ItemType, Item]) searchNeighbour(x, y int, filter *s
|
|||
})
|
||||
slf.links.Set(itemGuid, neighbours)
|
||||
}
|
||||
|
||||
func (slf *RadiationPattern[ItemType, Item]) String() string {
|
||||
var g string
|
||||
for y := 0; y < len(slf.matrix[0]); y++ {
|
||||
for x := 0; x < len(slf.matrix); x++ {
|
||||
item := slf.matrix[x][y]
|
||||
g += fmt.Sprintf("%v\t\t", item.GetType())
|
||||
}
|
||||
g += "\r\n"
|
||||
}
|
||||
g += "\r\n"
|
||||
return g
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue