请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 1288|回复: 8

关于用WE作围棋对弈系统的两个问题。

[复制链接]
发表于 2013-7-27 15:07:15 | 显示全部楼层 |阅读模式
本帖最后由 gsylthj 于 2013-7-27 19:47 编辑

我最近在尝试用WE做出围棋的对弈系统。当然这只是第一步。第二步是让棋子能升级,最终做出一个能如围棋一样提掉对方棋子的塔防游戏。

当然,我现在遇到的问题,就是第一步中的问题。

首先说说我的思路。

第一点:围棋中最重要的就是横竖相连的棋块。同一个棋块要提一起提,所以应该编成一组。这里我用一个整数变量QK(数组)来表达。其中数组代表棋子落下的坐标。我用一维数列表达二维坐标。最底下一行是0~14一共13X13,0和14是边界。之所以要边界,是因为这样才能正确判断位于边上的棋子的气。这样,每一个棋子就有自己的一个自定义值。这个自定义值记录棋子的坐标。而QK(数组)中的数组就是这些棋子的坐标。而QK(数组)的值就是棋块代码。拥有相同QK值的棋子就被认为是横竖相连的整体。

第二点:落子之后,首先要计算的是横竖相邻四个点的对方棋子的气。有气这不动作,没气就要都提掉。我计算气的触发后面会说。

第三点:计算完对方的气,就要计算自己落下的这颗棋子有没有气。如果没有就必须删掉这个棋子,提示:这里是禁止落子点。当然还有一个禁止落子的情况就是打劫。不过这时先不考虑这个情况。因为我打算先做出正确自动判断提子的系统再说。

第四点,如果自己这颗子所属棋块有气,那么就都不做动作。轮到对方行棋。

这里,于是就要设计几个模块。第一个就是判断落子和相邻同色棋子是否在同一块中。如果是,就统统选中,将他们的棋块变量设为一个新的值(数组的最大值似乎是8000多,我觉得应该够用……吧……)。
第二个就是判断对方相邻棋子是否有气。第三个是判断自己是否有气。这就是落子(单位被建造)触发的内容。


然后就是判断气的触发。我的方法是这样的。

我想,一块有气的棋块,肯定有一颗棋子,它的四个相邻交界点有一个是空的。我的方法就是从这些棋子的坐标一维数列,从小到大判断一遍。一旦判断到一个空格点,就输出变量QI=T。否则如果从头到尾都没有判断到空格,就输出QI=F。如何判断是否都判断过?我用一个循环整数A,A范围是1到225(15X15,包括代表边界外的点都判断),然后依次判断QK(循环整数A)是否=QK(要判断的那个子的自定义值),如果相等,记录Wait_for_count+1(初始值为0).然后在用循环整数B,从1到225;只要QK(循环整数B)=QK(要判断那个子的自定义值),就判断他上下左右的格子的情况。有空格就停止,输出QI=T,没有就记录已经判断数量+1继续。如已经判断数量<Wait_for_count,就继续,等于就输出QI=F。

以上就是我的思路。可能用文字表达比较难理解。这里本人谢过各位高手。然后是我的触发。我本来是用触发编辑器转为文本格式。结果都是乱码。不得已只能转成J格式。

第一个触发,落子以后要做的事情的触发:

function Trig_Wight_side_go_n_______u_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'h001' ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func009Func002Func001C takes nothing returns boolean
    if ( not ( udg_QKxh == ( udg_Check_n - 1 ) ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func009C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n - 1 )] == 2 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func010Func002Func001C takes nothing returns boolean
    if ( not ( udg_QKxh == ( udg_Check_n + 1 ) ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func010C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n + 1 )] == 2 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func011Func002Func001C takes nothing returns boolean
    if ( not ( udg_QKxh == ( udg_Check_n - 15 ) ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func011C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n - 15 )] == 2 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func012Func002Func001C takes nothing returns boolean
    if ( not ( udg_QKxh == ( udg_Check_n + 15 ) ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func012C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n + 15 )] == 2 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetEnumUnit()) == 'h000' ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001Func002A takes nothing returns nothing
    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001Func002Func001C() ) then
        call KillUnit( GetEnumUnit() )
        set udg_Texiao_point = GetRectCenter(udg_XY[udg_TiZi])
        call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
        call RemoveLocation( udg_Texiao_point )
        set udg_BorWorN[udg_TiZi] = 0
        call GroupRemoveUnitSimple( GetEnumUnit(), udg_Blackqizi )
        call MultiboardSetItemIcon( MultiboardGetItem(udg_DMB, ( 13 - R2I(( I2R(udg_TiZi) / 15.00 )) ), ( ( udg_TiZi - ( R2I(( I2R(udg_TiZi) / I2R(15) )) * 15 ) ) - 2 )), "UI\\Minimap\\MinimapIconCreepLoc.blp" )
    else
        call DoNothing(  )
    endif
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001C takes nothing returns boolean
    if ( not ( udg_Check_or_not[udg_TiZi] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003C takes nothing returns boolean
    if ( not ( udg_qi == false ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n - 1 )] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetEnumUnit()) == 'h000' ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001Func002A takes nothing returns nothing
    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001Func002Func001C() ) then
        call KillUnit( GetEnumUnit() )
        set udg_Texiao_point = GetRectCenter(udg_XY[udg_TiZi])
        call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
        call RemoveLocation( udg_Texiao_point )
        set udg_BorWorN[udg_TiZi] = 0
        call GroupRemoveUnitSimple( GetEnumUnit(), udg_Blackqizi )
        call MultiboardSetItemIcon( MultiboardGetItem(udg_DMB, ( 13 - R2I(( I2R(udg_TiZi) / 15.00 )) ), ( ( udg_TiZi - ( R2I(( I2R(udg_TiZi) / I2R(15) )) * 15 ) ) - 2 )), "UI\\Minimap\\MinimapIconCreepLoc.blp" )
    else
        call DoNothing(  )
    endif
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001C takes nothing returns boolean
    if ( not ( udg_Check_or_not[udg_TiZi] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003C takes nothing returns boolean
    if ( not ( udg_qi == false ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n + 1 )] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetEnumUnit()) == 'h000' ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001Func002A takes nothing returns nothing
    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001Func002Func001C() ) then
        call KillUnit( GetEnumUnit() )
        set udg_Texiao_point = GetRectCenter(udg_XY[udg_TiZi])
        call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
        call RemoveLocation( udg_Texiao_point )
        set udg_BorWorN[udg_TiZi] = 0
        call GroupRemoveUnitSimple( GetEnumUnit(), udg_Blackqizi )
        call MultiboardSetItemIcon( MultiboardGetItem(udg_DMB, ( 13 - R2I(( I2R(udg_TiZi) / 15.00 )) ), ( ( udg_TiZi - ( R2I(( I2R(udg_TiZi) / I2R(15) )) * 15 ) ) - 2 )), "UI\\Minimap\\MinimapIconCreepLoc.blp" )
    else
        call DoNothing(  )
    endif
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001C takes nothing returns boolean
    if ( not ( udg_Check_or_not[udg_TiZi] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003C takes nothing returns boolean
    if ( not ( udg_qi == false ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n + 15 )] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetEnumUnit()) == 'h000' ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001Func002A takes nothing returns nothing
    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001Func002Func001C() ) then
        call KillUnit( GetEnumUnit() )
        set udg_Texiao_point = GetRectCenter(udg_XY[udg_TiZi])
        call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
        call RemoveLocation( udg_Texiao_point )
        set udg_BorWorN[udg_TiZi] = 0
        call GroupRemoveUnitSimple( GetEnumUnit(), udg_Blackqizi )
        call MultiboardSetItemIcon( MultiboardGetItem(udg_DMB, ( 13 - R2I(( I2R(udg_TiZi) / 15.00 )) ), ( ( udg_TiZi - ( R2I(( I2R(udg_TiZi) / I2R(15) )) * 15 ) ) - 2 )), "UI\\Minimap\\MinimapIconCreepLoc.blp" )
    else
        call DoNothing(  )
    endif
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001C takes nothing returns boolean
    if ( not ( udg_Check_or_not[udg_TiZi] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003C takes nothing returns boolean
    if ( not ( udg_qi == false ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_n - 15 )] == 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012Func021C takes nothing returns boolean
    if ( not ( udg_qi == false ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001Func012C takes nothing returns boolean
    if ( not ( udg_FBDpoint != udg_Check_n ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Func001Func001C takes nothing returns boolean
    if ( not ( RectContainsUnit(udg_XY[bj_forLoopAIndex], GetTriggerUnit()) == true ) ) then
        return false
    endif
    return true
endfunction
function Trig_Wight_side_go_n_______u_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 2
    set bj_forLoopAIndexEnd = 224
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( Trig_Wight_side_go_n_______u_Func001Func001C() ) then
            call SetUnitUserData( GetTriggerUnit(), bj_forLoopAIndex )
            call DisplayTextToPlayer( GetOwningPlayer(GetTriggerUnit()), 0, 0, I2S(bj_forLoopAIndex) )
            set udg_Check_n = bj_forLoopAIndex
            set udg_QK[udg_Check_n] = udg_QKn
            call DisplayTextToPlayer( Player(0), 0, 0, I2S(udg_QK[udg_Check_n]) )
            // 设置棋块变量QK(循环整数A)=QKn,无论第几步,QKn就是几。比如QK(45)=1,该棋子棋块编码就是1.
            set udg_QKn = ( udg_QKn + 1 )
            // 设置棋子的自定义值,设置棋块代码。
            call GroupAddUnitSimple( GetTriggerUnit(), udg_WightQiZi )
            set udg_BorWorN[bj_forLoopAIndex] = 2
            if ( Trig_Wight_side_go_n_______u_Func001Func001Func012C() ) then
                // 如果不是打劫禁入点,这开始为相邻棋块编成统一编码。
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func009C() ) then
                    set udg_QKxh = 1
                    loop
                        exitwhen udg_QKxh > 225
                        if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func009Func002Func001C() ) then
                            set udg_QK[udg_QKxh] = udg_QK[udg_Check_n]
                        else
                            call DoNothing(  )
                        endif
                        set udg_QKxh = udg_QKxh + 1
                    endloop
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func010C() ) then
                    set udg_QKxh = 1
                    loop
                        exitwhen udg_QKxh > 225
                        if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func010Func002Func001C() ) then
                            set udg_QK[udg_QKxh] = udg_QK[udg_Check_n]
                        else
                            call DoNothing(  )
                        endif
                        set udg_QKxh = udg_QKxh + 1
                    endloop
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func011C() ) then
                    set udg_QKxh = 1
                    loop
                        exitwhen udg_QKxh > 225
                        if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func011Func002Func001C() ) then
                            set udg_QK[udg_QKxh] = udg_QK[udg_Check_n]
                        else
                            call DoNothing(  )
                        endif
                        set udg_QKxh = udg_QKxh + 1
                    endloop
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func012C() ) then
                    set udg_QKxh = 1
                    loop
                        exitwhen udg_QKxh > 225
                        if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func012Func002Func001C() ) then
                            set udg_QK[udg_QKxh] = udg_QK[udg_Check_n]
                        else
                            call DoNothing(  )
                        endif
                        set udg_QKxh = udg_QKxh + 1
                    endloop
                else
                    call DoNothing(  )
                endif
                // 四个相邻点依次检查完毕。如果有同色棋子,把所有相邻同色棋子都编为最后一手棋子的棋块编号。
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func014C() ) then
                    set udg_Check_num = ( udg_Check_n - 1 )
                    call TriggerExecute( gg_trg_Check_qi )
                    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003C() ) then
                        // 提掉没气的棋子
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001C() ) then
                                call ForGroupBJ( GetUnitsInRectAll(udg_XY[udg_TiZi]), function Trig_Wight_side_go_n_______u_Func001Func001Func012Func014Func003Func003Func001Func002A )
                            else
                                call DoNothing(  )
                            endif
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            set udg_Check_or_not[udg_TiZi] = 0
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                    else
                        call DoNothing(  )
                    endif
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func015C() ) then
                    set udg_Check_num = ( udg_Check_n + 1 )
                    call TriggerExecute( gg_trg_Check_qi )
                    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003C() ) then
                        // 提掉没气的棋子
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001C() ) then
                                call ForGroupBJ( GetUnitsInRectAll(udg_XY[udg_TiZi]), function Trig_Wight_side_go_n_______u_Func001Func001Func012Func015Func003Func003Func001Func002A )
                            else
                                call DoNothing(  )
                            endif
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            set udg_Check_or_not[udg_TiZi] = 0
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                    else
                        call DoNothing(  )
                    endif
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func016C() ) then
                    set udg_Check_num = ( udg_Check_n + 15 )
                    call TriggerExecute( gg_trg_Check_qi )
                    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003C() ) then
                        // 提掉没气的棋子
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001C() ) then
                                call ForGroupBJ( GetUnitsInRectAll(udg_XY[udg_TiZi]), function Trig_Wight_side_go_n_______u_Func001Func001Func012Func016Func003Func003Func001Func002A )
                            else
                                call DoNothing(  )
                            endif
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            set udg_Check_or_not[udg_TiZi] = 0
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                    else
                        call DoNothing(  )
                    endif
                else
                    call DoNothing(  )
                endif
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func017C() ) then
                    set udg_Check_num = ( udg_Check_n - 15 )
                    call TriggerExecute( gg_trg_Check_qi )
                    if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003C() ) then
                        // 提掉没气的棋子
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001C() ) then
                                call ForGroupBJ( GetUnitsInRectAll(udg_XY[udg_TiZi]), function Trig_Wight_side_go_n_______u_Func001Func001Func012Func017Func003Func003Func001Func002A )
                            else
                                call DoNothing(  )
                            endif
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                        set udg_TiZi = 1
                        loop
                            exitwhen udg_TiZi > 225
                            set udg_Check_or_not[udg_TiZi] = 0
                            set udg_TiZi = udg_TiZi + 1
                        endloop
                    else
                        call DoNothing(  )
                    endif
                else
                    call DoNothing(  )
                endif
                // 四个相邻点如果有异色棋子没气,提掉它。设置相对应多面板图标为点。
                set udg_Check_num = udg_Check_n
                call TriggerExecute( gg_trg_Check_qi )
                if ( Trig_Wight_side_go_n_______u_Func001Func001Func012Func021C() ) then
                    call RemoveUnit( GetTriggerUnit() )
                    set udg_BorWorN[udg_Check_n] = 0
                    set udg_QK[udg_Check_n] = 0
                    call GroupRemoveUnitSimple( GetTriggerUnit(), udg_WightQiZi )
                    set udg_Texiao_point = GetRectCenter(udg_XY[udg_Check_n])
                    call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Orc\\TrollBerserk\\TrollBeserkerTarget.mdl" )
                    call DisplayTextToPlayer( GetOwningPlayer(GetTriggerUnit()), 0, 0, "TRIGSTR_051" )
                    set udg_TiZi = 1
                    loop
                        exitwhen udg_TiZi > 225
                        set udg_Check_or_not[udg_TiZi] = 0
                        set udg_TiZi = udg_TiZi + 1
                    endloop
                else
                    call DoNothing(  )
                endif
                // 如果白子落在无气的位置,删除这个白子。
            else
                call RemoveUnit( GetTriggerUnit() )
                set udg_BorWorN[udg_Check_n] = 0
                set udg_QK[udg_Check_n] = 0
                call GroupRemoveUnitSimple( GetTriggerUnit(), udg_WightQiZi )
                set udg_Texiao_point = GetRectCenter(udg_XY[udg_Check_n])
                call AddSpecialEffectLocBJ( udg_Texiao_point, "Abilities\\Spells\\Orc\\TrollBerserk\\TrollBeserkerTarget.mdl" )
                call DisplayTextToPlayer( GetOwningPlayer(GetTriggerUnit()), 0, 0, "TRIGSTR_050" )
            endif
        else
            call DoNothing(  )
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction
//===========================================================================
function InitTrig_Wight_side_go_n_______u takes nothing returns nothing
    set gg_trg_Wight_side_go_n_______u = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Wight_side_go_n_______u, EVENT_PLAYER_UNIT_CONSTRUCT_START )
    call TriggerAddCondition( gg_trg_Wight_side_go_n_______u, Condition( function Trig_Wight_side_go_n_______u_Conditions ) )
    call TriggerAddAction( gg_trg_Wight_side_go_n_______u, function Trig_Wight_side_go_n_______u_Actions )
endfunction

我知道J前面有一些无关的英文可以删掉。但是我不敢确定。于是原本复制……  的确各位大大真的重头找一遍实在太累。因此我绝不敢强求。

第二个:计算气的触发:

function Trig_Check_qi_______u_Func003Func001C takes nothing returns boolean
    if ( not ( udg_QK[udg_Check_qi_XHZS] == udg_QK[udg_Check_num] ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func002Func001Func001Func001C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_qi_XHZS - 15 )] == 0 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func002Func001Func001C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_qi_XHZS + 15 )] == 0 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func002Func001C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_qi_XHZS + 1 )] == 0 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func002C takes nothing returns boolean
    if ( not ( udg_BorWorN[( udg_Check_qi_XHZS - 1 )] == 0 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func004Func001C takes nothing returns boolean
    if ( not ( udg_Check_end >= udg_Wait_for_count ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func004C takes nothing returns boolean
    if ( not ( udg_Check_end < udg_Wait_for_count ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001Func005C takes nothing returns boolean
    if ( not ( udg_QK[udg_Check_qi_XHZS] == udg_QK[udg_Check_num] ) ) then
        return false
    endif
    if ( not ( udg_Check_or_not[udg_Check_qi_XHZS] != 1 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Func004Func001C takes nothing returns boolean
    if ( not Trig_Check_qi_______u_Func004Func001Func005C() ) then
        return false
    endif
    return true
endfunction
function Trig_Check_qi_______u_Actions takes nothing returns nothing
    set udg_Check_end = 0
    set udg_Wait_for_count = 0
    set udg_Check_qi_XHZS = 1
    loop
        exitwhen udg_Check_qi_XHZS > 225
        if ( Trig_Check_qi_______u_Func003Func001C() ) then
            set udg_Wait_for_count = ( udg_Wait_for_count + 1 )
        else
            call DoNothing(  )
        endif
        set udg_Check_qi_XHZS = udg_Check_qi_XHZS + 1
    endloop
    set udg_Check_qi_XHZS = 1
    loop
        exitwhen udg_Check_qi_XHZS > 225
        if ( Trig_Check_qi_______u_Func004Func001C() ) then
            if ( Trig_Check_qi_______u_Func004Func001Func002C() ) then
                set udg_qi = true
                return
            else
                if ( Trig_Check_qi_______u_Func004Func001Func002Func001C() ) then
                    set udg_qi = true
                    return
                else
                    if ( Trig_Check_qi_______u_Func004Func001Func002Func001Func001C() ) then
                        set udg_qi = true
                        return
                    else
                        if ( Trig_Check_qi_______u_Func004Func001Func002Func001Func001Func001C() ) then
                            set udg_qi = true
                            return
                        else
                            set udg_Check_or_not[udg_Check_qi_XHZS] = 1
                            set udg_Check_end = ( udg_Check_end + 1 )
                        endif
                    endif
                endif
            endif
            // 上一条触发是检查棋块中最小编号的那个棋子是否有气。
            if ( Trig_Check_qi_______u_Func004Func001Func004C() ) then
                call DoNothing(  )
            else
                if ( Trig_Check_qi_______u_Func004Func001Func004Func001C() ) then
                    set udg_qi = false
                else
                    call DoNothing(  )
                endif
            endif
        else
            call DoNothing(  )
        endif
        set udg_Check_qi_XHZS = udg_Check_qi_XHZS + 1
    endloop
endfunction
//===========================================================================
function InitTrig_Check_qi_______u takes nothing returns nothing
    set gg_trg_Check_qi_______u = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Check_qi_______u, function Trig_Check_qi_______u_Actions )
endfunction


以上。我不知道我错在哪里了。希望有好心的高手能提点一二。              

相关帖子

 楼主| 发表于 2013-7-27 15:23:06 | 显示全部楼层
第一个触发的文本:

[trigger]Wight side go n
    事件
        单位 - 任意单位 开始被建造
    条件
        ((触发单位) 的类型) 等于 白棋子
    动作
        For循环整数A从 2 到 224, 做动作
            Loop - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        (XY[循环整数A [R]] 内存在 (触发单位)) 等于 TRUE
                    Then - 动作
                        单位 - 设置 (触发单位) 的自定义值为 循环整数A [R]
                        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (转换 循环整数A [R] 为字符串)
                        设置 Check_n = 循环整数A [R]
                        设置 QK[Check_n] = QKn
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (转换 QK[Check_n] 为字符串)
                             ★     设置棋块变量QK(循环整数A)=QKn,无论第几步,QKn就是几。比如QK(45)=1,该棋子棋块编码就是1.     ★     
                        设置 QKn = (QKn + 1)
                             ★     设置棋子的自定义值,设置棋块代码。     ★     
                        单位组 - 添加 (触发单位) 到 WightQiZi
                        设置 BorWorN[循环整数A [R]] = 2
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                FBDpoint 不等于 Check_n
                            Then - 动作
                                     ★     如果不是打劫禁入点,这开始为相邻棋块编成统一编码。     ★     
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n - 1)] 等于 2
                                    Then - 动作
                                        For QKxh 从 1 到 225, 做动作
                                            Loop - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        QKxh 等于 (Check_n - 1)
                                                    Then - 动作
                                                        设置 QK[QKxh] = QK[Check_n]
                                                    Else - 动作
                                                        无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n + 1)] 等于 2
                                    Then - 动作
                                        For QKxh 从 1 到 225, 做动作
                                            Loop - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        QKxh 等于 (Check_n + 1)
                                                    Then - 动作
                                                        设置 QK[QKxh] = QK[Check_n]
                                                    Else - 动作
                                                        无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n - 15)] 等于 2
                                    Then - 动作
                                        For QKxh 从 1 到 225, 做动作
                                            Loop - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        QKxh 等于 (Check_n - 15)
                                                    Then - 动作
                                                        设置 QK[QKxh] = QK[Check_n]
                                                    Else - 动作
                                                        无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n + 15)] 等于 2
                                    Then - 动作
                                        For QKxh 从 1 到 225, 做动作
                                            Loop - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        QKxh 等于 (Check_n + 15)
                                                    Then - 动作
                                                        设置 QK[QKxh] = QK[Check_n]
                                                    Else - 动作
                                                        无动作
                                    Else - 动作
                                        无动作
                                     ★     四个相邻点依次检查完毕。如果有同色棋子,把所有相邻同色棋子都编为最后一手棋子的棋块编号。     ★     
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n - 1)] 等于 1
                                    Then - 动作
                                        设置 Check_num = (Check_n - 1)
                                        触发器 - 运行 Check qi <预设> (无视条件)
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                qi 等于 FALSE
                                            Then - 动作
                                                     ★     提掉没气的棋子     ★     
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        如果所有条件成立则做动作1,否则做动作2
                                                            If - 条件
                                                                Check_or_not[TiZi] 等于 1
                                                            Then - 动作
                                                                单位组 - 选取 (XY[TiZi] 内的所有单位) 内所有单位做动作
                                                                    Loop - 动作
                                                                        如果所有条件成立则做动作1,否则做动作2
                                                                            If - 条件
                                                                                ((选取单位) 的类型) 等于 黑棋子
                                                                            Then - 动作
                                                                                单位 - 杀死 (选取单位)
                                                                                设置 Texiao_point = (XY[TiZi] 的中心点)
                                                                                特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
                                                                                点 - 清除 Texiao_point
                                                                                设置 BorWorN[TiZi] = 0
                                                                                单位组 - 把 (选取单位) 从 Blackqizi 移除
                                                                                多面板 - 设置 (DMB 的第 (13 - (转换 ((转换 TiZi 为实数) / 15.00) 为整数)) 行,第 ((TiZi - ((转换 ((转换 TiZi 为实数) / (转换 15 为实数)) 为整数) x 15)) - 2) 列项) 的项目图标为 UI\Minimap\MinimapIconCreepLoc.blp
                                                                            Else - 动作
                                                                                无动作
                                                            Else - 动作
                                                                无动作
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        设置 Check_or_not[TiZi] = 0
                                            Else - 动作
                                                无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n + 1)] 等于 1
                                    Then - 动作
                                        设置 Check_num = (Check_n + 1)
                                        触发器 - 运行 Check qi <预设> (无视条件)
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                qi 等于 FALSE
                                            Then - 动作
                                                     ★     提掉没气的棋子     ★     
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        如果所有条件成立则做动作1,否则做动作2
                                                            If - 条件
                                                                Check_or_not[TiZi] 等于 1
                                                            Then - 动作
                                                                单位组 - 选取 (XY[TiZi] 内的所有单位) 内所有单位做动作
                                                                    Loop - 动作
                                                                        如果所有条件成立则做动作1,否则做动作2
                                                                            If - 条件
                                                                                ((选取单位) 的类型) 等于 黑棋子
                                                                            Then - 动作
                                                                                单位 - 杀死 (选取单位)
                                                                                设置 Texiao_point = (XY[TiZi] 的中心点)
                                                                                特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
                                                                                点 - 清除 Texiao_point
                                                                                设置 BorWorN[TiZi] = 0
                                                                                单位组 - 把 (选取单位) 从 Blackqizi 移除
                                                                                多面板 - 设置 (DMB 的第 (13 - (转换 ((转换 TiZi 为实数) / 15.00) 为整数)) 行,第 ((TiZi - ((转换 ((转换 TiZi 为实数) / (转换 15 为实数)) 为整数) x 15)) - 2) 列项) 的项目图标为 UI\Minimap\MinimapIconCreepLoc.blp
                                                                            Else - 动作
                                                                                无动作
                                                            Else - 动作
                                                                无动作
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        设置 Check_or_not[TiZi] = 0
                                            Else - 动作
                                                无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n + 15)] 等于 1
                                    Then - 动作
                                        设置 Check_num = (Check_n + 15)
                                        触发器 - 运行 Check qi <预设> (无视条件)
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                qi 等于 FALSE
                                            Then - 动作
                                                     ★     提掉没气的棋子     ★     
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        如果所有条件成立则做动作1,否则做动作2
                                                            If - 条件
                                                                Check_or_not[TiZi] 等于 1
                                                            Then - 动作
                                                                单位组 - 选取 (XY[TiZi] 内的所有单位) 内所有单位做动作
                                                                    Loop - 动作
                                                                        如果所有条件成立则做动作1,否则做动作2
                                                                            If - 条件
                                                                                ((选取单位) 的类型) 等于 黑棋子
                                                                            Then - 动作
                                                                                单位 - 杀死 (选取单位)
                                                                                设置 Texiao_point = (XY[TiZi] 的中心点)
                                                                                特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
                                                                                点 - 清除 Texiao_point
                                                                                设置 BorWorN[TiZi] = 0
                                                                                单位组 - 把 (选取单位) 从 Blackqizi 移除
                                                                                多面板 - 设置 (DMB 的第 (13 - (转换 ((转换 TiZi 为实数) / 15.00) 为整数)) 行,第 ((TiZi - ((转换 ((转换 TiZi 为实数) / (转换 15 为实数)) 为整数) x 15)) - 2) 列项) 的项目图标为 UI\Minimap\MinimapIconCreepLoc.blp
                                                                            Else - 动作
                                                                                无动作
                                                            Else - 动作
                                                                无动作
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        设置 Check_or_not[TiZi] = 0
                                            Else - 动作
                                                无动作
                                    Else - 动作
                                        无动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_n - 15)] 等于 1
                                    Then - 动作
                                        设置 Check_num = (Check_n - 15)
                                        触发器 - 运行 Check qi <预设> (无视条件)
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                qi 等于 FALSE
                                            Then - 动作
                                                     ★     提掉没气的棋子     ★     
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        如果所有条件成立则做动作1,否则做动作2
                                                            If - 条件
                                                                Check_or_not[TiZi] 等于 1
                                                            Then - 动作
                                                                单位组 - 选取 (XY[TiZi] 内的所有单位) 内所有单位做动作
                                                                    Loop - 动作
                                                                        如果所有条件成立则做动作1,否则做动作2
                                                                            If - 条件
                                                                                ((选取单位) 的类型) 等于 黑棋子
                                                                            Then - 动作
                                                                                单位 - 杀死 (选取单位)
                                                                                设置 Texiao_point = (XY[TiZi] 的中心点)
                                                                                特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
                                                                                点 - 清除 Texiao_point
                                                                                设置 BorWorN[TiZi] = 0
                                                                                单位组 - 把 (选取单位) 从 Blackqizi 移除
                                                                                多面板 - 设置 (DMB 的第 (13 - (转换 ((转换 TiZi 为实数) / 15.00) 为整数)) 行,第 ((TiZi - ((转换 ((转换 TiZi 为实数) / (转换 15 为实数)) 为整数) x 15)) - 2) 列项) 的项目图标为 UI\Minimap\MinimapIconCreepLoc.blp
                                                                            Else - 动作
                                                                                无动作
                                                            Else - 动作
                                                                无动作
                                                For TiZi 从 1 到 225, 做动作
                                                    Loop - 动作
                                                        设置 Check_or_not[TiZi] = 0
                                            Else - 动作
                                                无动作
                                    Else - 动作
                                        无动作
                                     ★     四个相邻点如果有异色棋子没气,提掉它。设置相对应多面板图标为点。     ★     
                                设置 Check_num = Check_n
                                触发器 - 运行 Check qi <预设> (无视条件)
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        qi 等于 FALSE
                                    Then - 动作
                                        单位 - 删除 (触发单位)
                                        设置 BorWorN[Check_n] = 0
                                        设置 QK[Check_n] = 0
                                        单位组 - 把 (触发单位) 从 WightQiZi 移除
                                        设置 Texiao_point = (XY[Check_n] 的中心点)
                                        特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Orc\TrollBerserk\TrollBeserkerTarget.mdl
                                        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 不允许在禁入...
                                        For TiZi 从 1 到 225, 做动作
                                            Loop - 动作
                                                设置 Check_or_not[TiZi] = 0
                                    Else - 动作
                                        无动作
                                     ★     如果白子落在无气的位置,删除这个白子。     ★     
                            Else - 动作
                                单位 - 删除 (触发单位)
                                设置 BorWorN[Check_n] = 0
                                设置 QK[Check_n] = 0
                                单位组 - 把 (触发单位) 从 WightQiZi 移除
                                设置 Texiao_point = (XY[Check_n] 的中心点)
                                特殊效果 - 在 Texiao_point 创建特效: Abilities\Spells\Orc\TrollBerserk\TrollBeserkerTarget.mdl
                                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 现在是打劫呢...
                    Else - 动作
                        无动作
[/trigger]

很长……
第二个:
[trigger]Check qi
    事件
    条件
    动作
        设置 Check_end = 0
        设置 Wait_for_count = 0
        For Check_qi_XHZS 从 1 到 225, 做动作
            Loop - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        QK[Check_qi_XHZS] 等于 QK[Check_num]
                    Then - 动作
                        设置 Wait_for_count = (Wait_for_count + 1)
                    Else - 动作
                        无动作
        For Check_qi_XHZS 从 1 到 225, 做动作
            Loop - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        所有条件成立
                            条件
                                QK[Check_qi_XHZS] 等于 QK[Check_num]
                                Check_or_not[Check_qi_XHZS] 不等于 1
                    Then - 动作
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                BorWorN[(Check_qi_XHZS - 1)] 等于 0
                            Then - 动作
                                设置 qi = TRUE
                                跳过剩余动作
                            Else - 动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        BorWorN[(Check_qi_XHZS + 1)] 等于 0
                                    Then - 动作
                                        设置 qi = TRUE
                                        跳过剩余动作
                                    Else - 动作
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                BorWorN[(Check_qi_XHZS + 15)] 等于 0
                                            Then - 动作
                                                设置 qi = TRUE
                                                跳过剩余动作
                                            Else - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        BorWorN[(Check_qi_XHZS - 15)] 等于 0
                                                    Then - 动作
                                                        设置 qi = TRUE
                                                        跳过剩余动作
                                                    Else - 动作
                                                        设置 Check_or_not[Check_qi_XHZS] = 1
                                                        设置 Check_end = (Check_end + 1)
                             ★     上一条触发是检查棋块中最小编号的那个棋子是否有气。     ★     
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                Check_end 小于 Wait_for_count
                            Then - 动作
                                无动作
                            Else - 动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        Check_end 大于或等于 Wait_for_count
                                    Then - 动作
                                        设置 qi = FALSE
                                    Else - 动作
                                        无动作
                    Else - 动作
                        无动作
[/trigger]

回复

使用道具 举报

 楼主| 发表于 2013-7-27 19:46:39 | 显示全部楼层
哈哈。经过我自己的努力,问题已经解决。原来是对棋块统一编号的时候出了问题。我上面那样写法,只能编周围几个棋子的号码,更多的就无法成功编组。现在已经改好了。
回复

使用道具 举报

发表于 2013-7-27 21:03:41 | 显示全部楼层
0 0 好牛逼的样纸 膜拜之  话说触发好多又好长...
回复

使用道具 举报

发表于 2013-7-27 22:01:19 | 显示全部楼层
gsylthj 发表于 2013-7-27 15:23
第一个触发的文本:

[trigger]Wight side go n

楼主好想法
支持,如果想做的话
建议先学一点jass
存储结构上使用hashtable
直接将单位的handle转换成数字
然后存储

围棋略微了解一点
呃,判断气的问题最好单独写个程序

此外注意执行效率,过多的循环有可能导致程序超过执行上限
所以不从最开始注意很容易出问题到不得不重写
回复

使用道具 举报

发表于 2013-7-27 22:01:21 | 显示全部楼层
gsylthj 发表于 2013-7-27 15:23
第一个触发的文本:

[trigger]Wight side go n

楼主好想法
支持,如果想做的话
建议先学一点jass
存储结构上使用hashtable
直接将单位的handle转换成数字
然后存储

围棋略微了解一点
呃,判断气的问题最好单独写个程序

此外注意执行效率,过多的循环有可能导致程序超过执行上限
所以不从最开始注意很容易出问题到不得不重写

点评

你说的很对。我一开始就想过用哈希表来装数据。但是哈希表我不是很懂,因此还是选择绕远路。至于运行效率和泄露,围棋的话应该还好。因为双方手数加起来一共也就那么一些。一共是169个格子,那么顶了天也就两百手结  详情 回复 发表于 2013-7-27 22:21
回复

使用道具 举报

 楼主| 发表于 2013-7-27 22:21:03 | 显示全部楼层
疯人¢衰人 发表于 2013-7-27 22:01
楼主好想法
支持,如果想做的话
建议先学一点jass

你说的很对。我一开始就想过用哈希表来装数据。但是哈希表我不是很懂,因此还是选择绕远路。至于运行效率和泄露,围棋的话应该还好。因为双方手数加起来一共也就那么一些。一共是169个格子,那么顶了天也就两百手结束棋局。所以应该不至于到影响游戏进行的程度。
回复

使用道具 举报

发表于 2013-7-28 07:47:05 | 显示全部楼层
gsylthj 发表于 2013-7-27 22:21
你说的很对。我一开始就想过用哈希表来装数据。但是哈希表我不是很懂,因此还是选择绕远路。至于运行效率 ...

关键是检测算法

哈希表很简单
GA上就有教程
其实就是两个整数以及一个变量类型的选择
回复

使用道具 举报

发表于 2013-7-29 11:25:16 | 显示全部楼层
太长懒得看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-3-29 22:59 , Processed in 0.337431 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表