LoginSignup
0
0

More than 1 year has passed since last update.

Reactでテトリスをつくる④_落下で衝突判定

Last updated at Posted at 2021-06-06

ミノの一秒置きの描画位置保持を廃止。X座標とY座標で管理する

tetris.jsx
export const Tetris = () => {
    const [disp, setDisp] = useState(Base)
  //ミノの一秒置きの描画位置保持を廃止。X座標とY座標で管理する
    const [X, setX] = useState(4)
    const [Y, setY] = useState(0)
    const [base, setBase] = useState(disp)

落下の衝突判定

tetris.jsx
/*
衝突判定
@a [][] 判定対象
@b [][] 判定対象
*/
const checkCrush=(a, b)=>{
    let check = false
    for(let i = 0; i < a.length; i++) {
        if(!b[i]) break
        for(let j = 0; j < a[i].length; j++) {
            check = (a[i][j] > 0 && b[i][j] > 0 ) ? true : false
            if(check) return check
        }
    }
    return check
}
tetris.jsx
    useEffect(()=>{
        minoT.reset()
    },[])
    useEffect(()=>{
        setDisp(merge(base, minoT.val2(X, Y)))
        let timeout = setTimeout(() => {
            setY(Y+1)
        },1000)
        if(checkCrush(base, minoT.val2(X, Y))) {
            clearTimeout(timeout)
            setBase(merge(base, minoT.val2(X, Y)))
            minoT.reset()
            setY(0)
        }
    }, [X, Y])
    return (<Display disp={disp}/>)
}

キャプチャ11.PNG

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0