⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hasher.cpp

📁 c+++ game uploading now
💻 CPP
字号:
/**
 @file 
 Hash codes and hash functions
*/
#include "Hasher.h"

using namespace Othello;

unsigned int Hasher::Key32(const Board &board)
{
    assert(board.IsClean());
    unsigned int k=0;
    for(unsigned int i=p11; i<s89; i++)
        if(Zorbist[i][board.table[i]+1]!=0) //??? isn't this pointless
            k^=Zorbist[i][board.table[i]+1];
    return k;
}

unsigned int Hasher::Lock32(const Board &board)
{
    assert(board.IsClean());
    unsigned int k=0;
    for(unsigned int i=p11; i<s89; i++)
        if(Zorbist2[i][board.table[i]+1]!=0) //???
            k^=Zorbist2[i][board.table[i]+1];
    return k;
}

unsigned int Hasher::Hash1(const BookBoard &b)
{
    unsigned int k=0;
    for(int l=0; l<4; l++)
        for(int i=0; i<16; i++)
        {
            if(b.l[l] & BookBoard::maskempty[i]) //0+1
                //empty
                k^=Zorbist[i+l*16][1];
            else
                if(b.l[l] & BookBoard::maskwhite[i]) //-1+1
                    //white
                    k^=Zorbist[i+l*16][0];
                else                      //1+1  
                    //black             
                    k^=Zorbist[i+l*16][2];
        }

    return k;
}

unsigned int Hasher::Hash2(const BookBoard &b)
{
    unsigned int k=0;
    for(int l=0; l<4; l++)
        for(int i=0; i<16; i++)
        {
            if(b.l[l] & BookBoard::maskempty[i])  //0+1
                //empty
                k^=Zorbist2[i+l*16][1];
            else
                if(b.l[l] & BookBoard::maskwhite[i]) //-1+1
                    //white
                    k^=Zorbist2[i+l*16][0];
                else                      //1+1
                    //black
                    k^=Zorbist2[i+l*16][2];
        }
 
    return k;
}

//random numbers. DO NOT EDIT THEM !!!
unsigned int Hasher::Zorbist[10*10][3]=
{
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {4080774206u,3513173042u,1884024056u},
    {992732356u ,2835655762u,2140230751u},
    {2606369050u,1468752621u,918965511u },
    {2087278809u,1244363247u,2763778331u},
    {3828099910u,1465415222u,1374542338u},
    {3273180974u,2293851914u,4123592089u},
    {1960513693u,3122927487u,3120859673u},
    {79472542u  ,1328391121u,1769325556u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {3527916907u,3601313090u,3197885688u},
    {1909986406u,2439852641u,1150824678u},
    {2643261807u,1590914111u,1889460522u},
    {3401343676u,3018244944u,4008837039u},
    {3959156562u,2347505222u,2934889985u},
    {3170575978u,1910745929u,912937665u },
    {757057325u ,2983143582u,3604500795u},
    {1742494916u,2668506692u,2700609293u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {4017811764u,3413730545u,574549579u },
    {3938074582u,4109611318u,889628299u },
    {1762097121u,2244508458u,2607899608u},
    {3838195509u,3780181996u,2705347710u},
    {248641260u ,742840970u ,1591185851u},
    {1515557087u,4207980880u,2470240901u},
    {3492523512u,1165857098u,1938854867u},
    {42353963u  ,1083746292u,188528986u },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {596531795u ,3761282819u,116759214u },
    {870869982u ,3166705107u,1342972055u},
    {853503385u ,586343533u ,55244337u  },
    {2593268951u,50494587u  ,1649126946u},
    {1169038236u,3839262531u,2933960741u},
    {853900778u ,855291486u ,398755336u },
    {65601017u  ,1283005567u,151776945u },
    {3207420057u,2840874233u,2630218564u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {1911674620u,1221525591u,2613660949u},
    {4002113140u,2015302959u,67687902u  },
    {2001430457u,278232804u ,70243904u  },
    {1798085772u,4244866237u,816364143u },
    {3634493314u,2503071212u,2520795642u},
    {2255512797u,1818902573u,247308897u },
    {870363773u ,2214106116u,1578692705u},
    {2886808445u,1434310684u,2712062101u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {3599691311u,1859319672u,3082216370u},
    {84351069u  ,970447294u ,2974992397u},
    {2926063127u,2490251558u,361116816u },
    {1629858561u,3265742850u,1951440508u},
    {3572536692u,2275572958u,1897638085u},
    {2159564892u,2751040365u,1517199151u},
    {3047156429u,897946254u ,659734303u },
    {1842078682u,1631307479u,2901871673u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {1308321628u,3364370933u,3003098375u},
    {814556643u ,2924210235u,3124627917u},
    {830780490u ,1980388489u,2054645271u},
    {2930126433u,2438805749u,2383028185u},
    {1300363199u,3411108773u,519893391u },
    {2326471487u,254187303u ,1935973435u},
    {647994498u ,2589303006u,3074693850u},
    {2997451155u,215902868u ,3834725507u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {1625099662u,1784021441u,1172966178u},
    {3693721717u,1309959343u,1094225792u},
    {3666420868u,3755378406u,3717738628u},
    {2549333297u,64465305u  ,997937243u },
    {2132676532u,3298321810u,3456897818u},
    {3864479181u,4169747263u,3901537740u},
    {3528870374u,4252372355u,995978512u },
    {2769869008u,3388135169u,1027839637u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          }
};

//random numbers. DO NOT EDIT THEM !!!
unsigned int Hasher::Zorbist2[10*10][3]=
{
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {3658645116u,3292313771u,3238502690u},
    {3261939132u,2860979668u,2848259135u},
    {4079185066u,562403728u ,3794575696u},
    {2396327649u,409795785u ,1168907288u},
    {61130337u  ,63841843u  ,1801449796u},
    {2560561080u,1237780994u,914800799u },
    {3505576827u,3507833851u,152900694u },
    {4196579709u,4232619445u,348595454u },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {953087944u ,74572198u  ,3653156517u},
    {3022298338u,3519265846u,1461162680u},
    {2242234557u,2667770427u,2002120386u},
    {4006762348u,2406135344u,3924583230u},
    {3063834005u,1048107457u,981729476u },
    {979419630u ,3530495709u,3702454653u},
    {1931198134u,1130486622u,2820155136u},
    {739592060u ,3236835678u,3827600991u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {4161050830u,2833152837u,2096560446u},
    {1527789035u,919392965u ,4263380589u},
    {210654522u ,2586072429u,1603422705u},
    {3244154463u,2598185103u,2282252496u},
    {3384319155u,2832537581u,778747702u },
    {1229003390u,787540804u ,2155834504u},
    {1078898131u,2733948140u,1813312976u},
    {4006071437u,731472058u ,2836514082u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {562565421u ,2317569102u,2893317651u},
    {4040789165u,2677457626u,4111701827u},
    {3014436427u,2945875003u,824057103u },
    {3640742708u,2909178714u,477670964u },
    {898814852u ,3765956278u,2426887895u},
    {1954603928u,55364276u  ,4162537444u},
    {348208998u ,1333167409u,101979148u },
    {3655542876u,3346119888u,3737548496u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {2413980684u,1319826634u,115434087u },
    {1371367150u,3980053038u,2231358725u},
    {1610180067u,2915079669u,825885363u },
    {3727154142u,319208381u ,3073861049u},
    {1598484779u,303521865u ,1076631397u},
    {316496379u ,51240964u  ,4010918842u},
    {858297656u ,975617777u ,589223610u },
    {212572017u ,2217285443u,2240350887u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {2433999967u,1967972119u,3844861983u},
    {523662813u ,3020235340u,4047522437u},
    {2242452949u,2501749193u,1439172153u},
    {502769525u ,2187023124u,1878463319u},
    {3306774681u,319071441u ,2023599221u},
    {1610852380u,829943647u ,641283007u },
    {3536421111u,1630387338u,583533129u },
    {200300719u ,1187278084u,2287062483u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {2568017904u,3310912275u,3117241347u},
    {4076569903u,1348319040u,1712416566u},
    {1240376473u,2741019004u,1539395804u},
    {3817506992u,4237272416u,1225265745u},
    {436306306u ,2159835130u,3730759965u},
    {280523670u ,4070355009u,2690421951u},
    {1006309692u,3556343910u,1035827177u},
    {4007627191u,3940878180u,4200828712u},
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {271132248u ,485674167u ,2750929903u},
    {1134806224u,3488054206u,987192423u },
    {4292955852u,3900958004u,2926312208u},
    {910481366u ,671630318u ,2859689764u},
    {2140653784u,524496109u ,578609291u },
    {1247637727u,3275627545u,96607959u  },
    {2889458193u,3100108616u,1126138060u},
    {4114540529u,2798771701u,500428800u },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          },
    {0          ,0          ,0          }
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -