{"id":219,"date":"2021-12-22T22:30:56","date_gmt":"2021-12-22T14:30:56","guid":{"rendered":"https:\/\/panxiaoyi.icu\/?page_id=219"},"modified":"2021-12-23T12:01:15","modified_gmt":"2021-12-23T04:01:15","slug":"gobang","status":"publish","type":"page","link":"https:\/\/www.panxiaoyi.icu\/index.php\/gobang\/","title":{"rendered":"\u5feb\u4e50\u4e94\u5b50\u68cb"},"content":{"rendered":"\n<meta charset=\"utf-8\">\n        <title>\u4e94\u5b50\u68cb<\/title>\n        <style type=\"text\/css\">\n            canvas {\n                display: block;\n                margin: 50px auto;\n                box-shadow: -2px -2px 2px #efefef, 5px 5px 5px #b9b9b9;\n                cursor: pointer;\n            }\n            .btn-wrap { \n                display: flex; \n                flex-direction: row; \n                justify-content:center;\n            }\n            .btn-wrap div { \n                margin: 0 10px;\n            }\n            div>span {\n                display: inline-block;\n                padding: 10px 20px;\n                color: #fff;\n                background-color: #EE82EE;\n                border-radius: 5px;\n                cursor: pointer;\n            }\n            div.unable span { \n                background: #D6D6D4; \n                color: #adacaa;\n            }\n            #result-wrap {text-align: center;}\n        <\/style>\n    \n    \n        <h3 id=\"result-wrap\">&#8211;\u5feb\u4e50\u4e94\u5b50\u68cb&#8211;<\/h3>\n        <canvas id=\"chess\" width=\"450px\" height=\"450px\"><\/canvas>\n        <div class=\"btn-wrap\">\n            <div id=\"restart\" class=\"restart\">\n                <span>\u91cd\u65b0\u5f00\u59cb<\/span>\n            <\/div>\n            <div id=\"goback\" class=\"goback unable\">\n                <span>\u6094\u68cb<\/span>\n            <\/div>\n            <div id=\"return\" class=\"return unable\">\n                <span>\u64a4\u9500\u6094\u68cb<\/span>\n            <\/div>\n        <\/div>\n        <script type=\"text\/javascript\" charset=\"utf-8\">\n            var over = false;\n            var me = true; \/\/\u6211\n            var _nowi = 0, _nowj = 0; \/\/\u8bb0\u5f55\u81ea\u5df1\u4e0b\u68cb\u7684\u5750\u6807\n            var _compi = 0, _compj = 0; \/\/\u8bb0\u5f55\u8ba1\u7b97\u673a\u5f53\u524d\u4e0b\u68cb\u7684\u5750\u6807\n            var _myWin = [], _compWin = []; \/\/\u8bb0\u5f55\u6211\uff0c\u8ba1\u7b97\u673a\u8d62\u7684\u60c5\u51b5\n            var backAble = false, returnAble = false; \n            var resultTxt = document.getElementById('result-wrap');\n            var chressBord = [];\/\/\u68cb\u76d8\n            for(var i = 0; i < 15; i++){\n                chressBord[i] = [];\n                for(var j = 0; j < 15; j++){\n                    chressBord[i][j] = 0;\n                }\n            }\n            \/\/\u8d62\u6cd5\u7684\u7edf\u8ba1\u6570\u7ec4\n            var myWin = [];\n            var computerWin = [];\n            \/\/\u8d62\u6cd5\u6570\u7ec4\n            var wins = [];\n            for(var i = 0; i < 15; i++){\n                wins[i] = [];\n                for(var j = 0; j < 15; j++){\n                    wins[i][j] = [];\n                }\n            }\n            var count = 0; \/\/\u8d62\u6cd5\u603b\u6570\n            \/\/\u6a2a\u7ebf\u8d62\u6cd5\n            for(var i = 0; i < 15; i++){\n                for(var j = 0; j < 11; j++){\n                    for(var k = 0; k < 5; k++){\n                        wins[i][j+k][count] = true;\n                    }\n                    count++;\n                }\n            }\n            \/\/\u7ad6\u7ebf\u8d62\u6cd5\n            for(var i = 0; i < 15; i++){\n                for(var j = 0; j < 11; j++){\n                    for(var k = 0; k < 5; k++){\n                        wins[j+k][i][count] = true;\n                    }\n                    count++;\n                }\n            }\n            \/\/\u6b63\u659c\u7ebf\u8d62\u6cd5\n            for(var i = 0; i < 11; i++){\n                for(var j = 0; j < 11; j++){\n                    for(var k = 0; k < 5; k++){\n                        wins[i+k][j+k][count] = true;\n                    }\n                    count++;\n                }\n            }\n            \/\/\u53cd\u659c\u7ebf\u8d62\u6cd5\n            for(var i = 0; i < 11; i++){ \n                for(var j = 14; j > 3; j--){\n                    for(var k = 0; k < 5; k++){\n                        wins[i+k][j-k][count] = true;\n                    }\n                    count++;\n                }\n            }\n            \/\/ debugger;\n            for(var i = 0; i < count; i++){\n                myWin[i] = 0;\n                _myWin[i] = 0;\n                computerWin[i] = 0;\n                _compWin[i] = 0;\n            }\n            var chess = document.getElementById(\"chess\");\n            var context = chess.getContext('2d');\n            context.strokeStyle = '#bfbfbf'; \/\/\u8fb9\u6846\u989c\u8272\n            var backbtn = document.getElementById(\"goback\");\n            var returnbtn = document.getElementById(\"return\");\n            window.onload = function(){\n                drawChessBoard(); \/\/ \u753b\u68cb\u76d8\n            }\n            document.getElementById(\"restart\").onclick = function(){\n                window.location.reload();\n            }\n            \/\/ \u6211\uff0c\u4e0b\u68cb\n            chess.onclick = function(e){\n                if(over){\n                    return;\n                }\n                if(!me){\n                    return;\n                }\n                \/\/ \u6094\u68cb\u529f\u80fd\u53ef\u7528\n                backbtn.className = backbtn.className.replace( new RegExp( \"(\\\\s|^)unable(\\\\s|$)\" ),\" \" ); \n                var x = e.offsetX;\n                var y = e.offsetY;\n                var i = Math.floor(x \/ 30);\n                var j = Math.floor(y \/ 30);\n                _nowi = i;\n                _nowj = j;\n                if(chressBord[i][j] == 0){\n                    oneStep(i,j,me);\n                    chressBord[i][j] = 1; \/\/\u6211\uff0c\u5df2\u5360\u4f4d\u7f6e        \n                                \n                    for(var k = 0; k < count; k++){ \/\/ \u5c06\u53ef\u80fd\u8d62\u7684\u60c5\u51b5\u90fd\u52a01\n                        if(wins[i][j][k]){\n                            \/\/ debugger;\n                            myWin[k]++;\n                            _compWin[k] = computerWin[k];\n                            computerWin[k] = 6;\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u4e0d\u53ef\u80fd\u8d62\u4e86\n                            if(myWin[k] == 5){\n                                \/\/window.alert('\u4f60\u8d62\u4e86');\n                                resultTxt.innerHTML = '\u4f60\u8d62\u4e86,\u725b\u86d9\uff01';\n                                over = true;\n                            }\n                        }\n                    }\n                    if(!over){\n                        me = !me;\n                        computerAI();\n                    }\n                }         \n            }\n            \/\/ \u6094\u68cb\n            backbtn.onclick = function(e){\n                if(!backAble) { return;}\n                over = false;\n                me = true;\n                resultTxt.innerHTML = '\u6094\u68cb\u7684\u662f\u5c0f\u72d7';\n                \/\/ \u64a4\u9500\u6094\u68cb\u529f\u80fd\u53ef\u7528\n                returnbtn.className = returnbtn.className.replace( new RegExp( \"(\\\\s|^)unable(\\\\s|$)\" ),\" \" ); \n                \/\/ \u6211\uff0c\u6094\u68cb\n                chressBord[_nowi][_nowj] = 0; \/\/\u6211\uff0c\u5df2\u5360\u4f4d\u7f6e \u8fd8\u539f\n                minusStep(_nowi, _nowj); \/\/\u9500\u6bc1\u68cb\u5b50                                  \n                for(var k = 0; k < count; k++){ \/\/ \u5c06\u53ef\u80fd\u8d62\u7684\u60c5\u51b5\u90fd\u51cf1\n                    if(wins[_nowi][_nowj][k]){\n                        myWin[k]--;\n                        computerWin[k] = _compWin[k];\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u53ef\u80fd\u8d62\n                    }\n                }\n                \/\/ \u8ba1\u7b97\u673a\u76f8\u5e94\u7684\u6094\u68cb\n                chressBord[_compi][_compj] = 0; \/\/\u8ba1\u7b97\u673a\uff0c\u5df2\u5360\u4f4d\u7f6e \u8fd8\u539f\n                minusStep(_compi, _compj); \/\/\u9500\u6bc1\u68cb\u5b50                                  \n                for(var k = 0; k < count; k++){ \/\/ \u5c06\u53ef\u80fd\u8d62\u7684\u60c5\u51b5\u90fd\u51cf1\n                    if(wins[_compi][_compj][k]){\n                        computerWin[k]--;\n                        myWin[k] = _myWin[k];\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u53ef\u80fd\u8d62\n                    }\n                }i\n                resultTxt.innerHTML = '--\u5feb\u4e50\u4e94\u5b50\u68cb--';\n                returnAble = true;\n                backAble = false;\n            }\n            \/\/ \u64a4\u9500\u6094\u68cb\n            returnbtn.onclick = function(e){\n                if(!returnAble) { return; }\n                   \/\/ \u6211\uff0c\u64a4\u9500\u6094\u68cb\n                chressBord[_nowi][_nowj] = 1; \/\/\u6211\uff0c\u5df2\u5360\u4f4d\u7f6e \n                oneStep(_nowi,_nowj,me);                              \n                for(var k = 0; k < count; k++){ \n                    if(wins[_nowi][_nowj][k]){\n                        myWin[k]++;\n                        _compWin[k] = computerWin[k];\n                        computerWin[k] = 6;\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u4e0d\u53ef\u80fd\u8d62\n                    }\n                    if(myWin[k] == 5){\n                        resultTxt.innerHTML = '\u4f60\u8d62\u4e86,\u725b\u86d9\uff01';\n                        over = true;\n                    }\n                }\n                \/\/ \u8ba1\u7b97\u673a\u64a4\u9500\u76f8\u5e94\u7684\u6094\u68cb\n                chressBord[_compi][_compj] = 2; \/\/\u8ba1\u7b97\u673a\uff0c\u5df2\u5360\u4f4d\u7f6e   \n                oneStep(_compi,_compj,false);                               \n                for(var k = 0; k < count; k++){ \/\/ \u5c06\u53ef\u80fd\u8d62\u7684\u60c5\u51b5\u90fd\u51cf1\n                    if(wins[_compi][_compj][k]){\n                        computerWin[k]++;\n                        _myWin[k] = myWin[k];\n                        myWin[k] = 6;\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u4e0d\u53ef\u80fd\u8d62\n                    }\n                    if(computerWin[k] == 5){\n                        resultTxt.innerHTML = '\u8fd9\u90fd\u8d62\u4e0d\u4e86,\u76f4\u63a5\u5bc4\u4e86\u5427(';\n                        over = true;\n                    }\n                }\n                returnbtn.className += ' '+ 'unable';\n                returnAble = false;\n                backAble = true;\n            }\n            \/\/ \u8ba1\u7b97\u673a\u4e0b\u68cb\n            var computerAI = function (){\n                var myScore = [];\n                var computerScore = [];\n                var max = 0;\n                var u = 0, v = 0;\n                for(var i = 0; i < 15; i++){\n                    myScore[i] = [];\n                    computerScore[i] = [];\n                    for(var j = 0; j < 15; j++){\n                        myScore[i][j] = 0;\n                        computerScore[i][j] = 0;\n                    }\n                }\n                for(var i = 0; i < 15; i++){\n                    for(var j = 0; j < 15; j++){\n                        if(chressBord[i][j] == 0){\n                            for(var k = 0; k < count; k++){\n                                if(wins[i][j][k]){\n                                    if(myWin[k] == 1){\n                                        myScore[i][j] += 200;\n                                    }else if(myWin[k] == 2){\n                                        myScore[i][j] += 400;\n                                    }else if(myWin[k] == 3){\n                                        myScore[i][j] += 2000;\n                                    }else if(myWin[k] == 4){\n                                        myScore[i][j] += 10000;\n                                    }\n                                    \n                                    if(computerWin[k] == 1){\n                                        computerScore[i][j] += 220;\n                                    }else if(computerWin[k] == 2){\n                                        computerScore[i][j] += 420;\n                                    }else if(computerWin[k] == 3){\n                                        computerScore[i][j] += 2100;\n                                    }else if(computerWin[k] == 4){\n                                        computerScore[i][j] += 20000;\n                                    }                        \n                                }\n                            }\n                            \n                            if(myScore[i][j] > max){\n                                max  = myScore[i][j];\n                                u = i;\n                                v = j;\n                            }else if(myScore[i][j] == max){\n                                if(computerScore[i][j] > computerScore[u][v]){\n                                    u = i;\n                                    v = j;    \n                                }\n                            }\n                            \n                            if(computerScore[i][j] > max){\n                                max  = computerScore[i][j];\n                                u = i;\n                                v = j;\n                            }else if(computerScore[i][j] == max){\n                                if(myScore[i][j] > myScore[u][v]){\n                                    u = i;\n                                    v = j;    \n                                }\n                            }\n                            \n                        }\n                    }\n                }\n                _compi = u;\n                _compj = v;\n                oneStep(u,v,false);\n                chressBord[u][v] = 2;  \/\/\u8ba1\u7b97\u673a\u5360\u636e\u4f4d\u7f6e\n                for(var k = 0; k < count; k++){\n                    if(wins[u][v][k]){\n                        computerWin[k]++;\n                        _myWin[k] = myWin[k];\n                        myWin[k] = 6;\/\/\u8fd9\u4e2a\u4f4d\u7f6e\u5bf9\u65b9\u4e0d\u53ef\u80fd\u8d62\u4e86\n                        if(computerWin[k] == 5){\n                            resultTxt.innerHTML = '\u8fd9\u90fd\u8d62\u4e0d\u4e86,\u76f4\u63a5\u5bc4\u4e86\u5427(';\n                            over = true;\n                        }\n                    }\n                }\n                if(!over){\n                    me = !me;\n                }\n                backAble = true;\n                returnAble = false;\n                var hasClass = new RegExp('unable').test(' ' + returnbtn.className + ' ');\n                if(!hasClass) {\n                    returnbtn.className += ' ' + 'unable';\n                }\n            }\n            \/\/\u7ed8\u753b\u68cb\u76d8\n            var drawChessBoard = function() {\n                for(var i = 0; i < 15; i++){\n                    context.moveTo(15 + i * 30 , 15);\n                    context.lineTo(15 + i * 30 , 435);\n                    context.stroke();\n                    context.moveTo(15 , 15 + i * 30);\n                    context.lineTo(435 , 15 + i * 30);\n                    context.stroke();\n                }\n            }\n            \/\/\u753b\u68cb\u5b50\n            var oneStep = function(i,j,me) {\n                context.beginPath();\n                context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI);\/\/ \u753b\u5706\n                context.closePath();\n                \/\/\u6e10\u53d8\n                var gradient = context.createRadialGradient(15 + i * 30 + 2, 15 + j * 30 - 2, 13, 15 + i * 30 + 2, 15 + j * 30 - 2, 0);\n                if(me){\n                    gradient.addColorStop(0,'#0a0a0a');\n                    gradient.addColorStop(1,'#636766');\n                }else{\n                    gradient.addColorStop(0,'#d1d1d1');\n                    gradient.addColorStop(1,'#f9f9f9');\n                }\n                context.fillStyle = gradient;\n                context.fill();\n            }\n            \/\/\u9500\u6bc1\u68cb\u5b50\n            var minusStep = function(i,j) {\n                \/\/\u64e6\u9664\u8be5\u5706\n                context.clearRect((i) * 30, (j) * 30, 30, 30);\n                \/\/ \u91cd\u753b\u8be5\u5706\u5468\u56f4\u7684\u683c\u5b50\n                context.beginPath();\n                context.moveTo(15+i*30 , j*30);\n                context.lineTo(15+i*30 , j*30 + 30);\n                context.moveTo(i*30, j*30+15);\n                context.lineTo((i+1)*30 , j*30+15);\n    \n                context.stroke();\n            }\n        <\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e94\u5b50\u68cb &#8211;\u5feb\u4e50\u4e94\u5b50\u68cb&#8211; \u91cd\u65b0\u5f00\u59cb \u6094\u68cb \u64a4\u9500\u6094\u68cb<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-219","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/pages\/219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/comments?post=219"}],"version-history":[{"count":6,"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/pages\/219\/revisions"}],"predecessor-version":[{"id":236,"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/pages\/219\/revisions\/236"}],"wp:attachment":[{"href":"https:\/\/www.panxiaoyi.icu\/index.php\/wp-json\/wp\/v2\/media?parent=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}