{"id":331332,"student_id":1998,"content":"// // 二維迷宮\n// var grid = [\n// '******',\n// '* *',\n// '* ** *',\n// '* *C *',\n// '* *',\n// '******',\n// ];\nvar grid = randomGrid(10, 8, 0.25)\ninit(grid); // 初始化畫面\n\nwhen('keyup', 'up', function () {\n player.y--;\n});\nwhen('keyup', 'down', function () {\n player.y++;\n});\nwhen('keyup', 'left', function () {\n player.x--;\n});\nwhen('keyup', 'right', function () {\n player.x++;\n});\n\n// 按住空白按鍵更新老鼠\n//when('keydown', 'space', update);\nforever(update)\nplayer.x = 1;\nplayer.y = 1;\n\nvar Q = {}; //老鼠的大腦\nvar S1; //上一次的狀態(位置)\nvar S2; //當前的狀態(位置)\nvar A; //上一次的動作(移動方向)\nvar alpha = 0.8; // 學習速率\nvar beta = 0.5; // 衰減值\n\nforever(function () {\n S1 = player.x + \":\" + player.y\n drawText(S1, 10, 10, 'red')\n});\n\n// 更新老鼠\nfunction update () {\n \n \n S1 = player.x + \":\" + player.y\n if (Q[S1] == undefined) {\n Q[S1] = [0, 0, 0, 0]\n }\n \n var max = Math.max(Q[S1][0], Q[S1][1], Q[S1][2], Q[S1][3])\n var A = Q[S1].indexOf(max)\n \n if (A == 0) player.x++\n if (A == 1) player.x--\n if (A == 2) player.y--\n if (A == 3) player.y++\n \n S2 = player.x + \":\" + player.y\n if (Q[S2] == undefined) {\n Q[S2] = [0, 0, 0, 0]\n } \n if(grid[player.y][player.x] == \"*\"){\n player.x = 1\n player.y = 1\n reward(Q, S1, A, S2, -100)\n }\n if(grid[player.y][player.x] == \"C\"){\n player.x = 1\n player.y = 1\n reward(Q, S1, A, S2, +100)\n }\n if(grid[player.y][player.x] == \" \"){\n reward(Q, S1, A, S2, -1)\n }\n};\n\n// Q-learning 公式\nfunction reward (Q, S1, A, S2, R) {\n \n var mr = Math.max(Q[S2][0], Q[S2][1], Q[S2][2], Q[S2][3])\n Q[S1][A] = Q[S1][A] * (1 - alpha) + (R + mr * beta) * alpha\n}","created_at":"2021-12-26T10:00:27.027+08:00","updated_at":"2021-12-26T12:15:19.237+08:00","name":"老鼠找起司_Day2_預設版 副本","language":"javascript","screenshot":{"url":"https://cdn8.koding.school/uploads/project/screenshot/331332/fd71a0fbebc75d568399ed21dce5c8f7.jpg"},"parent_id":303224,"plugin":"setBackdrop(\"#fff\");\nvar rat = createSprite('mouse.png');\nvar cheese = createSprite('cheese.png');\nvar W;\nvar H;\nvar width = 40;\n\nfunction init (grid) {\n\n H = grid.length;\n W = grid[0].length;\n\n for (var y = 0; y \u003c H; y++) {\n for (var x = 0; x \u003c W; x++) {\n if (grid[y][x] == 'C') {\n cheese.moveTo(x*width + width/2, y*width + width/2);\n }\n }\n }\n\n forever(function() {\n for (var y = 0; y \u003c H; y++) {\n for (var x = 0; x \u003c W; x++) {\n pen.size = 4;\n pen.color = '#999'\n pen.fillColor = (grid[y][x] == '*' ? '#111' : 'white')\n pen.drawRect(x*width, y*width, width, width);\n }\n }\n });\n}\n\nfunction randomGrid (col, row, rate) {\n var col = col \u003c 16 ? col : 16;\n var row = row \u003c 12 ? row : 12;\n var grid = [];\n for (var y = 0; y \u003c row - 2; y++) {\n grid[y] = '';s\n for (var x = 0; x \u003c col - 2 ; x++) {\n if (x == col - 3 \u0026\u0026 y == row - 3) grid[y] += 'C';\n else grid[y] += Math.random() \u003c rate ? '*' : ' ';\n }\n grid[y] = '*' + grid[y] + '*';\n }\n var s = Array(col).fill('*').join('');\n grid.push(s);\n grid.unshift(s);\n return grid;\n}\n\nvar player = {\n x: 1,\n y: 1,\n reset: function (x, y) {\n this.x = x;\n this.y = y;\n }\n}\n\nforever(function () {\n rat.moveTo(player.x*width + width/2, player.y*width + width/2);\n})\n\n","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":116,"hashid":"9ygspjyd6","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":7015369,"file_name":"cheese.png","project_id":331332,"asset_id":425155,"created_at":"2021-12-26T10:00:27.032+08:00","updated_at":"2021-12-26T10:00:27.032+08:00"},{"id":7015370,"file_name":"mouse.png","project_id":331332,"asset_id":425154,"created_at":"2021-12-26T10:00:27.034+08:00","updated_at":"2021-12-26T10:00:27.034+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦