由于记错了大作业提交日期, 所以匆匆完成了这次的结课作业提高版, 代码写的属实是有点没有经过细细推敲, 有一些可选需求也是按照简化需求的版本完成的, 游戏的参数也没有经过过多的测试(这导致节奏时快时慢, 非常容易赔钱┗( T﹏T )┛). 如果实在是观感不佳还可以看看结课作业基础版
通过实现一个类游戏的餐厅经营模拟,练习移动端 HTML 页面布局及样式实现,以及在 JavaScript 使用面向对象编程,在你的设计中应用合适的设计模式.

参考原型图,使用 HTML+CSS+JavaScript 实现兼容移动端的餐厅游戏,要实现厨师、顾客以及你自己三个角色的关键操作,完成从顾客等位、点菜、烹饪、用餐、支付的一系列状态变更的数据、信息、交互、展现的变化及处理。
本练习提供的附件中,包括了开发本练习所需要的图片资源。
涉及的单位元素:
完成 时间元素:显示在左上角,初始值为W0,D0
完成 金钱元素:显示在右上角,初始值为500(可自定义)
金钱变化发生在以下几个动作:
餐厅中有三个角色:厨师、顾客 和 你
顾客的属性包括:
顾客的行为包括:
厨师的行为包括:
你的行为包括:
最大可用厨师数: 6
最大可用餐桌数: 4
等位区大小: 5
初始化资金: 500
厨师周薪: 140
厨师解雇违约金: 140
每日时长: 40000 ms
用户等位忍耐时长: 15000 ms
每次双击厨师减少剩余时间: 700 ms
新客户出现平均间隔: 10000 ms
食物列表
| id | 食物名 | 售价 | 顾客最长等待时间 | 顾客食用时间 | 成本 | 制作用时 |
|---|---|---|---|---|---|---|
| 0 | '凉拌SAN' | 6 | 7000 | 5000 | 4 | 3500 |
| 1 | '冷切DOM' | 4 | 7000 | 5000 | 3 | 3500 |
| 2 | 'UL炖LI' | 12 | 10000 | 7000 | 8 | 5000 |
| 3 | '红烧HEAD' | 15 | 10000 | 7000 | 10 | 5000 |
| 4 | '酥炸ECharts' | 18 | 10000 | 7000 | 12 | 5000 |
| 5 | '炙烤CSS' | 16 | 10000 | 7000 | 12 | 5000 |
| 6 | '清蒸DIV' | 12 | 10000 | 7000 | 8 | 5000 |
| 7 | '鲜榨flex' | 5 | 7000 | 5000 | 3 | 3500 |
| 8 | '小程序奶茶' | 6 | 7000 | 5000 | 4 | 3500 |
菜单
| 类目 | 最少选购1 | 最多选购 | 可选食物ID |
|---|---|---|---|
| '凉菜(二选一,可不点)' | 0 | 1 | '0, 1' |
| '主菜(五选二,必点)' | 2 | 2 | '2, 3, 4, 5, 6' |
| '饮料(二选一,可不点)' | 0 | 1 | '7, 8' |
可用色彩风格: ['gray', 'yellow', 'red', 'orange', 'purple', 'green', 'blue', 'brown'] debug.js:170
可用姓名: ['Allen', 'Alice', 'Julie', 'Kathy', 'Vivian', 'Denise', 'Nancy', 'Mary', 'Emma', 'Olivia', 'Marilyn', 'Helen', 'Paula', 'Elaine', 'Carrie', 'Deborah', 'Charlotte', 'Eva', 'Jaime', 'Kathleen', 'Lydia', 'Jenny', 'Melody', 'Lucia', 'Frances', 'Ann', 'James', 'Kelly', 'Kevin', 'Rose', 'Lisa', 'Sandra', 'Donna', 'Carol', 'Cynthia', 'Brenda', 'Virginia', 'Pamela', 'Christine', 'Marie', 'Janet', 'Alma', 'Beth', 'Ellen', 'Gina', 'Anne', 'Irene', 'Annie', 'Edith', 'Jeanne']
.├── css│ ├── components.css // 封装组件样式│ ├── components.css.map│ ├── components.less│ ├── style.css // 游戏样式表│ ├── style.css.map│ └── style.less├── design // 设计稿│ ├── indexDesign.html│ └── restaurant_prototype.png├── document // 开发文档├── img // 图片资源├── index.html // 游戏页面├── js│ ├── tool-kits.js // 工具函数│ ├── components.js // 封装组件JS│ ├── StateManager.js // 状态管理器│ ├── config.js // 游戏参数配置│ ├── GameTimer.js // 全局计时器│ ├── Cook.js // 厨师对象│ ├── Customer.js // 顾客对象│ ├── Resaturant.js // 餐厅对象JS│ └── index.js // 引入其他JS├── package.json // 用于使用ESLint与Prettier├── package-lock.json└── README.md // 开发文档MarkDown
Restautant类
方法: build 初始化
方法: addProcess(ele,idx) 添加进度条颜色
变量: config 配置文件
厨师相关
toggleCookPlus() 显示加号hireCook() 雇佣厨师missCook(id) 解雇厨师cooksEle cooks元素cookPlusEle 增加厨师按钮cooks 所有可用厨师cooksOnServe 在工作的厨师数量cookDefaultEle 默认厨师元素cookEleArr 所有厨师元素数组cooksOnServe 在工作的厨师数量顾客相关
addCustom() 增加顾客delCustom(cus) 删除顾客saveMenu() 保存菜单customersEle customers元素customersWaitEle 等待队列元素customers 所有客户数组customersId 当前客户IDcustomerDefaultEle 客户默认模板customerEleArr 在服务客户元素数组foodWaitQueue 没有分配厨师的餐Cook类
init 初始化状态work 被雇佣rest 被解雇toCooking 开始做饭createProcess 创建工作进度refreshProcess 刷新工作状态throwFood 提交食物cookFinish 做完处理tryNewDish 尝试抓取新任务Customer类
buildDom 插入DOMflashIndex 更新等待队列addTag 添加进度条startTimer 开始计时findEmptyDesk 找到第一个空桌子flashIndex 刷新当前排位号addTag 添加标签(等位中/菜名)refreshFoodWaitProcess 刷新等待食物/进食进度条refreshSitWaitProcess 刷新等位进度条grayTag 将进度条变灰(当一个食物等待超时时)addRecept 点单后用户接收菜单saveFood 用户从厨师处获得一道菜tryEating 尝试去吃(如果有食物在等待被吃队列)pay 付款并走人toSad 一道菜都没有等到时back 离开打开DevTools会显示API列表(输入debugMod()开启调试)
debug.addCook(): 增加厨师debug.delCook(id): 删除厨师debug.addCustom(): 增加顾客debug.delCustom(id): 删除厨师debug.resetConf(config): 修改配置文件并重新加载(未经测试, 参数为要修改的部分配置)debug.setMoney(val): 设置资产debug.setToday(val): 设置日期