{"id":23795,"student_id":10,"content":"game.click(game.place);\ngame.click(AI);\n\nvar attack = [0, 1, 3, 10, 50, 300];\nvar defend = [0, 1, 2, 10, 40, 290];\n\nfunction AI() {\n var bestX;\n var bestY;\n var bestPoints = -1;\n\n for (var x = 0; x \u003c 14; x++) {\n for (var y = 0; y \u003c 14; y++) {\n if (game.grid[x][y] != undefined) continue;\n var attackPoints = getPoints(x, y, game.current, attack);\n var defendPoints = getPoints(x, y, game.current == 'w' ? 'b' : 'w', defend);\n var points = attackPoints + defendPoints;\n if (points \u003e bestPoints) {\n bestPoints = points;\n bestX = x;\n bestY = y;\n }\n }\n }\n game.place(bestX, bestY);\n}\n\nfunction getPoints(x, y, who, attack) {\n var result = game.check(x, y, who);\n var score = result[1] * attack[1] +\n result[2] * attack[2] +\n result[3] * attack[3] +\n result[4] * attack[4];\n return score;\n}","created_at":"2018-03-07T15:56:23.886+08:00","updated_at":"2019-11-12T10:14:17.707+08:00","name":"五子棋初階 AI","language":"javascript","screenshot":{"url":"https://cdn7.koding.school/uploads/project/screenshot/23795/89edcce60b8890776f43b51e69f48ea4.jpg"},"parent_id":13312,"plugin":"setBackdrop(\"bg.png\");\n\nvar zz = [ 0, 0, 0, 0, 0, 0, 0, 0, 0];\nvar v1 = [ 4, 3, 2, 1, 0, -1, -2, -3, -4];\nvar v2 = [-4, -3, -2, -1, 0, 1, 2, 3, 4];\n\n\nvar game = (function () {\n\n let grid = {};\n\n let instance = {\n place: place,\n click: click,\n current: 'b',\n grid: grid,\n check: check\n }\n\n for (let x=-14; x\u003c=29; x++) {\n grid[x] = {};\n for (let y=-4; y\u003c=19; y++) {\n grid[x][y] = undefined;\n } \n }\n\n function isWin (x, y, vx, vy) {\n var re = grid[x][y] + grid[x + vx][y + vy] + grid[x + vx*2][y + vy*2] + grid[x + vx*3][y + vy*3] + grid[x + vx*4][y + vy*4];\n if (re == 'bbbbb') {\n print(\"黑方獲勝\");\n stop();\n }\n if (re == 'wwwww') {\n print(\"白方獲勝\");\n stop();\n }\n }\n\n when('click', function () {\n var x = Math.floor((cursor.x - 97)/30);\n var y = Math.floor((cursor.y - 17)/30);\n\n if (x \u003c 0 || x \u003e= 15 || y \u003c 0 || y \u003e= 15) return;\n \n funcs.forEach(function (func) {\n func(x, y);\n });\n });\n\n forever(function () {\n for (var x=0; x\u003c15; x++) {\n for (var y=0; y\u003c15; y++) {\n pen.size = 0;\n if (grid[x][y] == undefined) continue;\n if (grid[x][y] == 'b') pen.fillColor = 'black';\n if (grid[x][y] == 'w') pen.fillColor = 'white';\n pen.drawCircle(x*30 + 110, y*30 + 30, 14);\n }\n }\n for (var x=0; x\u003c15; x++) {\n for (var y=0; y\u003c15; y++) {\n isWin(x, y, 1, 0);\n isWin(x, y, -1, 0);\n isWin(x, y, 0, 1);\n isWin(x, y, 0, -1);\n isWin(x, y, 1, 1);\n isWin(x, y, -1, 1);\n isWin(x, y, 1, -1);\n isWin(x, y, -1, -1);\n }\n }\n });\n\n function place (x, y) {\n grid[x][y] = instance.current;\n instance.current = instance.current == 'w' ? 'b' : 'w';\n }\n\n let funcs = [];\n function click (func) {\n funcs.push(func);\n }\n\n function check(x, y, color) {\n grid[x][y] = color;\n var result = [0, 0, 0, 0, 0];\n var a, b, c;\n var start, len;\n for (len = 5; len \u003e= 1; len--) {\n for (start = 5 - len; start \u003c= 4; start++) {\n z = zz.slice(start, start + len);\n d = v1.slice(start, start + len);\n i = v2.slice(start, start + len);\n if (checkLine(grid, x, y, d, z, color)) result[len]++;\n if (checkLine(grid, x, y, z, d, color)) result[len]++;\n if (checkLine(grid, x, y, d, d, color)) result[len]++;\n if (checkLine(grid, x, y, d, i, color)) result[len]++;\n }\n }\n\n function checkLine(grid, x, y, vx, vy, who) {\n for (var i=0; i\u003cvx.length; i++) {\n var xx = x + vx[i];\n var yy = y + vy[i];\n if (grid[xx][yy] != who) return false;\n }\n return true;\n }\n\n grid[x][y] = undefined;\n return result;\n }\n\n return instance;\n})();\n","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":368,"hashid":"vngs5835","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":451772,"file_name":"bg.png","project_id":23795,"asset_id":33400,"created_at":"2018-03-07T15:56:23.894+08:00","updated_at":"2018-03-07T15:56:23.894+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦