如何用canvas实现俄罗斯方块

我的游戏系列

技术比较菜,用了要600多行代码完成,内容涉及完完全全只有canvas

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body style="margin: 0;">
    <canvas id="tetris" style="border: 1px solid #000;"></canvas>
    <div id="text" style='color: red;font-size: 30px;'>当前分数:0</div>
</body>
<script>
    let cav = document.getElementById('tetris')
    let text = document.getElementById('text')
    let ctx = cav.getContext('2d')
    let k = 40 //倍数
    let speed = 1000
    let grade = 0
    let restartFlag = false
    let timer = null
    let curGraphPositionList = []
    let curtype = undefined
    let transformNum = 0
    let blockGraph = Array(10)
    let beforeUpdateGraph = []
    for(let i = 0;i<blockGraph.length;i++){
    
        blockGraph[i] = Array(20)
    }
    cav.width = 10*k 
    cav.height = 20*k
    ctx.fillStyle="yellow"
    ctx.strokeStyle="black"
    function ramdomRectType(){
    
        return Math.floor((Math.random()*7)+1)
    }
    function randomXposition(){
    
        return Math.floor(Math.random()*10)
    }
    function drawRect(position,width){
    
        ctx.beginPath()
        ctx.rect(position[0],position[1],width,width)
        ctx.fill();
        ctx.stroke()
    }
    function drawGraph(positionList){
    
        if(positionList.length===0){
    
            return
        }
        for(let item of positionList){
    
           let x= item[0]*k
           let y= item[1]*k
           let position = [x,y]
           drawRect(position,k)
        }
    }
    function isOut(position,xOry){
    //x:0,y:1
        if(xOry===0){
    
            if(position<0||position>9){
    
                return true
            }else{
    
                return false
            }
        }else{
    
            if(position<0||position>19){
    
                return true
            }else{
    
                return false
            }
        }
    }
    function randomRectShape(){
    
        let rposition = randomXposition()
        let type = ramdomRectType()
        curtype = type
        transformNum = 0
        let positionList = []
        let one = []
        let two = []
        let three = []
        let four = []
        switch(type){
    
            case 1:
                if(isOut(rposition+2,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition+2,0]
                    two = [rposition,1]
                    three = [rposition+1,1]
                    four = [rposition+2,1]
                }
                break;
            case 2:
                if(isOut(rposition+2,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition,0]
                    two = [rposition,1]
                    three = [rposition+1,1]
                    four = [rposition+2,1]
                }
                break;
            case 3:
                if(isOut(rposition+2,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition+1,0]
                    two = [rposition+2,0]
                    three = [rposition,1]
                    four = [rposition+1,1]
                }
                break;
            case 4:
                if(isOut(rposition+2,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition,0]
                    two = [rposition+1,0]
                    three = [rposition+1,1]
                    four = [rposition+2,1]
                }
                break;
            case 5:
                if(isOut(rposition+2,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition+1,0]
                    two = [rposition,1]
                    three = [rposition+1,1]
                    four = [rposition+2,1]
                }
                break;
            case 6:
                if(isOut(rposition+1,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition,0]
                    two = [rposition+1,0]
                    three = [rposition,1]
                    four = [rposition+1,1]
                }
                break;
            case 7:
                if(isOut(rposition+3,0)){
    
                    return randomRectShape()
                }else{
    
                    one = [rposition,0]
                    two = [rposition+1,0]
                    three = [rposition+2,0
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值