nodebook/20191201/20191201.md
2019-12-08 10:19:10 +08:00

52 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 20191201
![js](https://img.shields.io/badge/language-js-orange.svg)
```js
// 整体思想一个数除一个数就能分成商和余数两部分用商和余数分别存储x和y的坐标
let map_width = 400
let map_height = 400
let ele_width = 20
let ele_height = 20
// 随机生成坐标,以x坐标为基准 ~~在此处相当于parseInt
// 横向能放几个格子
let x_unit = map_width / ele_width
// 纵向能放几个格子
let y_unit = map_height / ele_height
// 生成x坐标也就是余数 [0, x_unit)
ele_seat_x = ~~(Math.random() * x_unit)
// 生成y坐标也就是商 [0, y_unit) 被除数就是 x_unit 就放大至 [0, y_unit * x_unit)
ele_seat_y = ~~(Math.random() * y_unit) * x_unit
// ele_seat 就是完整的坐标,[0, y_unit * x_unit - 1)
ele_seat = ele_seat_x + ele_seat_y
// 逆向解析成单独的 x坐标像素和 y坐标像素
let x = ele_seat % x_unit * ele_width
let y = ~~(ele_seat / x_unit) * ele_height
// 正向生成一个坐标上边那一大堆其实都是分析hhhh
let seat = ~~(Math.random() * y_unit * x_unit)
// 这样生成的坐标进行位置改变的时候也很简单
// 上下 -+ x_unit 左右 -+ 1
// 这样判断会不会和自身相撞只需要进行蛇身的Array.indexOf(新蛇头坐标)看看是不是得-1就ok
// 这样把蛇身图片和蛇的坐标分来为两个数组进行维护超级香
// 判断撞墙
// 上墙壁 seat < 0
// 下墙壁 seat >= y_unit * x_unit
// 左墙壁 方向向左 且 计算蛇头位置 seat % x_unit == x_unit - 1
// 右墙壁 方向向右 且 计算蛇头位置 seat % x_unit == 0
// 蛇身体坐标数组
let snake = [1, 0]
// 方向
let direction = 1 //1表示向右-1表示向左20表示向下-20表示向上
// 蛇头下一步位置,顺手放进数组
snake.unshift(seat = snake[0] + direction);
// 判断撞到自己或者撞到墙壁
if(snake.indexOf(seat, 1) > 0 || seat < 0 || seat > y_unit * x_unit || direction == 1 && seat % x_unit == 0 || direction == -1 && seat % x_unit == x_unit - 1) {
// 游戏结束的系列操作
}
```