1 Star 0 Fork 1

杨子坤 / GoBanBot

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
script.js 4.83 KB
一键复制 编辑 原始数据 按行查看 历史
杨子坤 提交于 2020-11-21 17:52 . Bata2.3紧急更新
__version__ = 'Bata2.3';
function main(){
document.getElementById("start").remove();
var RightRate = 0.9;
RightRate = document.getElementById('botGrade').value!='' ? document.getElementById('botGrade').value / 10 : RightRate;
var chessBoard = [];
var me = true;
var over = false;
//赢法数组
var wins = [];
//赢法统计数组
var myWin = [];
var computerWin = [];
for(var i=0; i<15; i++){
chessBoard[i] = [];
for(var j=0; j<15; j++){
chessBoard[i][j] = 0;
}
}
for(var i=0; i<15; i++){
wins[i] = [];
for(var j=0; j<15; j++){
wins[i][j] = [];
}
}
var count = 0;
//横线
for(var i = 0; i < 15; i++){
for(var j= 0; j < 11; j++){
for(var k = 0; k < 5; k++){
wins[i][j+k][count] = true;
}
count++;
}
}
//竖线
for(var i = 0; i < 15; i++){
for(var j= 0; j < 11; j++){
for(var k = 0; k < 5; k++){
wins[j+k][i][count] = true;
}
count++;
}
}
//斜线
for(var i = 0; i < 11; i++){
for(var j= 0; j < 11; j++){
for(var k = 0; k < 5; k++){
wins[i+k][j+k][count] = true;
}
count++;
}
}
//反斜线
for(var i = 0; i < 11; i++){
for(var j= 14; j > 3; j--){
for(var k = 0; k < 5; k++){
wins[i+k][j-k][count] = true;
}
count++;
}
}
for(var i = 0; i < count; i++){
myWin[i] = 0;
computerWin[i] = 0;
}
var chess = document.getElementById('chess');
var context = chess.getContext('2d');
//抗锯齿
let width = chess.width,height=chess.height;
if (window.devicePixelRatio) {
chess.style.width = width + "px";
chess.style.height = height + "px";
chess.height = height * window.devicePixelRatio;
chess.width = width * window.devicePixelRatio;
context.scale(window.devicePixelRatio, window.devicePixelRatio);
}
context.strokeStyle = "#000";
var logo = new Image();
logo.src = "logo.png";
logo.onload = function(){
context.drawImage(logo, 0, 0, 450, 450);
drawChessBoard();
}
var drawChessBoard = function(){
for(var i=0; i<15; i++){
context.moveTo(15 + i*30, 15);
context.lineTo(15 + i*30, 435);
context.stroke();
context.moveTo(15,15 + i*30);
context.lineTo(435,15 + i*30);
context.stroke();
}
}
var oneStep = function(i, j, me){
context.beginPath();
context.arc(15 + i*30, 15 + j*30, 13, 0, 2 * Math.PI);
context.closePath();
var gradient = context.createRadialGradient(15 + i*30 + 2, 15 + j*30 - 2, 13, 15 + i*30 + 2, 15 + j*30 - 2, 0);
if(me){
gradient.addColorStop(0, "#0A0A0A");
gradient.addColorStop(1, "#636766");
}
else{
gradient.addColorStop(0, "#D1D1D1");
gradient.addColorStop(1, "#F9F9F9");
}
context.fillStyle = gradient;
context.fill();
}
chess.onclick = function(e){
if(over){
return;
}
if(!me){
return;
}
var x = e.offsetX;
var y = e.offsetY;
var i = Math.floor(x / 30); //Math.floor向下取整
var j = Math.floor(y / 30);
if(chessBoard[i][j] == 0){
oneStep(i, j, me);
chessBoard[i][j] = 1;
for(var k = 0; k < count; k++){
if(wins[i][j][k]){
myWin[k]++;
computerWin[k] = 6;
if(myWin[k] == 5){
window.alert("You Win!")
over = true;
}
}
}
if(!over){
me = !me;
computerAI();
}
}
}
var computerAI = function(){
var myScore = [];
var computerScore = [];
var max = 0;
var u = 0, v = 0;
for(var i = 0; i < 15; i++){
myScore[i] = [];
computerScore[i] = [];
for(var j = 0; j < 15; j++){
myScore[i][j] = 0;
computerScore[i][j] = 0;
}
}
for(var i = 0; i < 15; i++){
for(var j = 0; j < 15; j++){
if(chessBoard[i][j] == 0){
for(var k = 0; k < count; k++){
if(wins[i][j][k]){
if(myWin[k] == 1){
myScore[i][j] += 200;
}
else if(myWin[k] == 2){
myScore[i][j] += 400;
}
else if(myWin[k] == 3){
myScore[i][j] += 2000;
}
else if(myWin[k] == 4){
myScore[i][j] += 10000;
}
if(computerWin[k] == 1){
computerScore[i][j] += 220;
}
else if(computerWin[k] == 2){
computerScore[i][j] += 420;
}
else if(computerWin[k] == 3){
computerScore[i][j] += 2100;
}
else if(computerWin[k] == 4){
computerScore[i][j] += 20000;
}
}
}
if(myScore[i][j] > max && (Math.floor(Math.random() + RightRate)) ){
max = myScore[i][j];
u = i;
v = j;
}
else if(myScore[i][j] == max){
if(computerScore[i][j] > computerScore[u][v] && (Math.floor(Math.random() + RightRate)) ){
u = i;
v = j;
}
}
if(computerScore[i][j] > max && (Math.floor(Math.random() + RightRate)) ){
max = computerScore[i][j];
u = i;
v = j;
}
else if(computerScore[i][j] == max){
if(myScore[i][j] > myScore[u][v] && (Math.floor(Math.random() + RightRate)) ){
u = i;
v = j;
}
}
}
}
}
oneStep(u, v, false);
chessBoard[u][v] = 2;
for(var k = 0; k < count; k++){
if(wins[u][v][k]){
computerWin[k]++;
myWin[k] = 6;
if(computerWin[k] == 5){
window.alert("Computer Win!")
over = true;
}
}
}
if(!over){
me = !me;
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/YSChain/gobanbot.git
git@gitee.com:YSChain/gobanbot.git
YSChain
gobanbot
GoBanBot
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891