JavaScript/两只猫咪
灵感来源于贪吃蛇retroSnakeGame
GitHub源地址:https://github.com/0rainge/retroSnakeGame
0.界面展示
1 | 开始页面——开始按钮 |
(写一个分析dom树的小工具)
2. 分析游戏思路
- 点击开始按钮:startPage消失,游戏开始
- 游戏开始:
- 右侧播放按钮改为暂停按钮
- 在main中生成大猫咪(长度和运动方向),默认长度为带两个心心,默认运动方向为右侧
- main随机生成大猫咪的真爱的位置
- 大猫咪每过一秒钟向当前方向移动一个单位长度
- 接受键盘按键向上下左右方向移动
- 大猫咪碰到了真爱:小心心+1,随机再次生成真爱位置
- 大猫咪碰到了墙壁游戏结束
- 点击暂停按钮,蛇停止运动,播放按钮改为暂停按钮,点击播放按钮,恢复运动,改为暂停按钮
- 游戏结束:显示游戏结束页面,分数为大猫咪的心心,按钮改为播放按钮
3. 实现问题记录
init() 初始化参数
content所有区域都用坐标属性来表示,一个单位长度是一个心心的长度,用坐标乘自身20的宽就是
找到能够容纳的最多单位数:mapW/foodW = 最大宽度
找到随机单位:通过随机数在0-最多食物数之间挑一个,即0-1之间的随机数*最大宽度 =[0,最大单位数] = 随机单位数(记得取整)
找到随机位置:随机位置 = 随机单位单位长度 = 随机单位(整数)20
- 数据结构:用二维数组数组代表整个大猫咪:包括坐标和结构
- 设置每个小块div的大小和定位,添加类名
- 直线移动:移动到上一个节点的位置
- 改变方向:x和y + 和 -
- 刷新移动:删掉旧的位置的大猫咪,渲染新的位置的大猫咪
- 只能左右90度转弯:判断位置能否改变:加锁,用布尔变量判断能否改变?
- 改变方向:监听键盘落下的事件
- 一直运动:添加定时器,速度
- 改变大猫咪的图片方向
- 条件:位置一样
- 分数增加,改变html
- 确定新增位置坐标
- 向其中心心队列push新的心心
- 确定大猫咪的定位
- 分别和0,最大值,自身的位置比较:判断是否结束游戏
- 数据回归原始值
- 显示窗口
- 关闭游戏结束窗口
- 点击:开始按钮——开始新游戏,播放按钮——开始新游戏或继续当前游戏,暂停按钮——暂停游戏
- 判断游戏状态:startPaushBool——暂停/开始,startGameBool——新游戏/当前游戏
- 新游戏:开始游戏,改变状态startGameBool,改变状态startPaushBool,开始移动,监听键盘事件,改变图标。
- 继续游戏:改变状态startPaushBool,开始移动,监听键盘事件,改变图标。
- 暂停游戏:改变图标,停止键盘监听,停止移动,改变startPaushBool状态