英雄技能

This commit is contained in:
meixiongfeng 2023-11-01 21:08:55 +08:00
parent 03b8514aee
commit cbf5cd8f3f
3 changed files with 75 additions and 44 deletions

View File

@ -241,7 +241,7 @@ func (this *Room) ReceiveMessage(session comm.IUserSession, stype string, msg pr
} }
if this.player1.Energy >= conf.Skillload { if this.player1.Energy >= conf.Skillload {
this.player1.Energy = 0 // 清零 this.player1.Energy = 0 // 清零
if _, m := this.chessboard.SkillUp(color, conf.Skilleffect, conf.Skillvalue, true); len(m) > 0 { if _, m := this.chessboard.SkillUp(0, color, conf.Skilleffect, conf.Skillvalue, true); len(m) > 0 {
szMap = append(szMap, m...) szMap = append(szMap, m...)
} else { } else {
szMap = append(szMap, &pb.MapData{ szMap = append(szMap, &pb.MapData{
@ -273,7 +273,7 @@ func (this *Room) ReceiveMessage(session comm.IUserSession, stype string, msg pr
} }
if this.player2.Energy >= conf.Skillload { if this.player2.Energy >= conf.Skillload {
this.player2.Energy = 0 // 清零 this.player2.Energy = 0 // 清零
if _, m := this.chessboard.SkillUp(color, conf.Skilleffect, conf.Skillvalue, true); len(m) > 0 { if _, m := this.chessboard.SkillUp(0, color, conf.Skilleffect, conf.Skillvalue, true); len(m) > 0 {
szMap = append(szMap, m...) szMap = append(szMap, m...)
} else { } else {
szMap = append(szMap, &pb.MapData{ szMap = append(szMap, &pb.MapData{

View File

@ -89,11 +89,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")
@ -372,7 +372,7 @@ func (this *MapData) CheckMap(color int32, bSkill bool) (szMap []*pb.MapData, xc
} else if s == FiveType { // 随机消除 } else if s == FiveType { // 随机消除
// 获取配置 // 获取配置
if c, _ := this.module.configure.GetGameBlock(this.Plat[id].Color, FiveType); c != nil { if c, _ := this.module.configure.GetGameBlock(this.Plat[id].Color, FiveType); c != nil {
if xc, _ := this.SkillUp(color, 1, c.Value, false); len(xc) > 0 { if xc, _ := this.SkillUp(0, color, 1, c.Value, false); len(xc) > 0 {
//szMap = append(szMap, sz...) //szMap = append(szMap, sz...)
for key := range xc { for key := range xc {
x[key] = struct{}{} x[key] = struct{}{}
@ -499,15 +499,45 @@ func (this *MapData) AiSwapGirde() (szMap []*pb.MapData, oid1 int32, oid2 int32,
} }
// 释放技能 技能id 和参数 // 释放技能 技能id 和参数
func (this *MapData) SkillUp(color int32, skillid int32, value int32, bDrop bool) (x map[int]struct{}, szMap []*pb.MapData) { func (this *MapData) SkillUp(pos int32, color int32, skillid int32, value int32, bDrop bool) (x map[int]struct{}, szMap []*pb.MapData) {
var ( var (
skillScore int32 // 技能获得的分数 skillScore int32 // 技能获得的分数
skillEnergy int32 // 技能获得的能量 skillEnergy int32 // 技能获得的能量
ids []int
) )
if skillid == 1 { // 随机消除盘面上X个方块 if skillid == 1 { // 随机消除盘面上X个方块
x = make(map[int]struct{}) x = make(map[int]struct{})
ids := utils.RandomNumbers(0, Total-1, int(value)) ids = utils.RandomNumbers(0, Total-1, int(value))
} else if skillid == 2 { // 找到pos 位置的所有方块
x := int(pos / Width)
y := int(pos % Height)
for i := 1; i < 7; i++ {
if x-i >= 0 && y+i < Height { // 左上
ids = append(ids, (x-i)*Width+(y+i))
}
if x-i >= 0 && y-i >= 0 { // 左下
ids = append(ids, (x-i)*Width+(y-i))
}
if x+i < Width && y+i < Height { // 右上
ids = append(ids, (x+i)*Width+(y+i))
}
if x+i < Width && y-i >= 0 { // 右下
ids = append(ids, (x+i)*Width+(y-i))
}
}
} else if skillid == 3 { //选中一个方块,然后消除盘面上所有相同颜色的方块。
c := this.Plat[pos].Color
for index, v1 := range this.Plat {
if v1.Color == c {
ids = append(ids, index)
}
}
}
for _, id := range ids { for _, id := range ids {
s := this.Plat[id].Special s := this.Plat[id].Special
if s != 0 { if s != 0 {
@ -522,7 +552,7 @@ func (this *MapData) SkillUp(color int32, skillid int32, value int32, bDrop bool
} else if s == FiveType { // 随机消除 } else if s == FiveType { // 随机消除
// 获取配置 // 获取配置
if c, _ := this.module.configure.GetGameBlock(this.Plat[id].Color, FiveType); c != nil { if c, _ := this.module.configure.GetGameBlock(this.Plat[id].Color, FiveType); c != nil {
if xc, _ := this.SkillUp(color, 1, c.Value, false); len(xc) > 0 { // 递归调用 if xc, _ := this.SkillUp(pos, color, 1, c.Value, false); len(xc) > 0 { // 递归调用
for key := range xc { for key := range xc {
x[key] = struct{}{} x[key] = struct{}{}
} }
@ -551,7 +581,6 @@ func (this *MapData) SkillUp(color int32, skillid int32, value int32, bDrop bool
} }
} }
} }
}
return return
} }

View File

@ -84,6 +84,8 @@ func Test_Main(t *testing.T) {
}() }()
m := new(entertainment.MapData) m := new(entertainment.MapData)
m.InitMap(nil) m.InitMap(nil)
m.Debugf()
m.SkillUp(24, 1, 2, 7, true)
// m.SetMap() // m.SetMap()
b := m.CheckAndRefreshPlat() b := m.CheckAndRefreshPlat()
fmt.Printf("xxxx%v", b) fmt.Printf("xxxx%v", b)
@ -112,7 +114,7 @@ func Test_Main(t *testing.T) {
// if bSwap, m := m.AiSwapGirde(); bSwap { // if bSwap, m := m.AiSwapGirde(); bSwap {
// szMap = append(szMap, m...) // szMap = append(szMap, m...)
// } // }
m.SkillUp(1, 1, 7, true) m.SkillUp(0, 1, 2, 7, true)
m.SwapGirde(1, 8) m.SwapGirde(1, 8)
//m.CheckMap(1) //m.CheckMap(1)