由于记错了大作业提交日期, 所以匆匆完成了这次的结课作业提高版, 代码写的属实是有点没有经过细细推敲, 有一些可选需求也是按照简化需求的版本完成的, 游戏的参数也没有经过过多的测试(这导致节奏时快时慢, 非常容易赔钱┗( 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)
: 设置日期