Merge branch 'dev' of http://git.legu.cc/liwei_3d/go_dreamfactory into dev
This commit is contained in:
commit
04e8b8db59
@ -229,195 +229,7 @@ func (this *MapData) Debugf() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查5消 (s 是生成新的一个新的元素 key 下标 value 消除后效果类型)
|
func (this *MapData) Check3X() (bEliminate bool) {
|
||||||
func (this *MapData) Check5X() (bEliminate bool, xiaochu []int, s map[int]int) {
|
|
||||||
//var xiaochu []int // 即将消除的key
|
|
||||||
s = make(map[int]int)
|
|
||||||
for k, v := range this.Plat {
|
|
||||||
|
|
||||||
if v.Cid == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x := int32(k % Height) // x
|
|
||||||
if x+4 < Height {
|
|
||||||
k1 := this.Plat[k].Color
|
|
||||||
k2 := this.Plat[k+1].Color
|
|
||||||
k3 := this.Plat[k+2].Color
|
|
||||||
k4 := this.Plat[k+3].Color
|
|
||||||
k5 := this.Plat[k+4].Color
|
|
||||||
|
|
||||||
if k1 == k2 && k3 == k4 && k5 == k1 && k2 == k3 {
|
|
||||||
s[k+2] = FiveType
|
|
||||||
xiaochu = append(xiaochu, []int{k, k + 1, k + 2, k + 3, k + 4}...)
|
|
||||||
this.Plat[k].Cid = 0
|
|
||||||
this.Plat[k+1].Cid = 0
|
|
||||||
this.Plat[k+2].Cid = 0
|
|
||||||
this.Plat[k+3].Cid = 0
|
|
||||||
this.Plat[k+4].Cid = 0
|
|
||||||
bEliminate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if k+4*Width < Total {
|
|
||||||
k1 := this.Plat[k].Color
|
|
||||||
k2 := this.Plat[k+Width].Color
|
|
||||||
k3 := this.Plat[k+2*Width].Color
|
|
||||||
k4 := this.Plat[k+3*Width].Color
|
|
||||||
k5 := this.Plat[k+4*Width].Color
|
|
||||||
|
|
||||||
if k1 == k2 && k3 == k4 && k5 == k1 && k2 == k3 {
|
|
||||||
s[k+2*Width] = FiveType
|
|
||||||
xiaochu = append(xiaochu, []int{k, k + Width, k + 2*Width, k + 3*Width, k + 4*Width}...)
|
|
||||||
this.Plat[k].Cid = 0
|
|
||||||
this.Plat[k+Width].Cid = 0
|
|
||||||
this.Plat[k+2*Width].Cid = 0
|
|
||||||
this.Plat[k+3*Width].Cid = 0
|
|
||||||
this.Plat[k+4*Width].Cid = 0
|
|
||||||
bEliminate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// // 校验上下左右
|
|
||||||
// for j := 0; j < Width; j++ {
|
|
||||||
// for k := 0; k < Height; k++ {
|
|
||||||
// pos := j*Width + k
|
|
||||||
// if pos+2 < Height {
|
|
||||||
// k1 := this.Plat[pos].Color
|
|
||||||
// k2 := this.Plat[pos+1].Color
|
|
||||||
// k3 := this.Plat[pos+2].Color
|
|
||||||
// var k4 int32
|
|
||||||
// var k5 int32
|
|
||||||
// if k1 == k2 && k3 == k1 { // 三个颜色相等
|
|
||||||
// tmp := pos
|
|
||||||
// index := 0
|
|
||||||
// for {
|
|
||||||
// index++
|
|
||||||
// if tmp/Width-2 >= 0 { // k1 的左右
|
|
||||||
// k4 = this.Plat[tmp/Width-1].Color
|
|
||||||
// k5 = this.Plat[tmp/Width-2].Color
|
|
||||||
// if k1 == k4 && k1 == k5 {
|
|
||||||
// bEliminate = true
|
|
||||||
// s[tmp] = FiveType
|
|
||||||
// this.Plat[pos].Cid = 0
|
|
||||||
// this.Plat[pos+1].Cid = 0
|
|
||||||
// this.Plat[pos+2].Cid = 0
|
|
||||||
// this.Plat[tmp/Width-1].Cid = 0
|
|
||||||
// this.Plat[tmp/Width-2].Cid = 0
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if tmp/Width+2 < Width {
|
|
||||||
// k4 = this.Plat[tmp/Width+1].Color
|
|
||||||
// k5 = this.Plat[tmp/Width+2].Color
|
|
||||||
// if k1 == k4 && k1 == k5 {
|
|
||||||
// bEliminate = true
|
|
||||||
// s[tmp] = FiveType
|
|
||||||
// this.Plat[pos].Cid = 0
|
|
||||||
// this.Plat[pos+1].Cid = 0
|
|
||||||
// this.Plat[pos+2].Cid = 0
|
|
||||||
// this.Plat[tmp/Width+1].Cid = 0
|
|
||||||
// this.Plat[tmp/Width+2].Cid = 0
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// tmp = pos + 2
|
|
||||||
// if index == 2 {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *MapData) Check4X() (bEliminate bool, xiaochu []int, s map[int]int) {
|
|
||||||
var (
|
|
||||||
newElem int // 生成的一个新的元素CID
|
|
||||||
)
|
|
||||||
s = make(map[int]int)
|
|
||||||
|
|
||||||
for k, v := range this.Plat {
|
|
||||||
|
|
||||||
if v.Cid == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x := int32(k % Height) // x
|
|
||||||
newElem = 0
|
|
||||||
if x+3 < Height {
|
|
||||||
k1 := this.Plat[k].Color
|
|
||||||
k2 := this.Plat[k+1].Color
|
|
||||||
k3 := this.Plat[k+2].Color
|
|
||||||
k4 := this.Plat[k+3].Color
|
|
||||||
|
|
||||||
if k1 == k2 && k3 == k4 && k2 == k3 {
|
|
||||||
for _, v1 := range this.operElem {
|
|
||||||
for i := 0; i <= 3; i++ {
|
|
||||||
if int(v1) == k+i {
|
|
||||||
newElem = int(v1)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if newElem != 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if newElem == 0 {
|
|
||||||
newElem = k + 2 // 给个默认值
|
|
||||||
}
|
|
||||||
// 如果当前生成的也是一个特殊的元素 直接消除
|
|
||||||
if this.Plat[newElem].Special == 0 {
|
|
||||||
s[newElem] = FourUType
|
|
||||||
}
|
|
||||||
|
|
||||||
xiaochu = append(xiaochu, []int{k, k + 1, k + 2, k + 3}...)
|
|
||||||
for _, v := range xiaochu {
|
|
||||||
this.Plat[v].Cid = 0
|
|
||||||
}
|
|
||||||
bEliminate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if k+3*Width < Total {
|
|
||||||
k1 := this.Plat[k].Color
|
|
||||||
k2 := this.Plat[k+Width].Color
|
|
||||||
k3 := this.Plat[k+2*Width].Color
|
|
||||||
k4 := this.Plat[k+3*Width].Color
|
|
||||||
|
|
||||||
if k1 == k2 && k3 == k4 && k2 == k3 {
|
|
||||||
for _, v1 := range this.operElem {
|
|
||||||
for i := 0; i <= 3; i++ {
|
|
||||||
if int(v1) == k+i*Width {
|
|
||||||
newElem = int(v1) // 创建一个特殊的元素
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if newElem != 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if newElem == 0 {
|
|
||||||
newElem = k + 2*Width // 给个默认值
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果当前生成的也是一个特殊的元素 直接消除
|
|
||||||
if this.Plat[newElem].Special == 0 {
|
|
||||||
s[newElem] = FourLType
|
|
||||||
}
|
|
||||||
xiaochu = append(xiaochu, k+Width)
|
|
||||||
xiaochu = append(xiaochu, []int{k, k + Width, k + 2*Width, k + 3*Width}...)
|
|
||||||
for _, v := range xiaochu {
|
|
||||||
this.Plat[v].Cid = 0
|
|
||||||
}
|
|
||||||
bEliminate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *MapData) Check3X() (bEliminate bool, xiaochu []int) {
|
|
||||||
//var xiaochu []int // 即将消除的key
|
|
||||||
for k, v := range this.Plat {
|
for k, v := range this.Plat {
|
||||||
b := false
|
b := false
|
||||||
for _, e := range this.operElem {
|
for _, e := range this.operElem {
|
||||||
@ -430,35 +242,25 @@ func (this *MapData) Check3X() (bEliminate bool, xiaochu []int) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
x := int32(k % Height) // x
|
x := int32(k % Height) // x
|
||||||
|
|
||||||
if x+2 < Height {
|
if x+2 < Height {
|
||||||
k1 := this.Plat[k].Color
|
k1 := this.Plat[k].Color
|
||||||
k2 := this.Plat[k+1].Color
|
k2 := this.Plat[k+1].Color
|
||||||
k3 := this.Plat[k+2].Color
|
k3 := this.Plat[k+2].Color
|
||||||
if k1 == k2 && k2 == k3 {
|
if k1 == k2 && k2 == k3 {
|
||||||
xiaochu = append(xiaochu, []int{k, k + 1, k + 2}...)
|
|
||||||
this.Plat[k].Cid = 0
|
|
||||||
this.Plat[k+1].Cid = 0
|
|
||||||
this.Plat[k+2].Cid = 0
|
|
||||||
bEliminate = true
|
bEliminate = true
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if k+2*Width < Total {
|
if k+2*Width < Total {
|
||||||
k1 := this.Plat[k].Color
|
k1 := this.Plat[k].Color
|
||||||
k2 := this.Plat[k+Width].Color
|
k2 := this.Plat[k+Width].Color
|
||||||
k3 := this.Plat[k+2*Width].Color
|
k3 := this.Plat[k+2*Width].Color
|
||||||
|
|
||||||
if k1 == k2 && k2 == k3 {
|
if k1 == k2 && k2 == k3 {
|
||||||
xiaochu = append(xiaochu, []int{k, k + Width, k + 2*Width}...)
|
|
||||||
this.Plat[k].Cid = 0
|
|
||||||
this.Plat[k+Width].Cid = 0
|
|
||||||
this.Plat[k+2*Width].Cid = 0
|
|
||||||
bEliminate = true
|
bEliminate = true
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1078,8 +880,7 @@ func (this *MapData) SetIndelibilityPlat() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
if b, _ := this.Check3X(); b {
|
if b := this.Check3X(); b {
|
||||||
fmt.Printf("plat init\n")
|
|
||||||
if _, xc := this.CheckMap(0, false); !xc {
|
if _, xc := this.CheckMap(0, false); !xc {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user