{"id":49660,"student_id":10,"content":"// grid 儲存數獨的資料:\nfunction resolve (grid) {\n for (var x = 0; x \u003c 9; x++) {\n for (var y = 0; y \u003c 9; y++) {\n if (grid[x][y] === 0) {\n var arr = [];\n\n for (var i = 0; i \u003c 9; i++) {\n arr.push(grid[x][i]);\n arr.push(grid[i][y]);\n }\n\n var offsetX = Math.floor(x/3);\n var offsetY = Math.floor(y/3);\n for (var xx = 0; xx \u003c 3; xx++) {\n for (var yy = 0; yy \u003c 3; yy++) {\n arr.push(grid[offsetX*3 + xx][offsetY*3 + yy]);\n }\n }\n\n for (var i = 1; i \u003c= 9; i++) {\n if (arr.indexOf(i) === -1) {\n grid[x][y] = i;\n if (resolve(grid)) return true;\n grid[x][y] = 0;\n }\n }\n return false;\n }\n }\n }\n return true;\n}\n\n// 重置數獨的資料:\nfunction reset (grid) {\n for (var x=0; x\u003c9; x++) {\n for (var y=0; y\u003c9; y++) {\n grid[x][y] = 0;\n } \n }\n}\n\n// grid 儲存數獨的資料:\nfunction generate (grid) {\n for (var x = 0; x \u003c 9; x++) {\n for (var y = 0; y \u003c 9; y++) {\n if (grid[x][y] === 0) {\n var arr = [];\n\n for (var i = 0; i \u003c 9; i++) {\n arr.push(grid[x][i]);\n arr.push(grid[i][y]);\n }\n\n var offsetX = Math.floor(x/3);\n var offsetY = Math.floor(y/3);\n for (var xx = 0; xx \u003c 3; xx++) {\n for (var yy = 0; yy \u003c 3; yy++) {\n arr.push(grid[offsetX*3 + xx][offsetY*3 + yy]);\n }\n }\n \n // 這裏不太一樣哦~! 記得複製過來時遞迴名稱要改為 generate\n var nums = shuffle();\n for (var i = 1; i \u003c 9; i++) {\n if (arr.indexOf(nums[i]) === -1) {\n grid[x][y] = nums[i];\n if (generate(grid)) return true;\n grid[x][y] = 0;\n }\n }\n return false;\n }\n }\n }\n \n // 執行到這裡時表示全部的格子已經填滿惹\n // 那就可以來把格子隨機塗掉囉~!\n var count=0;\n while (count \u003c 81 - 17) {\n let x = Math.floor(Math.random()*9)\n let y = Math.floor(Math.random()*9)\n if (grid[x][y] !== 0) {\n grid[x][y] = 0;\n count++;\n }\n }\n \n return true;\n}\n\n// 洗牌演算法\nfunction shuffle () {\n var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n for (var i=0; i\u003c1000; i++) {\n var rand1 = Math.floor(Math.random()*9);\n var rand2 = Math.floor(Math.random()*9);\n var tmp = arr[rand1];\n arr[rand1] = arr[rand2];\n arr[rand2] = tmp;\n }\n return arr;\n}\n","created_at":"2018-11-23T20:44:46.630+08:00","updated_at":"2019-11-07T14:30:40.577+08:00","name":"9x9 數獨產生器","language":"javascript","screenshot":{"url":"/uploads/project/screenshot/49660/54a80a072cd46d54c20d133e20b640a9.jpg"},"parent_id":47896,"plugin":"setBackdrop('bg.jpg');\n\nlet width = 40;\nlet margin = 10;\nlet offsetX = (640 - 40*9)/2;\nlet offsetY = 20;\nlet solveBtn = createSprite(\"solve_btn.jpg\");\nlet generateBtn = createSprite(\"generate_btn.jpg\");\n\nsolveBtn.y = 440;\ngenerateBtn.y = 440;\n\nsolveBtn.x += 100;\ngenerateBtn.x -= 100;\n\nforever(function() {\n solveBtn.scale = solveBtn.touched(cursor) ? 1.1: 1;\n generateBtn.scale = generateBtn.touched(cursor) ? 1.1: 1;\n});\n\nsolveBtn.on('click', ()=\u003e resolve(grid));\ngenerateBtn.on('click', ()=\u003e {\n reset(grid);\n generate(grid);\n});\n\n\nlet grid = [\n [8, 0, 0, 0, 0, 0, 0, 0, 0],\n [0, 0, 7, 5, 0, 0, 0, 0, 9],\n [0, 3, 0, 0, 0, 0, 1, 8, 0],\n [0, 6, 0, 0, 0, 1, 0, 5, 0],\n [0, 0, 9, 0, 3, 0, 0, 0, 0],\n [0, 0, 0, 7, 5, 0, 0, 0, 0],\n [0, 0, 2, 0, 7, 0, 0, 0, 4],\n [0, 0, 0, 0, 0, 3, 6, 1, 0],\n [0, 0, 0, 0, 0, 0, 8, 0, 0],\n];\n\n\nforever(function () {\n\n let colors = [\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ['', '', '', '', '', '', '', '', ''],\n ];\n\n\n let focusOnX = Math.floor((cursor.x - offsetX)/width);\n let focusOnY = Math.floor((cursor.y - offsetY)/width);\n if (focusOnX \u003e= 0 \u0026\u0026 focusOnY \u003e= 0 \u0026\u0026 focusOnX \u003c 9 \u0026\u0026 focusOnY \u003c 9) {\n colors[focusOnX][focusOnY] = 'yellow';\n }\n\n for (var i = 0; i \u003c 9; i++) {\n if (v_checker(i)) {\n for (var z = 0; z \u003c 9; z++) colors[i][z] = 'red';\n }\n if (h_checker(i)) {\n for (var z = 0; z \u003c 9; z++) colors[z][i] = 'red';\n }\n if (b_checker(i)) {\n let offsetX = i%3;\n let offsetY = (i - offsetX)/3;\n for (let x = 0; x \u003c 3; x++) {\n for (let y = 0; y \u003c 3; y++) {\n colors[offsetX*3 + x][offsetY*3 + y] = 'red';\n }\n }\n }\n }\n\n for (let x = 0; x \u003c 9; x++) {\n for (let y = 0; y \u003c 9; y++) {\n pen.size = 0;\n if (colors[x][y] !== '') {\n pen.fillColor = colors[x][y];\n pen.drawRect(offsetX + x*width + 2.5, offsetY + y*width + 2.5, width - 5, width - 5);\n };\n if (grid[x][y] !== 0) {\n print(grid[x][y], offsetX + x*width + 2.5 + 8, offsetY + y*width + 2.5, 'black', 30);\n }\n }\n }\n});\n\nwhen('keydown', () =\u003e {\n let x = Math.floor((cursor.x - offsetX)/width);\n let y = Math.floor((cursor.y - offsetY)/width);\n if (x \u003e= 0 \u0026\u0026 y \u003e= 0 \u0026\u0026 x \u003c 9 \u0026\u0026 y \u003c 9) {\n if (key['1']) grid[x][y] = 1;\n else if (key['2']) grid[x][y] = 2;\n else if (key['3']) grid[x][y] = 3;\n else if (key['4']) grid[x][y] = 4;\n else if (key['5']) grid[x][y] = 5;\n else if (key['6']) grid[x][y] = 6;\n else if (key['7']) grid[x][y] = 7;\n else if (key['8']) grid[x][y] = 8;\n else if (key['9']) grid[x][y] = 9;\n else grid[x][y] = 0;\n }\n});\n\nfunction v_checker (i) {\n var arr = [];\n for (var c = 0; c \u003c 9; c++) {\n arr.push(grid[i][c]);\n }\n return !isValid(arr);\n}\n\nfunction h_checker (i) {\n var arr = [];\n for (var c = 0; c \u003c 9; c++) {\n arr.push(grid[c][i]);\n }\n return !isValid(arr);\n}\n\nfunction b_checker (i) {\n let offsetX = i%3;\n let offsetY = (i - offsetX)/3;\n var arr = [];\n for (let x = 0; x \u003c 3; x++) {\n for (let y = 0; y \u003c 3; y++) {\n arr.push(grid[offsetX*3 + x][offsetY*3 + y]);\n }\n }\n return !isValid(arr);\n}\n\n\nfunction isValid (arr) {\n for (var a = 0; a \u003c arr.length - 1; a++) {\n for (var b = a+1; b \u003c arr.length; b++) {\n if (arr[a] == arr[b] \u0026\u0026 arr[a] != '') {\n return false;\n }\n }\n }\n return true;\n}","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":498,"hashid":"p93semy2","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":888933,"file_name":"solve_btn.jpg","project_id":49660,"asset_id":94505,"created_at":"2018-11-23T20:44:46.651+08:00","updated_at":"2018-11-23T20:44:46.651+08:00"},{"id":888934,"file_name":"new_game_btn.jpg","project_id":49660,"asset_id":94506,"created_at":"2018-11-23T20:44:46.676+08:00","updated_at":"2018-11-23T20:44:46.676+08:00"},{"id":888935,"file_name":"bg.jpg","project_id":49660,"asset_id":94507,"created_at":"2018-11-23T20:44:46.686+08:00","updated_at":"2018-11-23T20:44:46.686+08:00"},{"id":888969,"file_name":"generate_btn.jpg","project_id":49660,"asset_id":97458,"created_at":"2018-11-23T20:54:41.445+08:00","updated_at":"2018-11-23T20:54:41.445+08:00"}]
Orange Apple Learning Platform
My Projects
View Project Page
Export
Remix
Import
Delete
Download Android APP (APK)
Screenshot
繁中
简中
English
日本語
1:1:1
1:1
Full Width
Scan the QRCode below with your phone to install
Or you can
download APK
to this computer
Scan the QRCode below with your phone to install
Or you can
download APK
to this computer