{"id":138646,"student_id":10,"content":"","created_at":"2020-04-08T14:43:50.006+08:00","updated_at":"2020-04-17T15:40:02.058+08:00","name":"酒吧排程演算法(手動試玩版本)","language":"javascript","screenshot":{"url":"/uploads/project/screenshot/138646/9e10e29de35504081bf69d33712a45a1.jpg"},"parent_id":138553,"plugin":"Game.set({ width: 1200, height: 900 });\nsetBackdrop(\"bg.png\");\n\nconst COSTUMES = [['b0.png', 'b1.png'], ['r0.png', 'r1.png'], ['g0.png', 'g1.png'], ['y0.png', 'y1.png'], ['o0.png', 'o1.png']];\nvar bars = [];\nvar peopleSprite = {};\nvar powder = 0;\n\nfunction Bar (x, y) {\n \n if (bars.length \u003e 3) return alert('只能創造三個!');\n\n var table = createSprite(\"bar.png\");\n table.y = (2 - bars.length)*300 + 150;\n table.layer = 1;\n\n this.table = table;\n this.tasks = [];\n this.sprites = {};\n this.idx = 0;\n this.totalTime = 0;\n this.avgTime = 0;\n\n bars.push(this);\n\n forever(this.loop.bind(this));\n this.tasks.serve = this.serve.bind(this);\n\n return this.tasks;\n}\n\nBar.prototype = {\n \n loop: function () {\n \n var self = this;\n \n for (var i=0; i\u003cthis.tasks.length; i++) {\n var t = this.tasks[i];\n \n // 移除被放入不符合格式的物件\n if (!this.tasks[i]) {\n this.tasks.splice(i, 1);\n i--;\n continue;\n }\n \n // 印出每個叩叮的資訊\n var s = self.sprites[t.spriteId];\n print(t.value, s.x, s.y + 70, 'orange', 40); //啤酒需求個數\n print(t.time, s.x, s.y + 110, 'white', 40); //等待時間\n \n // 移除結束的任務\n if (t \u0026\u0026 t.value \u003c= 0) {\n this.tasks.splice(i, 1);\n this.sprites[t.spriteId].destroy();\n delete this.sprites[t.spriteId];\n }\n }\n\n var s = '平均等待 ' +this.avgTime.toFixed(3) + ' 秒'\n print(s, 10, this.table.y - 130, 'white', 30);\n },\n \n addTask: function (sprite, data) {\n this.tasks.push(data);\n for (var i = 0; i \u003c 10; i++) {\n if (this.sprites[this.idx] == undefined) {\n this.sprites[this.idx] = sprite;\n sprite.x = this.idx*120 + 60;\n sprite.y = this.table.y;\n data.spriteId = this.idx;\n break;\n }\n this.idx++;\n if (this.idx \u003e= 10) this.idx = 0;\n }\n },\n\n serve: function (data) {\n if (data == undefined) return;\n\n var s = this.sprites[data.spriteId]\n s.costumeId = 1;\n setTimeout(function() { \n data.value--;\n s.costumeId = 0;\n }, 700);\n }\n}\n\n\n// 每秒鐘更新一次task的等待時間\nsetInterval(function () {\n bars.forEach(function (bar) {\n bar.tasks.forEach(function (t) {\n if (t) t.time++;\n })\n bar.totalTime += bar.tasks.length;\n bar.avgTime = bar.totalTime/order;\n })\n}, 1000);\n\n\nvar order = 0;\nvar b1 = new Bar();\n\nsetInterval(function () {\n\n if (bars.length == 0) return;\n \n // 如果有任合一間酒吧已經滿客,所有ㄐㄧ就不再新增\n if (bars.some(function (b) {return b.tasks.length \u003e= 10})) return;\n \n\n order++;\n\n var value = Math.floor(Math.random()*8) + 1;\n var costume = COSTUMES[Math.floor(Math.random()*COSTUMES.length)];\n\n bars.forEach(function (bar) {\n var s = createSprite(costume);\n var data = {\n value: value, time: 0, order: order\n }\n \n s.on('click', function () {\n if (powder \u003e 0 \u0026\u0026 s.costumeId === 0) {\n b1.serve(data);\n powder--;\n createSound('bounce.wav');\n }\n });\n \n bar.addTask(s, data);\n });\n}, 2000);\n\n\n\n\n\nforever(function(){\n drawText('每秒鐘能完成一杯啤酒,請點擊叩叮來發送啤酒', 10, 10, 30, 'white');\n drawText('黃色數字表示需要的啤酒數量、白色數字表示客人已等待的時間', 10, 50, 30, 'white');\n drawText('試著經營這個酒吧,讓客人平均等待的時間最短!', 10, 90, 30, 'white');\n drawText('可分配啤酒數量:' + powder, 10, 170, 30, 'white');\n})\n\nsetInterval(function () {\n powder++;\n}, 1000);\n\n","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":454,"hashid":"qmdsjz2v","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":2390337,"file_name":"y0.png","project_id":138646,"asset_id":204025,"created_at":"2020-04-10T11:47:59.186+08:00","updated_at":"2020-04-10T11:47:59.186+08:00"},{"id":2390338,"file_name":"y1.png","project_id":138646,"asset_id":204019,"created_at":"2020-04-10T11:47:59.188+08:00","updated_at":"2020-04-10T11:47:59.188+08:00"},{"id":2390328,"file_name":"bg.png","project_id":138646,"asset_id":204020,"created_at":"2020-04-10T11:45:58.185+08:00","updated_at":"2020-04-10T11:45:58.185+08:00"},{"id":2390329,"file_name":"b1.png","project_id":138646,"asset_id":204010,"created_at":"2020-04-10T11:47:57.566+08:00","updated_at":"2020-04-10T11:47:57.566+08:00"},{"id":2390330,"file_name":"b0.png","project_id":138646,"asset_id":204021,"created_at":"2020-04-10T11:47:57.567+08:00","updated_at":"2020-04-10T11:47:57.567+08:00"},{"id":2390331,"file_name":"g1.png","project_id":138646,"asset_id":204012,"created_at":"2020-04-10T11:47:57.978+08:00","updated_at":"2020-04-10T11:47:57.978+08:00"},{"id":2390332,"file_name":"g0.png","project_id":138646,"asset_id":204022,"created_at":"2020-04-10T11:47:57.979+08:00","updated_at":"2020-04-10T11:47:57.979+08:00"},{"id":2390333,"file_name":"o0.png","project_id":138646,"asset_id":204023,"created_at":"2020-04-10T11:47:58.399+08:00","updated_at":"2020-04-10T11:47:58.399+08:00"},{"id":2390334,"file_name":"o1.png","project_id":138646,"asset_id":204015,"created_at":"2020-04-10T11:47:58.401+08:00","updated_at":"2020-04-10T11:47:58.401+08:00"},{"id":2390317,"file_name":"bar.png","project_id":138646,"asset_id":204009,"created_at":"2020-04-10T11:36:45.958+08:00","updated_at":"2020-04-10T11:36:45.958+08:00"},{"id":2390335,"file_name":"r1.png","project_id":138646,"asset_id":204016,"created_at":"2020-04-10T11:47:58.807+08:00","updated_at":"2020-04-10T11:47:58.807+08:00"},{"id":2390336,"file_name":"r0.png","project_id":138646,"asset_id":204024,"created_at":"2020-04-10T11:47:58.809+08:00","updated_at":"2020-04-10T11:47:58.809+08:00"},{"id":2428673,"file_name":"bounce.wav","project_id":138646,"asset_id":205842,"created_at":"2020-04-16T20:10:33.199+08:00","updated_at":"2020-04-16T20:10:33.199+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