>  기사  >  웹 프론트엔드  >  JavaScript로 작성된 오델로 에이스

JavaScript로 작성된 오델로 에이스

高洛峰
高洛峰원래의
2016-11-25 10:26:281943검색

일단 이 코드는 제가 작성한 것이 아니고, 댓글은 제가 추가한 것입니다.

둘째, 이 코드는 현재 알파-베타 가지치기만 사용하고 있는데 이는 아직 약하고 최적화할 여지가 많습니다. 하지만 코드는 매우 명확하게 작성되어 있습니다. 인간-기계 체스라는 주제에 관심이 있지만 아직 시작하지 않은 친구가 있다면 이 코드는 좋은 예가 될 것입니다.

셋째, 현재 컴퓨터는 3개의 레이어만 검색할 수 있습니다. 반복 심화 알고리즘과 히스토리 기반 알고리즘을 추가하면 5개의 레이어를 검색하는 데에는 문제가 없을 것 같습니다. 최신 JavaScript는 잘 작동합니다.

넷째, 저자는 배우고 배울 가치가 있는 많은 기술을 코드에서 보여주었습니다. JavaScript를 이해하지 못하더라도 코드를 이해하기 쉽습니다(저도 이해하지 못합니다).

다섯째, 이 AI의 체스 능력을 시험해보세요: html">http://shaofei.name/OthelloAI/othello.html

다음은 코드입니다:

클립보드 인쇄로 일반 복사본을 보시겠습니까?
var AI = {};
new function(){
AI.Pattern= 패턴 / 임의의 점 주위에 8점의 좌표를 간단히 추가할 수 있습니다
// -11 -10 -9
// -1 x 1
// 9 10 11
// 왼쪽 상단과 같은 좌표는 x + (-11)
var 방향입니다. =[-11,-10,-9,-1,1,9,10,11]; // 체스판 전체를 0으로 채웁니다.
for(var i=0;i<100;i++)this[ i]=0;
// 가운데 4개의 그리드에 먼저 검은색 체스 말 2개와 흰색 체스 말 2개를 놓습니다.
this[54]=this[45]=1;this[55]=this[44]= 2;
// 사용 평가 시 외부 조각 수(검은색에서 흰색 빼기)에 대한 검정색의 순 승리.
this.divergence=0;
// 현재 이동 가능한 플레이어는 검은색입니다.
this.color=1
// 몇 가지 이동이 이루어졌습니다.
this.moves=0 ;
// 안정적인 프로토타입
// 0은 공백, 1은 검은색, 2는 흰색, 3은 테두리
// 8*8 체스판을 일종의 팁인 10*10으로 확장합니다.
// 좌표 유효성 판단을 단순화할 수 있음
var stableProto = [
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 0, 0 , 0, 0, 0, 0, 0, 0, 3, ​ 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, ​ 3, 0, 0, 0, 0, 0 , 0, 0, 0, 3, 
3, 0, 0, 0, 0, 0, 0, 0, 0, 3,
3, 0, 0, 0, 0, 0, 0, 0 , 0, 3,
3, 0, 0, 0, 0, 0, 0, 0, 0, 3,
3, 0, 0, 0, 0, 0, 0, 0, 0, 3 ,
3, 0, 0, 0, 0, 0, 0, 0, 0, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3
]
// 8 * 8 보드에서 상태 로드
this.load=function(arr)
{
for(var y=1;y<=8;y++)
{
for(var x=1;x<=8;x++)
{
this[y*10+x]=arr[y-1][x-1]; 
                                                                 {
for(var y=1;y<=8;y++)
{
for(var x=1;x<=8;x++)
{         if(this[y* 10+x] ==0)                                                                                                                    🎜>{                                                                                                           >
// color가 2일 경우 다음 문 실행 후 1이 됩니다.
this.color = 3 - this.color;
return true;
}
this.clone=function()
{
함수 패턴(){}
패턴. 프로토타입= this;
새 패턴 반환()
} this.toString=function()
{
var icon=[" ","*","o"]
var r = "";
for (var y y = 1; y & lt; = 8; y ++)
{
for (var x = 1; x & lt; = 8; x ++ )
{
           r+=icon[this[y*10+x]]+" ";                                      r+=" "; >

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.