zoukankan      html  css  js  c++  java
  • 人机博弈-吃跳棋游戏(三)代移动

    我们能够根据国际象棋的规则吃,创建移动生成器。基本逻辑是,假定一个拉伸己方蠕虫的存在,这是可能没有其他的致密气。这是不是对其他部分可以落子。在其他情况下。必须坚持

    另一片落子,考虑到特殊情况,当自己可以提其他片,自己可以下到那里没有气。和一般吃跳棋。胜,无法形成劫争。所以走法生成器就相对非

    常简单。

    对于怎样确定己方是不是存在一气的棋串,能够利用上一节介绍的算气算法。

    int CMoveGenerator::CreatePossibleMove(BYTE position[GRID_NUM][GRID_NUM], int nPly, int nSide)
    {
        m_nMoveCount = 0;
        
        BYTE antiSide = (nSide + 1) % 2;
        cleanGlobal();
        setGo(position);
    
        
        
        //检測己方是否有一气的棋窜,有则输出对应走法。
        
        for (int i = 0; i < GRID_NUM; i++)
        for (int j = 0; j < GRID_NUM; j++){
            
            if(go[i][j]==nSide&&g_gozi[i][j]==0){
               str_lib(i,j,go[i][j]);
             
               if (goqi==1)
                    {
                    
                    for (int k = 0; k < GRID_NUM; k++)
                    for (int w = 0; w < GRID_NUM; w++){
    
                    if (gokong[k][w] == 1){
                    AddMove(k, w, nPly);
    
                    }
    
    
                    }
    
                    
                    }
            
            }
           
        }
        64     
        //正常情况下,寻找敌方棋子周边的空位,紧其气
    
                for (int i = 0; i < GRID_NUM; i++)
                for (int j = 0; j < GRID_NUM; j++)
                {
                
    
                if (go[i][j] == antiSide)
                {
                    
                    if (i > 0 && go[i - 1][j] == NOSTONE){
                        
                        AddMove(i - 1, j, nPly);
                        
                        
                    }
                        
                    if (i < GRID_NUM - 1 && go[i + 1][j] == NOSTONE){
                      
                        AddMove(i + 1, j, nPly);
                        
                    }
                        
                    if (j>0 && go[i][j - 1] == NOSTONE){
                      
                        AddMove(i, j - 1, nPly);
                        
                        
                    }
                        
                    if (j < GRID_NUM - 1 && go[i][j + 1] == NOSTONE){
                      
                        AddMove(i, j + 1, nPly);
                       
                    }
                        
                    
                }
                
                
    
            }
    
    
        
        return m_nMoveCount;
    }

    可以优化此算法,以后方便兴许的搜索引擎进行剪枝。

    给走法设定一个分数。可以提子则此步设为30+提子数。可以打吃则为20+打吃棋子数。可以长气,则为10+长气的棋子数。其它临时设计为0。可以用一个额定长度的优先队列,保留几个分数最佳的走法。

    或是必要时进行排序。

    搜索时优先优先搜索得分较高的走法,这样大幅度提高搜索算法剪枝的效率。

    这段是走法启示的代码

    伪码例如以下:

    for(int i=0;i<Grid_Num;i++)
    for(int j=0;j<Grid_Num;j++)
    {
        cleanupGlobal();
        if(go[i][j]==NOSTONE)
        {
        bool isVilid=false;
        if(i>0&&go[i-1][j]==antiSide)
        {
    
           go[i][j]=nSide;
    
           if(g_gozi[i-1][j]==0)
           {
              isVilid=true;
              str_lib(i-1,j,antiSide);
              switch(goqi){case 0:case 1:....}
    
           }
    
        }
         if(i<Grid_Num-1&&go[i+1][j]==antiSide)
         {
    
    
           go[i][j]=nSide;
    
    
           if(g_gozi[i-1][j]==0)
           {
              isValid=true;
              str_lib(i-1,j,antiSide);
              switch(goqi){case 0:case 1:....}
           }
    
    
        }...
             if(isValid)
             {
              sumScore(i,j,nSide);
              addMove(i,j,nSide);
              }
    44 
    
    
        }
    }
    std::sort();

    这种算法是采取启发式,研究命名为静态的启示。而不是历史的启示,历史启示不需要象棋知识是动态的启示,启示举措与国际象棋有关的知识。



  • 相关阅读:
    Halcon学习(车牌识别)
    Keil新建STM32工程(LED灯)
    Keil新建STM32工程(LED灯)
    Keil STM32F4xx_DFP.1.0.8.pack下载链接
    android 如何单独编译 img及作用
    Linux绑定硬件IRQ到指定SOC的CPU核
    sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f)
    内核线程同步之completion
    kmalloc,vmalloc , malloc
    ARMv8 与 Linux的新手笔记(转载)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4591481.html
Copyright © 2011-2022 走看看