zoukankan      html  css  js  c++  java
  • 使用vue+ivew做2048小游戏

    首先先弄页面 废话不多说 上代码

    静态页面代码

    <template>
        <div class="main">
            <div class="top">
                <Button type="primary" @click="refresh()">重玩</Button>
                <span style="font-size: 20px;margin-left: 10px;color: red">分数:{{conunta}}</span>
            </div>
    
            <div class="jiu">
                <div class="grid-cell" id="grid-cell-0-0">
                    <div class="cell" v-if="a00">{{a00}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-0-1">
                    <div class="cell" v-if="a01">{{a01}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-0-2">
                    <div class="cell" v-if="a02">{{a02}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-0-3">
                    <div class="cell" v-if="a03">{{a03}}</div>
                </div>
    
                <div class="grid-cell" id="grid-cell-1-0">
                    <div class="cell" v-if="a10">{{a10}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-1-1">
                    <div class="cell" v-if="a11">{{a11}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-1-2">
                    <div class="cell" v-if="a12">{{a12}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-1-3">
                    <div class="cell" v-if="a13">{{a13}}</div>
                </div>
    
                <div class="grid-cell" id="grid-cell-2-0">
                    <div class="cell" v-if="a20">{{a20}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-2-1">
                    <div class="cell" v-if="a21">{{a21}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-2-2">
                    <div class="cell" v-if="a22">{{a22}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-2-3">
                    <div class="cell" v-if="a23">{{a23}}</div>
                </div>
    
                <div class="grid-cell" id="grid-cell-3-0">
                    <div class="cell" v-if="a30">{{a30}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-3-1">
                    <div class="cell" v-if="a31">{{a31}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-3-2">
                    <div class="cell" v-if="a32">{{a32}}</div>
                </div>
                <div class="grid-cell" id="grid-cell-3-3">
                    <div class="cell" v-if="a33">{{a33}}</div>
                </div>
            </div>
        </div>
    </template>
    View Code

    然后css

    .main {
      background: white;
      margin-top: 200px;
    }
    .top {
      margin: 10px;
    }
    .jiu {
      background: #ecdede;
      width: 500px;
      height: 500px;
      margin: auto;
      /* top: 100px; */
    
      padding: 10px;
    }
    .grid-cell {
      width: 100px;
      height: 100px;
      margin: 10px;
      background: #c3bcae;
      float: left;
      border-radius: 15%;
    }
    .cell {
      line-height: 100px;
      background: coral;
      border-radius: 15%;
      font-size: 50px;
      color: white;
      font-weight: bold;
    }
    game.vue

     最后核心代码

    export default {
        name: 'Game',
        data() {
            return {
                arryList: [2,4,8,16,32,64,128,256,512,1024,2048],
                timeInterval: true,
                a00: "",a01: "",a02: "",a03: "",a10: "",a11: "",a12: "",a13: "",a20: "",a21: "",a22: "",
                a23: "",a30: "",a31: "",a32: "",a33: ""
            }
        },
        computed: {
            conunta: function() {//记录总分数
    
                var aa=(this.a00==""? 0:parseInt(this.a00))+(this.a01==""? 0:parseInt(this.a01))+(this.a02==""? 0:parseInt(this.a02))+(this.a03==""? 0:parseInt(this.a03))+
                    (this.a10==""? 0:parseInt(this.a10))+(this.a11==""? 0:parseInt(this.a11))+(this.a12==""? 0:parseInt(this.a12))+(this.a13==""? 0:parseInt(this.a13))+
                    (this.a20==""? 0:parseInt(this.a20))+(this.a21==""? 0:parseInt(this.a21))+(this.a22==""? 0:parseInt(this.a22))+(this.a23==""? 0:parseInt(this.a23))+
                    (this.a30==""? 0:parseInt(this.a30))+(this.a31==""? 0:parseInt(this.a31))+(this.a32==""? 0:parseInt(this.a32))+(this.a33==""? 0:parseInt(this.a33))
                    ;
                return aa;
            }
        },
        methods: {
            generate() {//随机生成一个2或4的格子
                let c3=(Math.random()*3).toFixed(0);
                let c4=(Math.random()*3).toFixed(0);
                let random=Math.random().toFixed(1);
                // let b=this.isEnd();
                if(this["a"+c3+c4]) {
                    this.generate();
                } else {
                    this["a"+c3+c4]=this.arryList[random>0.6? 1:0];
                }
            },
            isEnd() {//判断是否存在空的格子
                let b=false;
                for(let i=0;i<4;i++) {
                    for(let j=0;j<4;j++) {
                        if(this["a"+i+j]=="") {
                            b=true;
                        }
                    }
                }
                return b;
            },
            refresh() {//刷新重玩
                for(let i=0;i<4;i++) {
                    for(let j=0;j<4;j++) {
                        this["a"+i+j]="";
                    }
                }
                let c1=(Math.random()*3).toFixed(0);
                let c2=(Math.random()*3).toFixed(0);
                let random=Math.random().toFixed(1);;
                this["a"+c1+c2]=this.arryList[random>0.6? 1:0];
                this.generate();
            },
            time() {//做限制 防止快速连击
                this.timeInterval=false;
                let logintimeOut=setInterval(() => {
                    this.timeInterval=true;
                    clearInterval(logintimeOut);
                },1000*0.2);
            },
            reghtUp() {//点击右键事件
                let b=false;
                if(this.isEnd()) {
                    for(let i=0;i<4;i++) {
                        for(let j=2;j>-1;j--) {
                            for(let k=3;k>j;k--) {//k为落子点坐标
                                if(this["a"+i+j]) {//如果要跳转的格子为空 那就跳过
                                    if(this["a"+i+k]==""&&this.noBlockHorizontal(i,j,k)) {//如果落子点为空的格子并且中间没障碍物则可落子
                                        this.time();
                                        b=true;
                                        this["a"+i+k]=this["a"+i+j];//格子赋值
                                        this["a"+i+j]="";
                                    } else if(this["a"+i+k]==this["a"+i+j]&&this.noBlockHorizontal(i,j,k)) {
                                        this.time();
                                        b=true;
                                        let a=parseInt(this["a"+i+k])+parseInt(this["a"+i+j]);
                                        this["a"+i+k]=a;
                                        this["a"+i+j]="";
                                    }
                                }
                            }
                        }
    
                    }
                } else {
                    this.$Message.warning("游戏结束您的分数是:"+this.conunta);
                }
            },
            bottomUp() {
                let b=false;
                if(this.isEnd()) {
                    for(let i=0;i<4;i++) {//i为x轴j为y轴
                        for(let j=2;j>-1;j--) {//从第二排开始
                            for(let k=3;k>j;k--) {
                                if(this["a"+j+i]) {
                                    if(this["a"+k+i]==""&&this.toBlockHorizontal(i,j,k)) {//判断
                                        this.time();
                                        b=true;
                                        this["a"+k+i]=this["a"+j+i];
                                        this["a"+j+i]="";
                                    } else if(this["a"+k+i]==this["a"+j+i]&&this.toBlockHorizontal(i,j,k)) {
                                        this.time();
                                        b=true;
                                        let a=parseInt(this["a"+k+i])+parseInt(this["a"+j+i]);
                                        this["a"+k+i]=a;
                                        this["a"+j+i]="";
                                    }
                                }
                            }
                        }
                    }
                } else {
                    this.$Message.warning("游戏结束您的分数是:"+this.conunta);
                }
                return b;
            },
            topUp() {
                let b=false;
                if(this.isEnd()) {
                    for(let i=0;i<4;i++) {//i为x轴j为y轴
                        for(let j=1;j<4;j++) {//从第二排开始
                            for(let k=0;k<j;k++) {
                                if(this["a"+j+i]) {
                                    if(this["a"+k+i]==""&&this.toBlockHorizontal(i,k,j)) {//判断
                                        this.time();
                                        b=true;
                                        this["a"+k+i]=this["a"+j+i];
                                        this["a"+j+i]="";
                                    } else if(this["a"+k+i]==this["a"+j+i]&&this.toBlockHorizontal(i,k,j)) {
                                        this.time();
                                        b=true;
                                        let a=parseInt(this["a"+k+i])+parseInt(this["a"+j+i]);
                                        this["a"+k+i]=a;
                                        this["a"+j+i]="";
                                    }
                                }
                            }
                        }
                    }
                } else {
                    this.$Message.warning("游戏结束您的分数是:"+this.conunta);
                }
                return b;
            },
            leftUp() {
                let b=false;
                if(this.isEnd()) {
                    for(let i=0;i<4;i++) {
                        for(let j=1;j<4;j++) {
                            for(let k=0;k<j;k++) {
                                if(this["a"+i+j]) {
                                    if(this["a"+i+k]==""&&this.noBlockHorizontal(i,k,j)) {//判断
                                        this.time();
                                        b=true;
                                        this["a"+i+k]=this["a"+i+j];
                                        this["a"+i+j]="";
                                    } else if(this["a"+i+k]==this["a"+i+j]&&this.noBlockHorizontal(i,k,j)) {
                                        this.time();
                                        b=true;
                                        let a=parseInt(this["a"+i+k])+parseInt(this["a"+i+j]);
                                        this["a"+i+k]=a;
                                        this["a"+i+j]="";
                                    }
                                }
                            }
                        }
    
                    }
                } else {
                    this.$Message.warning("游戏结束您的分数是:"+this.conunta);
                }
                return b;
            },
            monitor(_this) {
                window.onkeydown=function(e) {//监听键盘事件
                    console.log(e.keyCode);
                    if(_this.timeInterval) {
                        switch(e.keyCode) {
                            case 37:
                                if(_this.leftUp()) {//移动之后新生成一个格子
                                    _this.generate();
                                }
                                break;
                            case 38:
                                if(_this.topUp()) {
                                    _this.generate();
                                }
                                break;
                            case 39:
                                if(_this.reghtUp()) {
                                    _this.generate();
                                }
                                break;
                            case 40:
                                if(_this.bottomUp()) {
                                    _this.generate();
                                }
                                break;
    
                        }
                    }
    
                }
            },
    
            noBlockHorizontal(row,col1,col2) {//判断x轴中间是否有障碍物
                for(var i=col1+1;i<col2;i++)
                    if(this["a"+row+i])
                        return false;
                return true;
            },
            toBlockHorizontal(row,col1,col2) {//判断y轴中间是否有障碍物
                for(var i=col1+1;i<col2;i++)
                    if(this["a"+i+row])
                        return false;
                return true;
            }
        },
        mounted() {//初始化随机生成两个格子
            let c1=(Math.random()*3).toFixed(0);
            let c2=(Math.random()*3).toFixed(0);
            let random=Math.random().toFixed(1);;
            this["a"+c1+c2]=this.arryList[random>0.6? 1:0];
            this.generate();
            this.monitor(this);
    
        }
    }
  • 相关阅读:
    Oracle-函数-split 和 splitstr 的创建
    git merge方法
    查看Android 设备进程id
    内存泄漏
    Mac显示隐藏文件快捷键
    gradle版本
    commit单一文件
    21不下发信号
    FileInputStream read函数何时返回-1
    maven turbonet目录
  • 原文地址:https://www.cnblogs.com/shaoniandream/p/9921618.html
Copyright © 2011-2022 走看看