{"id":33131,"student_id":1486,"content":"game.placeBlack(7, 7);\ngame.click(function(x, y){\n if(game.grid[x][y] == 'empty'){\n game.placeWhite(x, y);\n AI();\n }\n});\n\nvar bestX = -1, bestY = -1;\n\n// 電腦的下棋程式\nfunction AI() {\n let nowPoint = 0;\n let bestPoint = 0;\n for(let i = 0; i \u003c 15; i++){\n for(let j = 0; j \u003c 15; j++){\n if(game.grid[i][j] == 'empty'){\n nowPoint = getDefendPoints(i, j);\n if(nowPoint \u003e bestPoint){\n bestPoint = nowPoint;\n bestX = i;\n bestY = j;\n }\n }\n }\n }\n game.placeBlack(bestX, bestY);\n}\n\n\n// 計算攻擊得分\nfunction getAttackPoints(x, y) {\n let result = game.check('black', x, y);\n return 1*result[1] + 5*result[2] + 15*result[3] + 35*result[4] + 350*result[5];\n}\n\n// 計算防守得分\nfunction getDefendPoints(x, y) {\n let result = game.check('white', x, y);\n return 1*result[1] + 5*result[2] + 15*result[3] + 35*result[4] + 350*result[5];\n}\n\n// 不斷地印出得分\n// forever(function(){\n// for (let i = 0; i \u003c 15; i++) {\n// for (let j = 0; j \u003c 15; j++) {\n// print(getAttactPoints(i, j) + getDefendPoints(i, j), 115 + 30*i, 35 + 30*j, 'black', 10);\n// }\n// }\n// });\n\n// game.placeBlack(0, 0);game.placeBlack(0, 1);game.placeBlack(0, 2);game.placeBlack(0, 3);game.placeBlack(0, 4);game.placeBlack(0, 5);game.placeBlack(0, 6);game.placeBlack(0, 7);game.placeBlack(0, 8);game.placeBlack(0, 9);game.placeBlack(0, 10);game.placeBlack(0, 11);game.placeBlack(0, 12);game.placeBlack(0, 13);game.placeBlack(0, 14);game.placeBlack(1, 0);game.placeBlack(1, 1);game.placeBlack(1, 2);game.placeBlack(1, 3);game.placeBlack(1, 4);game.placeBlack(1, 5);game.placeBlack(1, 6);game.placeBlack(1, 7);game.placeBlack(1, 8);game.placeBlack(1, 9);game.placeBlack(1, 10);game.placeBlack(1, 11);game.placeBlack(1, 12);game.placeBlack(1, 13);game.placeBlack(1, 14);game.placeBlack(2, 0);game.placeBlack(2, 1);game.placeBlack(2, 2);game.placeBlack(2, 3);game.placeBlack(2, 4);game.placeBlack(2, 5);game.placeBlack(2, 6);game.placeBlack(2, 7);game.placeBlack(2, 8);game.placeBlack(2, 9);game.placeBlack(2, 10);game.placeBlack(2, 11);game.placeBlack(2, 12);game.placeBlack(2, 13);game.placeBlack(2, 14);game.placeBlack(3, 0);game.placeBlack(3, 1);game.placeBlack(3, 2);game.placeBlack(3, 3);game.placeBlack(3, 4);game.placeBlack(3, 5);game.placeBlack(3, 6);game.placeBlack(3, 7);game.placeBlack(3, 8);game.placeBlack(3, 9);game.placeBlack(3, 10);game.placeBlack(3, 11);game.placeBlack(3, 12);game.placeBlack(3, 13);game.placeBlack(3, 14);game.placeBlack(4, 0);game.placeBlack(4, 1);game.placeBlack(4, 2);game.placeBlack(4, 3);game.placeBlack(4, 4);game.placeBlack(4, 5);game.placeBlack(4, 6);game.placeBlack(4, 7);game.placeBlack(4, 8);game.placeBlack(4, 9);game.placeBlack(4, 10);game.placeBlack(4, 11);game.placeBlack(4, 12);game.placeBlack(4, 13);game.placeBlack(4, 14);game.placeBlack(5, 0);game.placeBlack(5, 1);game.placeBlack(5, 2);game.placeBlack(5, 3);game.placeBlack(5, 4);game.placeBlack(5, 5);game.placeBlack(5, 6);game.placeBlack(5, 7);game.placeBlack(5, 8);game.placeBlack(5, 9);game.placeBlack(5, 10);game.placeBlack(5, 11);game.placeBlack(5, 12);game.placeBlack(5, 13);game.placeBlack(5, 14);game.placeBlack(6, 0);game.placeBlack(6, 1);game.placeBlack(6, 2);game.placeBlack(6, 3);game.placeBlack(6, 4);game.placeBlack(6, 5);game.placeBlack(6, 6);game.placeBlack(6, 7);game.placeBlack(6, 8);game.placeBlack(6, 9);game.placeBlack(6, 10);game.placeBlack(6, 11);game.placeBlack(6, 12);game.placeBlack(6, 13);game.placeBlack(6, 14);game.placeBlack(7, 0);game.placeBlack(7, 1);game.placeBlack(7, 2);game.placeBlack(7, 3);game.placeBlack(7, 4);game.placeBlack(7, 5);game.placeBlack(7, 6);game.placeBlack(7, 7);game.placeBlack(7, 8);game.placeBlack(7, 9);game.placeBlack(7, 10);game.placeBlack(7, 11);game.placeBlack(7, 12);game.placeBlack(7, 13);game.placeBlack(7, 14);game.placeBlack(8, 0);game.placeBlack(8, 1);game.placeBlack(8, 2);game.placeBlack(8, 3);game.placeBlack(8, 4);game.placeBlack(8, 5);game.placeBlack(8, 6);game.placeBlack(8, 7);game.placeBlack(8, 8);game.placeBlack(8, 9);game.placeBlack(8, 10);game.placeBlack(8, 11);game.placeBlack(8, 12);game.placeBlack(8, 13);game.placeBlack(8, 14);game.placeBlack(9, 0);game.placeBlack(9, 1);game.placeBlack(9, 2);game.placeBlack(9, 3);game.placeBlack(9, 4);game.placeBlack(9, 5);game.placeBlack(9, 6);game.placeBlack(9, 7);game.placeBlack(9, 8);game.placeBlack(9, 9);game.placeBlack(9, 10);game.placeBlack(9, 11);game.placeBlack(9, 12);game.placeBlack(9, 13);game.placeBlack(9, 14);game.placeBlack(10, 0);game.placeBlack(10, 1);game.placeBlack(10, 2);game.placeBlack(10, 3);game.placeBlack(10, 4);game.placeBlack(10, 5);game.placeBlack(10, 6);game.placeBlack(10, 7);game.placeBlack(10, 8);game.placeBlack(10, 9);game.placeBlack(10, 10);game.placeBlack(10, 11);game.placeBlack(10, 12);game.placeBlack(10, 13);game.placeBlack(10, 14);game.placeBlack(11, 0);game.placeBlack(11, 1);game.placeBlack(11, 2);game.placeBlack(11, 3);game.placeBlack(11, 4);game.placeBlack(11, 5);game.placeBlack(11, 6);game.placeBlack(11, 7);game.placeBlack(11, 8);game.placeBlack(11, 9);game.placeBlack(11, 10);game.placeBlack(11, 11);game.placeBlack(11, 12);game.placeBlack(11, 13);game.placeBlack(11, 14);game.placeBlack(12, 0);game.placeBlack(12, 1);game.placeBlack(12, 2);game.placeBlack(12, 3);game.placeBlack(12, 4);game.placeBlack(12, 5);game.placeBlack(12, 6);game.placeBlack(12, 7);game.placeBlack(12, 8);game.placeBlack(12, 9);game.placeBlack(12, 10);game.placeBlack(12, 11);game.placeBlack(12, 12);game.placeBlack(12, 13);game.placeBlack(12, 14);game.placeBlack(13, 0);game.placeBlack(13, 1);game.placeBlack(13, 2);game.placeBlack(13, 3);game.placeBlack(13, 4);game.placeBlack(13, 5);game.placeBlack(13, 6);game.placeBlack(13, 7);game.placeBlack(13, 8);game.placeBlack(13, 9);game.placeBlack(13, 10);game.placeBlack(13, 11);game.placeBlack(13, 12);game.placeBlack(13, 13);game.placeBlack(13, 14);game.placeBlack(14, 0);game.placeBlack(14, 1);game.placeBlack(14, 2);game.placeBlack(14, 3);game.placeBlack(14, 4);game.placeBlack(14, 5);game.placeBlack(14, 6);game.placeBlack(14, 7);game.placeBlack(14, 8);game.placeBlack(14, 9);game.placeBlack(14, 10);game.placeBlack(14, 11);game.placeBlack(14, 12);game.placeBlack(14, 13);game.placeBlack(14, 14);\n// function dfs(x, y){\n// if(x \u003e= 0 \u0026\u0026 x \u003c= 15 \u0026\u0026 y \u003e= 0 \u0026\u0026 y \u003c= 15 \u0026\u0026 game.grid[x][y] == 'empty'){\n// game.placeBlack(x, y);\n// dfs(x+1, y);\n// dfs(x-1, y);\n// dfs(x, y+1);\n// dfs(x, y-1);\n// }else{\n// return false;\n// }\n// }\n\n// dfs(7,7)","created_at":"2018-07-02T09:37:04.289+08:00","updated_at":"2020-03-07T15:37:25.841+08:00","name":"五子棋初階 AI (S)","language":"javascript","screenshot":{"url":"https://cdn3.koding.school/uploads/project/screenshot/33131/89edcce60b8890776f43b51e69f48ea4.jpg"},"parent_id":30959,"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\nfunction random(x) {\n return Math.floor(Math.random() * (x+1));\n}\n\nvar game = (function () {\n\n let grid = {};\n\n let instance = {\n place: place,\n placeWhite: placeWhite,\n placeBlack: placeBlack,\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] = 'empty';\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] == 'empty') 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 // if (grid[x][y] != undefined) return;\n grid[x][y] = instance.current;\n instance.current = instance.current == 'w' ? 'b' : 'w';\n }\n \n function placeWhite(x, y) {\n // if (grid[x][y] != undefined) return;\n grid[x][y] = 'w';\n instance.current = 'b';\n }\n \n function placeBlack(x, y) {\n // if (grid[x][y] != undefined) return;\n grid[x][y] = 'b';\n instance.current = 'w';\n }\n\n let funcs = [];\n function click (func) {\n funcs.push(func);\n }\n\n function check(color, x, y) {\n \n if (color == 'white' || color == 'w') color = 'w';\n if (color == 'black' || color == 'b') color = 'b';\n \n var temp = grid[x][y];\n grid[x][y] = color;\n var result = [0, 1, 0, 0, 0, 0];\n var a, b, c;\n var start, len;\n for (len = 5; len \u003e= 2; 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] = temp;\n return result;\n }\n\n return instance;\n})();\n","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":289,"hashid":"2pdsyerj","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":617153,"file_name":"bg.png","project_id":33131,"asset_id":70030,"created_at":"2018-07-02T09:37:04.296+08:00","updated_at":"2018-07-02T09:37:04.296+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦