{"id":332402,"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\nfor (let i = 0; i \u003c 10; i++) {\n let line = createSprite('line.png');\n line.x = 50 * i + 375;\n lines.push(line);\n}\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', moveDownToEnd); //當按下鍵\non('keydown', 'right', moveRight); //當按右鍵\non('keydown', 'left', moveLeft); //當按左鍵\n\nnextShape.moveTo(175, 175); //移動至右上角\nnextShape.costumeId = Math.floor(Math.random() * 7); //隨機切換造型\nforever(loop); //重複不斷執行遊戲迴圈\nloadBlocks();\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 for (let i = 0; i \u003c 10; i++) {\n lines[i].opacity = lines[i].touched(moving) ? 0.1 : 0.\n }\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 return true;\n } else {\n return false;\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(score / 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 for (let i = 0; i \u003c 18; i++) {\n if (moveDown()) break;\n }\n}\n","created_at":"2022-01-04T10:10:39.100+08:00","updated_at":"2022-10-27T19:11:23.810+08:00","name":"俄羅斯方塊(預設版)","language":"javascript","screenshot":{"url":"https://cdn9.koding.school/uploads/project/screenshot/332402/f02de83dca5710f81752056f35488630.jpg"},"parent_id":2,"plugin":"Game.set({width: 1200, height: 900})","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":189,"hashid":"qmds8j65j","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":7053246,"file_name":"drop.mp3","project_id":332402,"asset_id":459023,"created_at":"2022-01-04T10:10:56.777+08:00","updated_at":"2022-01-04T10:10:56.777+08:00"},{"id":7053247,"file_name":"bgm.mp3","project_id":332402,"asset_id":459024,"created_at":"2022-01-04T10:10:56.783+08:00","updated_at":"2022-01-04T10:10:56.783+08:00"},{"id":7053248,"file_name":"line.png","project_id":332402,"asset_id":459025,"created_at":"2022-01-04T10:10:56.786+08:00","updated_at":"2022-01-04T10:10:56.786+08:00"},{"id":7053249,"file_name":"score.mp3","project_id":332402,"asset_id":459026,"created_at":"2022-01-04T10:10:56.790+08:00","updated_at":"2022-01-04T10:10:56.790+08:00"},{"id":7053250,"file_name":"s_6.png","project_id":332402,"asset_id":459027,"created_at":"2022-01-04T10:10:56.794+08:00","updated_at":"2022-01-04T10:10:56.794+08:00"},{"id":7053251,"file_name":"s_5.png","project_id":332402,"asset_id":459028,"created_at":"2022-01-04T10:10:56.797+08:00","updated_at":"2022-01-04T10:10:56.797+08:00"},{"id":7053252,"file_name":"s_4.png","project_id":332402,"asset_id":459029,"created_at":"2022-01-04T10:10:56.801+08:00","updated_at":"2022-01-04T10:10:56.801+08:00"},{"id":7053253,"file_name":"s_3.png","project_id":332402,"asset_id":459030,"created_at":"2022-01-04T10:10:56.805+08:00","updated_at":"2022-01-04T10:10:56.805+08:00"},{"id":7053254,"file_name":"s_2.png","project_id":332402,"asset_id":459031,"created_at":"2022-01-04T10:10:56.808+08:00","updated_at":"2022-01-04T10:10:56.808+08:00"},{"id":7053255,"file_name":"s_1.png","project_id":332402,"asset_id":459032,"created_at":"2022-01-04T10:10:56.817+08:00","updated_at":"2022-01-04T10:10:56.817+08:00"},{"id":7053256,"file_name":"s_0.png","project_id":332402,"asset_id":459033,"created_at":"2022-01-04T10:10:56.821+08:00","updated_at":"2022-01-04T10:10:56.821+08:00"},{"id":7053257,"file_name":"gameover.png","project_id":332402,"asset_id":459034,"created_at":"2022-01-04T10:10:56.825+08:00","updated_at":"2022-01-04T10:10:56.825+08:00"},{"id":7053258,"file_name":"bg.png","project_id":332402,"asset_id":459035,"created_at":"2022-01-04T10:10:56.831+08:00","updated_at":"2022-01-04T10:10:56.831+08:00"},{"id":7053259,"file_name":"7.png","project_id":332402,"asset_id":459036,"created_at":"2022-01-04T10:10:56.835+08:00","updated_at":"2022-01-04T10:10:56.835+08:00"},{"id":7053260,"file_name":"6.png","project_id":332402,"asset_id":459037,"created_at":"2022-01-04T10:10:56.839+08:00","updated_at":"2022-01-04T10:10:56.839+08:00"},{"id":7053261,"file_name":"5.png","project_id":332402,"asset_id":459038,"created_at":"2022-01-04T10:10:56.842+08:00","updated_at":"2022-01-04T10:10:56.842+08:00"},{"id":7053262,"file_name":"4.png","project_id":332402,"asset_id":459039,"created_at":"2022-01-04T10:10:56.846+08:00","updated_at":"2022-01-04T10:10:56.846+08:00"},{"id":7053263,"file_name":"3.png","project_id":332402,"asset_id":459040,"created_at":"2022-01-04T10:10:56.849+08:00","updated_at":"2022-01-04T10:10:56.849+08:00"},{"id":7053264,"file_name":"2.png","project_id":332402,"asset_id":459041,"created_at":"2022-01-04T10:10:56.853+08:00","updated_at":"2022-01-04T10:10:56.853+08:00"},{"id":7053265,"file_name":"1.png","project_id":332402,"asset_id":459042,"created_at":"2022-01-04T10:10:56.856+08:00","updated_at":"2022-01-04T10:10:56.856+08:00"},{"id":7053266,"file_name":"0.png","project_id":332402,"asset_id":459043,"created_at":"2022-01-04T10:10:56.859+08:00","updated_at":"2022-01-04T10:10:56.859+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦