c语言人机大战五子棋,JS实现人机大战之五子棋(AI篇)

let chessBoard = [];

let me = true;

let over = false;

let wins = [];

let myWin = [];

var computerWin = []

for (var i = 0; i 

chessBoard[i] = []

for (var j = 0; j 

chessBoard[i][j] = 0

}

}

for (var i = 0; i 

wins[i] = []

for (var j = 0; j 

wins[i][j] = []

}

}

var count = 0

for (var i = 0; i 

for (var j = 0; j 

for (k = 0; k 

wins[i][j + k][count] = true

}

count++

}

}

for (var i = 0; i 

for (var j = 0; j 

for (k = 0; k 

wins[j + k][i][count] = true

}

count++

}

}

for (var i = 0; i 

for (var j = 0; j 

for (k = 0; k 

wins[i + k][j + k][count] = true

}

count++

}

}

for (var i = 0; i 

for (var j = 14; j > 3; j--) {

for (k = 0; k 

wins[i + k][j - k][count] = true

}

count++

}

}

console.log(count)

for (var i = 0; i 

myWin[i] = 0

computerWin[i] = 0

}

var chess = document.getElementById('chess')

var context = chess.getContext('2d')

context.strokeStyle = '#BFBFBF'

var logo = new Image()

logo.src = " " //image path

window.onload = function () {

// context.drawImage(null, 0, 0, 450, 450)

drawChessBoard()

// oneStep(0, 0, true)

// oneStep(1, 1, false)

// context.beginPath()

// context.arc(200,200,100,0,2*Math.PI)

// context.closePath()

// var gradient = context.createRadialGradient(200,200,50,200,200,20)

// gradient.addColorStop(0,'#0A0A0A')

// gradient.addColorStop(1,'#636766')

// context.fillStyle = gradient

// context.fill()

}

var drawChessBoard = function () {

for (var i = 0; i 

context.moveTo(15 + i * 30, 15) //15

context.lineTo(15 + i * 30, 435) //435

context.stroke()

context.moveTo(15, 15 + i * 30) //15

context.lineTo(435, 15 + i * 30) //435

context.stroke()

}

}

//

// context.moveTo(0,0)

// context.lineTo(450,450)

// 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, 15 + j * 30, 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)

var j = Math.floor(y / 30)

if (chessBoard[i][j] === 0) {

oneStep(i, j, me)

// if (me) {

chessBoard[i][j] = 1

// } else {

//     chessBoard[i][j] = 2

// }

for (var k = 0; k 

if (wins[i][j][k]) {

myWin[k]++

computerWin[k] = 6

if (myWin[k] === 5) {

window.alert('你赢了')

over = true

}

}

}

if (!over) {

me = !me

computerAI()

}

}

// oneStep(i,j,me)

}

var computerAI = function () {

var myScore = []

var computerScore = []

var max = 0

var u = 0

var v = 0

for (var i = 0; i 

myScore[i] = []

computerScore[i] = []

for (var j = 0; j 

myScore[i][j] = 0

computerScore[i][j] = 0

}

}

for (var i = 0; i 

for (var j = 0; j 

if (chessBoard[i][j] === 0) {

for (var k = 0; k 

if (wins[i][j][k]) {

if (wins[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) {

max = myScore[i][j]

u = i

v = j

} else if (myScore[i][j] === max) {

if (computerScore[i][j] > computerScore[u][v]) {

u = i

v = j

}

}

if (computerScore[i][j] > max) {

max = computerScore[i][j]

u = i

v = j

} else if (computerScore[i][j] > max) {

if (computerScore[i][j] > computerScore[u][v]) {

u = i

v = j

}

}

}

}

}

oneStep(u, v, false)

chessBoard[u][v] = 2

for (var k = 0; k 

if (wins[u][v][k]) {

computerWin[k]++

myWin[k] = 6

if (computerWin[k] === 5) {

window.alert('AI赢了')

over = true

}

}

}

if (!over) {

me = !me

// computerAI()

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值