{"id":512106,"student_id":10,"content":"setBackdrop('bg.png');\nlet nextShape = createSprite('s_0.png', 's_1.png', 's_2.png', 's_3.png', 's_4.png', 's_5.png', 's_6.png');\nlet moving = []; //存放移動的磚塊\nlet fixed = []; //存放固定的磚塊\nlet lines = []; //存放提示燈角色\nlet score = 0; //分數\nlet clock = 0; //紀錄遊戲迴圈執行次數\n\nlet shapeList = [\n [[0, 0], [0, 1], [0, 2], [0, 3]], //長條形\n [[0, 0], [1, 0], [0, 1], [1, 1]], //正方形\n [[1, 0], [2, 0], [0, 1], [1, 1]], //反Z形\n [[0, 0], [1, 0], [1, 1], [2, 1]], //Z形\n [[0, 0], [1, 0], [2, 0], [2, 1]], //反L形\n [[0, 0], [1, 0], [2, 0], [0, 1]], //L形\n [[0, 0], [1, 0], [2, 0], [1, 1]], //山形\n]\n\non('keydown', 'up', turnRight); //當按上鍵\non('keydown', 'down', moveDown); //當按下鍵\non('keydown', 'right', moveRight); //當按右鍵\non('keydown', 'left', moveLeft); //當按左鍵\n\nnextShape.moveTo(175, 175); //移動至右上角\nnextShape.costumeId = Math.floor(Math.random() * 7); //隨機切換造型\nforever(loop); //重複不斷執行遊戲迴圈\nloadBlocks();\n\n// createSound('bgm.mp3', true);\n\n// 載入磚塊\nfunction loadBlocks () {\n let shape = shapeList[nextShape.costumeId]; //根據提示形狀載入磚塊\n for (let i = 0; i \u003c 4; i++) {\n let b = createSprite('0.png', '1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png');\n b.x = shape[i][0] * 50 + 375 + 150;\n b.y = shape[i][1] * 50 + 25 - 150;\n b.costumeId = nextShape.costumeId; //根據形狀切換對應顏色\n moving.push(b); // 存入陣列中\n }\n nextShape.costumeId = Math.floor(Math.random() * 7); //隨機切換造型作為下個形狀\n createSound('drop.mp3');\n}\n\n// 遊戲主迴圈\nfunction loop () {\n drawText(score, 920, 70, '#444', 80); // 顯示分數\n checkGameover(); //檢查遊戲是否結束\n checkLines(); //檢查是否要消除磚塊\n autoMove(); //自動墜落\n}\n\n//向下移動\nfunction moveDown () {\n for (let i = 0; i \u003c moving.length; i++) {\n moving[i].y += 50;\n }\n if (invalid()) {\n moveUp();\n fixed = fixed.concat(moving);\n moving = [];\n loadBlocks();\n }\n}\n\n//向上移動\nfunction moveUp () {\n for (let i = 0; i \u003c moving.length; i++) {\n moving[i].y -= 50;\n }\n}\n\n//向右移動\nfunction moveRight () {\n for (let i = 0; i \u003c moving.length; i++) {\n moving[i].x += 50;\n }\n if (invalid()) moveLeft();\n}\n\n//向左移動\nfunction moveLeft () {\n for (let i = 0; i \u003c moving.length; i++) {\n moving[i].x -= 50;\n }\n if (invalid()) moveRight();\n}\n\n// 自動墜落\nfunction autoMove() {\n clock++;\n let level = Math.floor(clock / 100);\n if (level \u003e 20) level = 20;\n if (clock % (30 - level) == 0) moveDown();\n}\n\n//順時針選轉\nfunction turnRight (angle = 90) {\n let center = moving[1]; // 中心點磚塊\n for (let i = 0; i \u003c moving.length; i++) {\n let b = moving[i];\n let d = b.distanceTo(center); // 算出要旋轉的磚塊與中心之間的距離\n b.toward(center); // 朝向中心磚塊\n b.stepForward(d); // 向前移動 d 距離\n b.direction -= angle; // 左轉 90 度\n b.stepForward(d); // 向前移動 d 距離\n b.direction = 90; // 恢復方向\n }\n if (invalid()) turnRight(-90);\n}\n\n// 移動後檢查是否超過範圍或碰到固定磚塊\nfunction invalid () {\n for (let i = 0; i \u003c moving.length; i++) {\n let b = moving[i];\n if (b.y \u003e 900 || b.x \u003c 350 || b.x \u003e 850 || b.touched(fixed)) {\n return true; //發現有不合法磚塊\n }\n }\n return false; //檢查沒問題\n}\n\n//檢查是否佔滿一行\nfunction checkLines () {\n let arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //紀錄 18 層每層磚塊數量\n let line = 0; //消除的行數\n\n for (let i = 0; i \u003c fixed.length; i++) {\n f = Math.floor(fixed[i].y / 50); // 算出該磚塊所在層數\n arr[f] += 1; //將該行磚塊數存入陣列\n }\n\n for (let i = 0; i \u003c 18; i++) {\n //drawText(arr[i], 300, i*50, 'white', 50);\n if (arr[i] == 10) { //如果該行填滿 10 個磚塊\n eraseLine(i); //消除該行\n line += 1; //行數增加\n createSound('score.mp3');\n }\n }\n \n // 根據消除行數增加分數\n if (line == 1) score += 40;\n if (line == 2) score += 100;\n if (line == 3) score += 300;\n if (line == 4) score += 1200;\n}\n\n// 清除一行\nfunction eraseLine (f) {\n for (let i = 0; i \u003c fixed.length; i++) {\n let floor = Math.floor(fixed[i].y / 50); // 取得該磚塊所在層\n if (floor == f) fixed[i].y = 1000; // f 層移出遊戲場景外\n if (floor \u003c f) fixed[i].y += 50; // f 層以上向下移動一格\n }\n}\n\n// 檢查遊戲是否結束\nfunction checkGameover () {\n for (let i = 0; i \u003c fixed.length; i++) {\n if (fixed[i].y \u003c 50) gameover(); //如果有磚塊超出上方就結束遊戲\n }\n}\n\n// 遊戲結束特效\nfunction gameover () {\n for (let i = 0; i \u003c fixed.length; i++) {\n fixed[i].costumeId = 7; //將所有磚塊變成深色\n }\n stop();\n}\n\n// 快速向下移動\nfunction moveDownToEnd () {\n \n}\n","created_at":"2023-03-27T10:09:53.386+08:00","updated_at":"2023-03-27T10:09:53.386+08:00","name":"俄羅斯方塊(延伸版) 副本","language":"javascript","screenshot":{"url":null},"parent_id":512104,"plugin":"Game.set({width: 1200, height: 900})","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":302,"hashid":"36ysd9w5e","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":11656874,"file_name":"drop.mp3","project_id":512106,"asset_id":616543,"created_at":"2023-03-27T10:09:53.396+08:00","updated_at":"2023-03-27T10:09:53.396+08:00"},{"id":11656875,"file_name":"bgm.mp3","project_id":512106,"asset_id":616544,"created_at":"2023-03-27T10:09:53.400+08:00","updated_at":"2023-03-27T10:09:53.400+08:00"},{"id":11656876,"file_name":"line.png","project_id":512106,"asset_id":616545,"created_at":"2023-03-27T10:09:53.401+08:00","updated_at":"2023-03-27T10:09:53.401+08:00"},{"id":11656877,"file_name":"score.mp3","project_id":512106,"asset_id":616546,"created_at":"2023-03-27T10:09:53.403+08:00","updated_at":"2023-03-27T10:09:53.403+08:00"},{"id":11656878,"file_name":"s_6.png","project_id":512106,"asset_id":616547,"created_at":"2023-03-27T10:09:53.404+08:00","updated_at":"2023-03-27T10:09:53.404+08:00"},{"id":11656879,"file_name":"s_5.png","project_id":512106,"asset_id":616548,"created_at":"2023-03-27T10:09:53.406+08:00","updated_at":"2023-03-27T10:09:53.406+08:00"},{"id":11656880,"file_name":"s_4.png","project_id":512106,"asset_id":616549,"created_at":"2023-03-27T10:09:53.407+08:00","updated_at":"2023-03-27T10:09:53.407+08:00"},{"id":11656881,"file_name":"s_3.png","project_id":512106,"asset_id":616550,"created_at":"2023-03-27T10:09:53.409+08:00","updated_at":"2023-03-27T10:09:53.409+08:00"},{"id":11656882,"file_name":"s_2.png","project_id":512106,"asset_id":616551,"created_at":"2023-03-27T10:09:53.410+08:00","updated_at":"2023-03-27T10:09:53.410+08:00"},{"id":11656883,"file_name":"s_1.png","project_id":512106,"asset_id":616552,"created_at":"2023-03-27T10:09:53.411+08:00","updated_at":"2023-03-27T10:09:53.411+08:00"},{"id":11656884,"file_name":"s_0.png","project_id":512106,"asset_id":616553,"created_at":"2023-03-27T10:09:53.412+08:00","updated_at":"2023-03-27T10:09:53.412+08:00"},{"id":11656885,"file_name":"gameover.png","project_id":512106,"asset_id":616554,"created_at":"2023-03-27T10:09:53.413+08:00","updated_at":"2023-03-27T10:09:53.413+08:00"},{"id":11656886,"file_name":"bg.png","project_id":512106,"asset_id":616555,"created_at":"2023-03-27T10:09:53.414+08:00","updated_at":"2023-03-27T10:09:53.414+08:00"},{"id":11656887,"file_name":"7.png","project_id":512106,"asset_id":616556,"created_at":"2023-03-27T10:09:53.416+08:00","updated_at":"2023-03-27T10:09:53.416+08:00"},{"id":11656888,"file_name":"6.png","project_id":512106,"asset_id":616557,"created_at":"2023-03-27T10:09:53.417+08:00","updated_at":"2023-03-27T10:09:53.417+08:00"},{"id":11656889,"file_name":"5.png","project_id":512106,"asset_id":616558,"created_at":"2023-03-27T10:09:53.418+08:00","updated_at":"2023-03-27T10:09:53.418+08:00"},{"id":11656890,"file_name":"4.png","project_id":512106,"asset_id":616559,"created_at":"2023-03-27T10:09:53.420+08:00","updated_at":"2023-03-27T10:09:53.420+08:00"},{"id":11656891,"file_name":"3.png","project_id":512106,"asset_id":616560,"created_at":"2023-03-27T10:09:53.422+08:00","updated_at":"2023-03-27T10:09:53.422+08:00"},{"id":11656892,"file_name":"2.png","project_id":512106,"asset_id":616561,"created_at":"2023-03-27T10:09:53.425+08:00","updated_at":"2023-03-27T10:09:53.425+08:00"},{"id":11656893,"file_name":"1.png","project_id":512106,"asset_id":616562,"created_at":"2023-03-27T10:09:53.430+08:00","updated_at":"2023-03-27T10:09:53.430+08:00"},{"id":11656894,"file_name":"0.png","project_id":512106,"asset_id":616563,"created_at":"2023-03-27T10:09:53.432+08:00","updated_at":"2023-03-27T10:09:53.432+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