{"id":68093,"student_id":243,"content":"var grid = [\r\n '******',\r\n '* *',\r\n '* ** *',\r\n '* *C *',\r\n '* *',\r\n '******'\r\n];\r\n\r\ninit(grid);\r\n// 右鍵向右移動\r\n// when('keyup', 'right', function () {\r\n// player.x++;\r\n// });\r\n// // 左鍵向左移動\r\n// when('keyup', 'left', function () {\r\n// player.x--;\r\n// });\r\n\r\nplayer.reset(3, 1); // 初始化老鼠位置\r\n\r\nvar Q = {}; //老鼠的大腦\r\nvar S1; //上一次的狀態(位置)\r\nvar A; //上一次的動作(移動方向)\r\nvar alpha = 0.8; // 學習速率\r\nvar beta = 0.5; // 衰減值\r\n\r\n\r\nforever(function(){\r\n S1 = player.x+':'+player.y;//上一次的狀態\r\n \r\n // if(grid[[player.y]][player.x]=='C' ||grid[player.y][player.x]=='*'){\r\n // player.reset(3,1);\r\n \r\n // }\r\n if(Q[S1]==undefined){\r\n Q[S1]=[0,0,0,0];\r\n \r\n }\r\n var max = Math.max(...Q[S1]);\r\n A=Q[S1].indexOf(max);//取出最大分數方向\r\n \r\n if(A==0)player.x--;\r\n if(A==1)player.x++;\r\n if(A==2)player.y--;\r\n if(A==3)player.y++;\r\n \r\n \r\n \r\n \r\n S2=player.x+':'+player.y;//儲存當次狀態\r\n if (Q[S2]==undefined){\r\n Q[S2]=[0,0,0,0];\r\n }\r\n if(grid[player.y][player.x]=='*'){//撞到牆壁懲罰-100\r\n reword(Q,S1,A,S2,-100);\r\n player.reset(2,1);\r\n }\r\n \r\n if(grid[[player.y]][player.x]=='C'){//找到起司加10\r\n reword(Q,S1,A,S2,+10);\r\n player.reset(2,1);\r\n }\r\n if(grid[player.y][player.x] == ' '){//浪費步數懲罰-1\r\n reword(Q, S1, A, S2, -1);\r\n }\r\n \r\n\r\n\r\n \r\n});\r\n// 懲罰獎勵\r\nfunction reword (Q, S1, A, S2, score) {\r\n Q[S1][A]=alpha*Q[S1][A]+(1-alpha)*(score+beta*Math.max(...Q[S2]))\r\n \r\n \r\n \r\n \r\n}","created_at":"2019-05-18T10:18:55.391+08:00","updated_at":"2019-10-06T02:13:00.582+08:00","name":"老鼠找起司(2) 副本","language":"javascript","screenshot":{"url":"https://cdn5.koding.school/uploads/project/screenshot/68093/f6be030e5c2ab0674372c8c7e8e4c997.jpg"},"parent_id":65017,"plugin":"var 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.fillColor = (grid[y][x] == '*' ? 'black' : '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] = '';\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":67,"hashid":"meys55nz","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":1192086,"file_name":"mouse.png","project_id":68093,"asset_id":117128,"created_at":"2019-05-18T10:18:55.396+08:00","updated_at":"2019-05-18T10:18:55.396+08:00"},{"id":1192087,"file_name":"cheese.png","project_id":68093,"asset_id":117129,"created_at":"2019-05-18T10:18:55.397+08:00","updated_at":"2019-05-18T10:18:55.397+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦