{"id":669925,"student_id":10,"content":"// // 設為 true 則顯示蘋果\ngame.displayApple = false;\n\nvar bird = game.bird; //鳥\nvar ground = game.ground; //地板\nvar pipes = game.pipes; //水管們\n\n// 可以在主控台中印出 Q 觀察看看\nvar Q = new Brain; // 鳥的大腦,記錄在不同的狀態下要做什麼反應(跳/不跳)\nQ.display = false;\n\nvar alpha = 0.3; // 學習速率\nvar beta = 0.9; // 獎勵延遲\n\n\n// 遊戲迴圈\nfunction gameloop () {\n \n game.update(); // 更新角色位置與畫面\n \n // if (key.space) bird.jump()\n \n}\n\n// 根據鳥與蘋果的相對位置來作為「狀態」\nfunction getStatus (bird, apple) {\n \n}\n\n// 獎勵懲罰來更新 Q 大腦\nfunction reward (S1, A, S2, R) {\n \n}\n\nforever(gameloop); //重不斷執行遊戲迴圈\n\n","created_at":"2023-12-28T13:38:41.626+08:00","updated_at":"2023-12-28T13:39:41.081+08:00","name":"AI 學會玩 Flappy Bird(預設版)","language":"javascript","screenshot":{"url":"/uploads/project/screenshot/669925/771cc2cb3e7176a0e2920ecda9e4af77.jpg"},"parent_id":2,"plugin":"const stageWidth = 1200\nconst stageHeight = 900\nconst spaceBetweenPipe = 500\nconst cellWidth = 30\nconst speed = 5\nconst gravity = 0.4\n\nsetBackdrop('bg.png')\nGame.set({ width: 1200, height: 900 })\n\nlet count = 0\n\nfunction myGame () {\n \n let instance = {}\n \n let status = 'playing' // playing, stop\n let score = 0\n \n let bird = createSprite('bird.png')\n bird.vy = 0\n \n let g1 = group(400, 450)\n let g2 = group(800, 450)\n let g3 = group(1200, 450)\n let g4 = group(1600, 450)\n let ground1 = createSprite('ground.png')\n let ground2 = createSprite('ground.png')\n let groups = [g1, g2, g3, g4]\n let pipes = [g1.pipe1, g1.pipe2, g2.pipe1, g2.pipe2, g3.pipe1, g3.pipe2, g4.pipe1, g4.pipe2]\n let apples = [g1.apple, g2.apple, g3.apple,, g4.apple]\n let grounds = [ground1, ground2]\n \n // forever(update)\n\n bird.jump = function () {\n bird.vy = -8\n }\n \n function update () {\n print(score, 10, 10, 'white', 90)\n \n if (bird.touched(pipes) || bird.touched(grounds)) {\n status = 'stop'\n }\n if (status === 'stop') return\n \n \n groups.forEach(g =\u003e {\n g.x -= speed\n if (g.x \u003c 0) {\n g.x += spaceBetweenPipe * 4\n g.y = Math.random() * 400 + 200\n score += 1\n g.apple.hidden = false\n }\n g.update()\n })\n \n apples.forEach(apple =\u003e {\n if (instance.displayApple) {\n apple.opacity = 0.5\n getApple().opacity = 1 \n } else {\n apple.opacity = 0.01\n }\n \n })\n \n bird.vy += gravity\n bird.y += bird.vy\n \n ground1.x -= speed\n ground2.x -= speed\n if (ground1.x \u003c -600) ground1.x += 2400\n if (ground2.x \u003c -600) ground2.x += 2400\n }\n \n function restart () {\n count++;\n console.log('count:' + count)\n ground1.y = 850\n ground2.y = 850\n ground1.x = 0\n ground2.x = 1200\n bird.x = 200\n bird.y = 450\n bird.vy = 0\n g1.x = 200 + spaceBetweenPipe * 1\n g2.x = 200 + spaceBetweenPipe * 2\n g3.x = 200 + spaceBetweenPipe * 3\n g4.x = 200 + spaceBetweenPipe * 4\n g1.y = Math.random() * 400 + 200\n g2.y = Math.random() * 400 + 200\n g3.y = Math.random() * 400 + 200\n g4.y = Math.random() * 400 + 200\n g1.update()\n g2.update()\n g3.update()\n g4.update()\n status = 'playing'\n score = 0\n }\n \n function getApple () {\n return apples.filter(apple =\u003e apple.x \u003e bird.x).sort((a, b) =\u003e a.x - b.x)[0]\n }\n \n instance.restart = restart\n instance.getApple = getApple\n instance.bird = bird\n instance.pipes = pipes\n instance.ground = grounds\n instance.groups = groups\n instance.update = update\n \n return instance\n}\n\n\nfunction group (x, y) {\n let g = { x, y }\n g.apple = createSprite('apple.png')\n g.pipe1 = createSprite('pipe.png')\n g.pipe2 = createSprite('pipe.png')\n g.pipe2.direction += 180\n g.update = function () {\n g.apple.moveTo(g)\n g.pipe1.moveTo(g)\n g.pipe2.moveTo(g)\n g.pipe1.move(-60, -500)\n g.pipe2.move(-60, +500)\n }\n return g\n}\n\n\nvar game = myGame()\ngame.restart()\n\n\n// // Brain\nfunction Brain () {\n var w = 25;\n var h = 30\n var obj = {};\n obj['undefined'] = [0, 0];\n for (var x = -1; x \u003c w + 1; x++) {\n for (var y=-h; y \u003c h; y++) {\n obj[x + ':' + y] = [0, 0];\n }\n }\n \n obj.display = false\n \n forever(() =\u003e {\n if (obj.display === false) return\n game.groups.forEach(g =\u003e {\n var w = 25;\n var h = 30;\n for (var x = 0; x \u003c w; x++) {\n for (var y= -h; y \u003c h; y++) {\n pen.color = 'black'\n let s = Q[x + ':' + y]\n if (s[1] \u003e s[0]) pen.fillColor = '#ff000055'\n else if (s[1] \u003c s[0]) pen.fillColor = '#0000ff55'\n else pen.fillColor = '#00000000'\n pen.size = 0.5\n pen.drawRect(g.x - x*20 - 20, g.y - y*20, 20, 20)\n }\n }\n \n pen.size = 4\n pen.drawLine(g.x, g.y, g.x - 20 * w, g.y)\n pen.drawLine(g.x, g.y - y * 20, g.x, g.y + y * 20)\n pen.size = 1\n })\n })\n \n return obj;\n}\n\n\n\n","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":252,"hashid":"zpeszg5r8","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":15030228,"file_name":"bg.png","project_id":669925,"asset_id":709993,"created_at":"2023-12-28T13:38:54.765+08:00","updated_at":"2023-12-28T13:38:54.765+08:00"},{"id":15030229,"file_name":"bird.png","project_id":669925,"asset_id":709994,"created_at":"2023-12-28T13:38:54.770+08:00","updated_at":"2023-12-28T13:38:54.770+08:00"},{"id":15030230,"file_name":"ground.png","project_id":669925,"asset_id":709995,"created_at":"2023-12-28T13:38:54.775+08:00","updated_at":"2023-12-28T13:38:54.775+08:00"},{"id":15030231,"file_name":"pipe.png","project_id":669925,"asset_id":709996,"created_at":"2023-12-28T13:38:54.779+08:00","updated_at":"2023-12-28T13:38:54.779+08:00"},{"id":15030232,"file_name":"apple.png","project_id":669925,"asset_id":709997,"created_at":"2023-12-28T13:38:54.783+08:00","updated_at":"2023-12-28T13:38:54.783+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