section2_3following
マウスオーバーでテトリミノ描画。
いよいよ画面更新、テトリミノがマウスについてくる。
ハンコ屋は廃業した、バンドで食っていこうね。
section2_3following.js
const canvas = document.getElementById(('myCanvas'))
const context = canvas.getContext('2d')
var currentTetrimino = []
const nextNumber = 3
var blockSize = 32
class Tetrimino{
constructor(shape, color){
this.shape = shape
this.color = color
}
}
const T = new Tetrimino([
[0, 0, 0],
[1, 1, 1],
[0, 1, 0]
], '#0ff')
const J = new Tetrimino([
[0, 0, 0],
[1, 1, 1],
[0, 0, 1]
], '#00f')
const L = new Tetrimino([
[0, 0, 0],
[1, 1, 1],
[1, 0, 0]
], '#f60')
const Z = new Tetrimino([
[0, 0, 0],
[1, 1, 0],
[0, 1, 1]
], '#0f0')
const S = new Tetrimino([
[0, 0, 0],
[0, 1, 1],
[1, 1, 0]
], '#f0f')
const I = new Tetrimino([
[0, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]
], '#f00')
const O = new Tetrimino([
[1, 1],
[1, 1]
], '#ff0')
makeArray = [T, J, L, Z, S, I, O]
function shuffle(arr){
for (var i = arr.length - 1; i > 0; i--){
var r = Math.floor(Math.random() * (i + 1))
var tmp = arr[i]
arr[i] = arr[r]
arr[r] = tmp
}
return arr
}
var x = y = 0
function makeTetrimino(){
Array.prototype.push.apply(currentTetrimino, shuffle(makeArray))
}
function drawTetrimino(arr){
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
if (arr[i][j] === 1) {
context.fillStyle = currentTetrimino[0].color
context.fillRect(x + j * blockSize, y + i * blockSize, blockSize, blockSize)
}
}
}
}
function onDown(e) {}
function onClick(e) {
currentTetrimino.shift()
console.log('length:' + currentTetrimino.length)
console.log('next:')
for (let i = 0; i < currentTetrimino[0].shape.length; i++){
console.log(currentTetrimino[0].shape[i])
}
}
var isMouseOver = false
function onMouseOver(e) {
isMouseOver = true
}
function onMouseMove(e){
x = e.clientX - canvas.offsetLeft
y = e.clientY - canvas.offsetTop
}
function onMouseOut() {
isMouseOver = false
console.log('1')
}
function draw(){
context.clearRect(0, 0, canvas.width, canvas.height)
if (isMouseOver) {
if (currentTetrimino.length < nextNumber) {
makeTetrimino()
}
drawTetrimino(currentTetrimino[0].shape)
}
requestAnimationFrame(draw)
}
draw();
canvas.addEventListener('mousedown', onDown, false)
canvas.addEventListener('click', onClick, false)
canvas.addEventListener('mouseover', onMouseOver, false)
canvas.addEventListener('mousemove', onMouseMove, false)
canvas.addEventListener('mouseout', onMouseOut, false)雑記その1
コメントアウトとか、デバッグ用で無駄にconsole.log()とかが出てくるのはご愛嬌。
本スジとは関係ないけど、動作確認には必要なことだから仕方ないよね。
あとスコープとか命名規則とか、気づいたときにリファクタリングしてるからぐちゃぐちゃ。
不等式の条件文苦手。
左に小さいほう、右に大きいのって置いて、<しか使わないようにしてる。
不等号は「<」よりも「>」のほうが難しい。ココロの数直線かー。
右は右だし、右の反対で左を相対的に覚えられるわけじゃないから、
東西とか、絶対的に染み付いてるものの反対ってなるとダメになる。
UTF-8 BOMとか、そこら辺。
プログラミングしてると、どんどん頭がコンピュータ寄りになっていく。
2019年とか、
一回桁数をバッファしてから左にいって読み直す。
4桁だからいいけどさ、
20190501123456
読めない、時刻はSIあるけどね。
おかしなことを、平気でやっているんだ、この世の中は。