天天看点

别踩白块儿游戏代码html,别踩白块儿.html · 知足常乐大哥哥/not-step-on-white-block - Gitee.com...

Document

#score {

position: absolute;

top: 450px;

left: 100px;

font-size: 30px;

}

得分: 0

var canvas = document.createElement('canvas')

var ctx = canvas.getContext('2d')

// 水印canvas

var canvas2 = document.createElement('canvas')

var ctx2 = canvas2.getContext('2d')

// 定义变量

var w = 100

var blocks = []

var flag = false

var speed = 2

var num = 0

var requestId = 0

canvas.width = 100 * 3

canvas.height = 100 * 4

canvas.style.border = '5px solid black'

canvas2.width = 100 * 3

canvas2.height = 100 * 4

canvas2.style.border = '5px solid black'

canvas2.style.position = 'absolute'

canvas2.style.left = '9px'

canvas2.style.top = '9px'

document.body.appendChild(canvas)

document.body.appendChild(canvas2)

// 计分栏

var score = document.querySelector('#score')

draw_line()

ready_game()

// 游戏结束

function game_over() {

alert('游戏结束,请重新开始!')

ready_game()

}

// 动画

function animate() {

ctx.clearRect(0, 0, canvas.width, canvas.height)

ctx.fillStyle = 'black'

blocks.forEach(function (val, index) {

ctx.fillRect(val.x, val.y += speed, w, w)

// if (val.y > canvas.height) {

// blocks.splice(index, 1)

// }

})

if (blocks.length === 0) {

ctx.fillStyle = 'black'

var x = ~~(Math.random() * 3) * w

var obj = { x: x, y: -100 }

ctx.fillRect(obj.x, obj.y, w, w)

blocks.unshift(obj)

addClick_event(obj)

}

if (blocks[0].y > 0) {

ctx.fillStyle = 'black'

var x = ~~(Math.random() * 3) * w

var obj = { x: x, y: -100 }

ctx.fillRect(obj.x, obj.y, w, w)

blocks.unshift(obj)

addClick_event(obj)

}

speed = num / 10 + 2

requestId = requestAnimationFrame(animate)

if (blocks[blocks.length - 1].y >= canvas.height) {

// 结束动画

cancelAnimationFrame(requestId)

game_over()

}

}

// 开始游戏

function start_game() {

blocks.pop()

num++

score.textContent = '得分: ' + num

flag = true

animate()

}

// 方块移动

function destroy_block(e) {

if (!flag) return

var cli_x = e.x, cli_y = e.y

blocks.forEach(function (val, index) {

if (cli_x > val.x && cli_x < val.x + w && cli_y > val.y && cli_y < val.y + w) {

if (index === blocks.length - 1) {

blocks.pop()

num++

score.textContent = '得分: ' + num

}

}

})

}

// 在指定位置添加click事件

function addClick_event(obj) {

canvas2.addEventListener('click', function (e) {

var cli_x = e.x - 10

var cli_y = e.y - 10

if (cli_x > obj.x && cli_x < obj.x + w && cli_y > obj.y && cli_y < obj.y + w && obj.flag && !flag) {

start_game()

} else destroy_block(e)

})

}

// 准备开始游戏

function ready_game() {

blocks = []

flag = false

speed = 2

num = 0

ctx.clearRect(0, 0, canvas.width, canvas.height)

score.textContent = '得分: ' + num

ctx.fillStyle = 'black'

var x = 0

for (var i = 0; i < canvas.height; i += w) {

x = ~~(Math.random() * 3) * w

var obj = { x: x, y: i }

ctx.fillRect(x, i, w, w)

if (i == 300) {

ctx.fillStyle = 'white'

ctx.font = '20px consolas'

ctx.fillText('开始游戏', x + 10, i + w / 2)

obj.flag = true

}

addClick_event(obj)

blocks.push(obj)

}

}

// 划线

function draw_line() {

ctx.strokeStyle = 'black'

for (var i = w; i < canvas.height; i += w) {

ctx.moveTo(0, i)

ctx.lineTo(canvas.width, i)

ctx.stroke()

}

for (var i = w; i < canvas.width; i += w) {

ctx.moveTo(i, 0)

ctx.lineTo(i, canvas.height)

ctx.stroke()

}

ctx2.drawImage(canvas, 0, 0, canvas.width, canvas.height)

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史