元素蔓延技能
This commit is contained in:
parent
24bfff009d
commit
16249e20e9
@ -64,7 +64,6 @@ func (this *MapData) CreateGride(count int) (girdes []*pb.GirdeData) {
|
|||||||
Score: 1,
|
Score: 1,
|
||||||
Special: 0,
|
Special: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
id = this.GetRandType()
|
id = this.GetRandType()
|
||||||
conf, err = this.module.configure.GetGameBlockByKey(id)
|
conf, err = this.module.configure.GetGameBlockByKey(id)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -149,6 +148,9 @@ func (this *MapData) InitMap(module *Entertainment, iType int32) {
|
|||||||
this.SetIndelibilityPlat()
|
this.SetIndelibilityPlat()
|
||||||
this.Plat = this.GetPalatData()
|
this.Plat = this.GetPalatData()
|
||||||
//this.SetMap() // 方便测试固定地图
|
//this.SetMap() // 方便测试固定地图
|
||||||
|
|
||||||
|
fmt.Printf("=======%v=========\n", this.Skill3(24, 0))
|
||||||
|
this.Debugf()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 交换之前先判断是不是特殊元素的交换
|
// 交换之前先判断是不是特殊元素的交换
|
||||||
@ -227,11 +229,11 @@ func (this *MapData) SwapGirde(oldId, newId int32) (bSwap bool) {
|
|||||||
|
|
||||||
func (this *MapData) Debugf() {
|
func (this *MapData) Debugf() {
|
||||||
fmt.Printf("================\n")
|
fmt.Printf("================\n")
|
||||||
//var v int
|
var v int
|
||||||
for index := Width - 1; index >= 0; index-- {
|
for index := Width - 1; index >= 0; index-- {
|
||||||
for j := 0; j < Height; j++ {
|
for j := 0; j < Height; j++ {
|
||||||
// v = index + j*7
|
v = index + j*7
|
||||||
fmt.Printf("%d:%d ", this.Plat[index+j*Height].Oid, this.Plat[index+j*Height].Cid)
|
fmt.Printf("%d:%d ", v, this.Plat[index+j*Height].Cid)
|
||||||
|
|
||||||
}
|
}
|
||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
@ -726,19 +728,10 @@ func (this *MapData) SkillUp(pos int32, color int32, skillid int32, value int32,
|
|||||||
ids = append(ids, 3*Width+i)
|
ids = append(ids, 3*Width+i)
|
||||||
}
|
}
|
||||||
} else if skillid == 3 { // 四周蔓延 第一次100% 第二次 60% 第三次 30% 第四次 10% 最多4次
|
} else if skillid == 3 { // 四周蔓延 第一次100% 第二次 60% 第三次 30% 第四次 10% 最多4次
|
||||||
var mids map[int]struct{}
|
for k := range this.Skill3(pos, 0) {
|
||||||
mids = make(map[int]struct{}, 0)
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
dd := this.Skill3(pos, int32(i))
|
|
||||||
for k := range dd {
|
|
||||||
for s := range this.Skill3(int32(k), int32(i)) {
|
|
||||||
mids[s] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for k := range mids {
|
|
||||||
ids = append(ids, k) // 转换成最终消除的坐标
|
ids = append(ids, k) // 转换成最终消除的坐标
|
||||||
}
|
}
|
||||||
|
ids = append(ids, int(pos)) // 包含自己
|
||||||
}
|
}
|
||||||
for _, id := range ids {
|
for _, id := range ids {
|
||||||
if s := this.Plat[id].Special; s != 0 {
|
if s := this.Plat[id].Special; s != 0 {
|
||||||
@ -810,7 +803,7 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) {
|
|||||||
// xia
|
// xia
|
||||||
pos := k - 1
|
pos := k - 1
|
||||||
if x > 0 {
|
if x > 0 {
|
||||||
if pos%Height > 0 { // 左右
|
if pos%Height >= 0 { // 左右
|
||||||
if pos/Width-1 >= 0 { //左
|
if pos/Width-1 >= 0 { //左
|
||||||
p := this.Plat[pos-Width].Color
|
p := this.Plat[pos-Width].Color
|
||||||
if p == k1 {
|
if p == k1 {
|
||||||
@ -980,7 +973,9 @@ func (this *MapData) SetIndelibilityPlat() {
|
|||||||
oldId := Total - 1
|
oldId := Total - 1
|
||||||
for i := 0; i < Total; i++ {
|
for i := 0; i < Total; i++ {
|
||||||
if this.Plat[oldId].Color == k3 { // 找到颜色不一样的
|
if this.Plat[oldId].Color == k3 { // 找到颜色不一样的
|
||||||
oldId -= 1
|
if oldId > 0 {
|
||||||
|
oldId -= 1
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -1045,6 +1040,7 @@ func (this *MapData) Skill3(pos int32, count int32) (m map[int]struct{}) {
|
|||||||
m = make(map[int]struct{}, 0)
|
m = make(map[int]struct{}, 0)
|
||||||
var sz []int
|
var sz []int
|
||||||
var percent int32
|
var percent int32
|
||||||
|
var cur []int
|
||||||
// 先找出可以蔓延的方向
|
// 先找出可以蔓延的方向
|
||||||
x := int(pos / Width)
|
x := int(pos / Width)
|
||||||
y := int(pos % Height)
|
y := int(pos % Height)
|
||||||
@ -1061,12 +1057,12 @@ func (this *MapData) Skill3(pos int32, count int32) (m map[int]struct{}) {
|
|||||||
sz = append(sz, (x+1)*Width+(y))
|
sz = append(sz, (x+1)*Width+(y))
|
||||||
}
|
}
|
||||||
|
|
||||||
if count == 0 {
|
if count == 0 { // 蔓延技能概率调整支持配置
|
||||||
percent = 100
|
percent = 100
|
||||||
} else if count == 1 {
|
} else if count == 1 {
|
||||||
percent = 100
|
percent = 60
|
||||||
} else if count == 2 || count == 3 {
|
} else if count == 2 || count == 3 {
|
||||||
percent = 100
|
percent = 30
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1075,6 +1071,18 @@ func (this *MapData) Skill3(pos int32, count int32) (m map[int]struct{}) {
|
|||||||
for _, v := range szid {
|
for _, v := range szid {
|
||||||
if percent >= comm.GetRandNum(0, 100) {
|
if percent >= comm.GetRandNum(0, 100) {
|
||||||
m[sz[v]] = struct{}{}
|
m[sz[v]] = struct{}{}
|
||||||
|
cur = append(cur, sz[v])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
|
||||||
|
// for _, v := range cur {
|
||||||
|
// fmt.Printf("=======蔓延的id:%d====,count=%d====\n", v, count)
|
||||||
|
// }
|
||||||
|
// fmt.Printf("=======count=%d====\n", count)
|
||||||
|
for _, k := range cur {
|
||||||
|
for k1 := range this.Skill3(int32(k), count) { // 递归蔓延
|
||||||
|
m[k1] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1206,10 +1214,8 @@ func (this *MapData) SpecialElem(id int, s int32) (x map[int]struct{}) {
|
|||||||
if k == id {
|
if k == id {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
sp := this.Plat[k].Special
|
if this.Plat[k].Special != 0 {
|
||||||
if sp != 0 {
|
ids := this.SpecialElem(k, this.Plat[k].Special) // 递归调用
|
||||||
this.Plat[k].Special = 0
|
|
||||||
ids := this.SpecialElem(k, sp) // 递归调用
|
|
||||||
for key := range ids {
|
for key := range ids {
|
||||||
x[key] = struct{}{}
|
x[key] = struct{}{}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,10 @@ func Test_Main(t *testing.T) {
|
|||||||
// fmt.Printf("xxxx%v", sz)
|
// fmt.Printf("xxxx%v", sz)
|
||||||
m := new(entertainment.MapData)
|
m := new(entertainment.MapData)
|
||||||
m.InitMap(nil, 1)
|
m.InitMap(nil, 1)
|
||||||
|
m.SetMap()
|
||||||
|
m.Debugf()
|
||||||
|
|
||||||
|
fmt.Printf("xxxx %v\n", m.Skill3(24, 0))
|
||||||
//m.SkillUp(24, 1, 3, 7, true)
|
//m.SkillUp(24, 1, 3, 7, true)
|
||||||
|
|
||||||
b := m.GetFireBoom(1, 7)
|
b := m.GetFireBoom(1, 7)
|
||||||
|
Loading…
Reference in New Issue
Block a user