辐射图增加矩阵预览,去除不合理掉落辅助函数

This commit is contained in:
kercylan98 2023-06-06 12:33:57 +08:00
parent dd68a7c8e9
commit dff93e922d
2 changed files with 14 additions and 86 deletions

View File

@ -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
}

View File

@ -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
}