问答详情
源自:2-5 计算机AI实现(2)

求源码啊求源码啊

求源码啊,,没找出来问题。。

提问者:一生安好 2018-02-16 21:11

个回答

  • 核桃编程
    2020-08-18 22:10:30

    let chessBoard = [];
    let me = true;
    
    let over = false;
    let wins = [];
    
    let 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 (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 (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 (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 (k = 0; k < 5; k++) {
                wins[i + k][j - k][count] = true
            }
            count++
        }
    }
    
    console.log(count)
    
    for (var i = 0; i < count; 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 < 15; 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 < count; 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 < 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 (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 < count; 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()
    
        }
    }


  • 夏尔凡多姆海恩
    2018-03-16 17:52:38

    https://gitee.com/god_wei/test/tree/master/%E5%89%8D%E7%AB%AF%E9%A1%B9%E7%9B%AE/JS%E5%AE%9E%E7%8E%B0%E4%BA%BA%E6%9C%BA%E5%A4%A7%E6%88%98%E4%B9%8B%E4%BA%94%E5%AD%90%E6%A3%8B%E2%80%94%E6%85%95%E8%AF%BE%E7%BD%91