辐射图增加矩阵预览,去除不合理掉落辅助函数
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
|
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 垂直掉落特定位置成员
|
// VerticalDropXY 垂直掉落特定位置成员
|
||||||
func VerticalDropXY[T any](matrix [][]T, x, y int, isStop func(start T, x, y int, data T) bool) (dropX, dropY int) {
|
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])
|
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++
|
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
|
package g2d
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/kercylan98/minotaur/utils/hash"
|
"github.com/kercylan98/minotaur/utils/hash"
|
||||||
"github.com/kercylan98/minotaur/utils/synchronization"
|
"github.com/kercylan98/minotaur/utils/synchronization"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -159,3 +160,16 @@ func (slf *RadiationPattern[ItemType, Item]) searchNeighbour(x, y int, filter *s
|
||||||
})
|
})
|
||||||
slf.links.Set(itemGuid, neighbours)
|
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