{"id":206944,"student_id":12205,"content":"var DNA_LENGTH = 500; // 每個火箭的基因長度\nvar SIZE = 30; // 每一個世代的火箭個數\nvar rockets = []; // 存放所有的火箭\n\n// 初始化所有的火箭\nfor (var i = 0; i \u003c SIZE; i++) {\n var rocket = new Rocket();\n rockets.push(rocket);\n rocket.fire();\n rocket.gens = randomGens()\n}\n\nforever(function () {\n if (key.up) rockets[0].vy -= 0.3;\n if (key.right) rockets[0].vx += 0.1;\n if (key.left) rockets[0].vx -= 0.1;\n});\n\n// 當所有的火箭都停止,執行nextGeneration 產生下一代火箭\nforever(function() {\n for (var i = 0; i \u003c rockets.length; i++) {\n if (rockets[i].active) return;\n }\n nextGeneration();\n});\n\n// 產生隨機的初始化基因\nfunction randomGens () {\n var gens = []\n for (var i = 0; i \u003c DNA_LENGTH; i++) {\n gens.push(Math.floor(Math.random() * 4))\n }\n return gens\n}\n\n// 產生下一個世代\nfunction nextGeneration () {\n rockets.forEach(function(rocket) {\n rocket.score = Math.abs(rocket.vy) + Math.abs(rocket.x - platform.x)\n\n })\n rockets.sort(function(a, b) {\n return a.score - b.score\n })\n var parentA = rockets[0].gens;\n var parentB = rockets[1].gens;\n for (var i = 0; i \u003c SIZE; i++) {\n rockets[i].gens = crossover(parentA, parentB)\n rockets[i].fire()\n }\n}\n\n// 交配產生下一代基因\n// 每個基因有 2% 的機率突變,若不突變則各有 50% 的機率來自父親和母親\nfunction crossover (a, b) {\n var gens = []\n for (var i = 0; i \u003c DNA_LENGTH; i++) {\n gens[i] = Math.random() \u003e 0.5 ? a[i]: b[i]\n if (Math.random \u003c 0.02) {\n gens[i] = Math.floor(Math.random() * 4)\n }\n }\n return gens\n}","created_at":"2020-11-27T19:57:08.567+08:00","updated_at":"2020-11-27T19:57:08.567+08:00","name":"火箭降落 AI 副本 副本","language":"javascript","screenshot":{"url":null},"parent_id":204734,"plugin":"var gravity = 0.08;\n\ncreateSprite('bg.png');\nvar platformA = createSprite('platform.png');\nvar platformB = createSprite('platform.png');\nplatformA.scale = 0.6;\nplatformB.scale = 0.6;\nplatformA.y = 430;\nplatformA.x = 90;\nplatformB.y = 430;\nplatformB.x = 550;\n\n// alias\nvar platform = platformB;\n\nvar fires = [];\n\nforever(function () {\n fires = fires.filter(function (obj) {\n if (obj.scale \u003c= 0) {\n obj.destroy();\n return false;\n }\n return true;\n });\n});\n\nfunction createFire (x, y, direction) {\n var fire = createSprite('fire.png');\n fire.moveTo(x, y);\n fire.direction = direction + Math.random()*30 - 15;\n fire.stepForward(30);\n fires.push(fire);\n fire.forever(function () {\n fire.stepForward(2);\n fire.scale -= 0.02;\n fire.opacity -= 0.02;\n })\n}\n\nfunction Rocket () {\n var rocket = createSprite('rocket.png');\n\n rocket.moveTo(platformA);\n rocket.y -= 50;\n rocket.gens = [];\n rocket.direction = 0;\n rocket.scale = 0.3;\n rocket.vx = 0;\n rocket.vy = 0;\n rocket.clock = 0;\n rocket.active = false;\n rocket.cache = {};\n rocket.layer = 1;\n\n rocket.fire = function () {\n rocket.moveTo(platformA);\n rocket.y -= 50;\n this.direction = 0;\n this.scale = 0.3;\n this.vx = 0;\n this.vy = 0;\n this.clock = 0;\n this.active = true;\n this.opacity = 1;\n }\n\n rocket.forever(function() {\n\n if (!rocket.active) return;\n\n rocket.direction = rocket.vx*10;\n rocket.isFire = (\n Math.abs(rocket.vx - rocket.cache.vx) \u003e 0.02 ||\n rocket.vy - gravity - rocket.cache.vy != 0\n )\n rocket.cache.vx = rocket.vx;\n rocket.cache.vy = rocket.vy;\n \n if (rocket.clock % 3 == 0 \u0026\u0026 rocket.isFire) {\n rocket.isFire = false;\n createFire(rocket.x, rocket.y, rocket.direction + 180);\n }\n\n var g = rocket.gens[rocket.clock];\n rocket.clock++;\n if (g == 0) rocket.vy -= 0.3;\n else if (g == 1) rocket.vx += 0.1;\n else if (g == 2) rocket.vx -= 0.1;\n\n if (Math.abs(rocket.vx) \u003c 0.01) {\n rocket.vx = 0;\n } else {\n rocket.vx += rocket.vx \u003e 0 ? -0.01 : 0.01;\n }\n\n rocket.vy += gravity;\n rocket.x += rocket.vx;\n rocket.y += rocket.vy;\n\n if (rocket.touched([platformA, platformB]) || rocket.y \u003e= 440) {\n rocket.active = false;\n var score = Math.abs(rocket.vy) + Math.abs(rocket.x - platformB.x);\n rocket.opacity = score \u003e 8 ? 0.1: 1;\n }\n })\n\n return rocket;\n}","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":200,"hashid":"d5msvvgq8","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":3595887,"file_name":"rocket.png","project_id":206944,"asset_id":114040,"created_at":"2020-11-27T19:57:08.575+08:00","updated_at":"2020-11-27T19:57:08.575+08:00"},{"id":3595886,"file_name":"fire.png","project_id":206944,"asset_id":114039,"created_at":"2020-11-27T19:57:08.573+08:00","updated_at":"2020-11-27T19:57:08.573+08:00"},{"id":3595888,"file_name":"platform.png","project_id":206944,"asset_id":114041,"created_at":"2020-11-27T19:57:08.576+08:00","updated_at":"2020-11-27T19:57:08.576+08:00"},{"id":3595889,"file_name":"bg.png","project_id":206944,"asset_id":114042,"created_at":"2020-11-27T19:57:08.577+08:00","updated_at":"2020-11-27T19:57:08.577+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