[从零开始]使用Vue.js制作俄罗斯方块小游戏(四)ui实现

STEP ONE:设计游戏规则。

作为一个合格的游戏,我们肯定要设计一个合理的游戏规则。

以下是我的方案:

得分=已固定的方块数*1+已消除的行数*50

方块掉落速度=1+已消除的行数*0.05

方块下落的时间间隔=500/方块掉落速度

ok!

STEP TWO:ui实现。

这一步我们放在Index.vue里实现。

// 当一个方块固定
    squareOk () {
      this.data.cur_points++
      if (this.data.cur_points > this.data.max_points) {
        this.data.max_points = this.data.cur_points
      }
    },
    // 当一行被消除
    lineOk () {
      this.data.cur_points += 50
      if (this.data.cur_points > this.data.max_points) {
        this.data.max_points = this.data.cur_points
      }
      this.data.speed += 0.05
      clearInterval(this.timer)
      this.timer = setInterval(() => this.next(), 500 / this.data.speed)// 把他放在computed里更好。
    }

我们先实现以上两个方法,然后就可以调用他们了。

TIP:

问:如何在子组件里调用父组件?

答:在子组件里使用this.$parent.方法名即可。

如下:

next里添this.squareOk()

next () { // 方块下移
      if (this.$refs.gameCanvas.moveDown()) {
        // 判断是否触顶
        for (let i = 0; i < this.$refs.gameCanvas.currentFall.length; i++) {
          if (this.$refs.gameCanvas.currentFall[i].y === 0) {
            // gameEnd()
            console.log(‘game end‘)
            return
          }
        }
        // 新的block
        this.$refs.gameCanvas.createBlock()
        this.squareOk()
      }
    }

GameCanvas里的moveDown()添加this.$parent.lineOk()

moveDown () {
      for (let i = 0; i < this.currentFall.length; i++) {
        if (this.currentFall[i].y >= this.TETRIS_ROWS - 1 || this.tetris_status[this.currentFall[i].y + 1][this.currentFall[i].x] !== this.NO_BLOCK) {
          // 记录block
          for (let i = 0; i < this.currentFall.length; i++) {
            this.tetris_status[this.currentFall[i].y][this.currentFall[i].x] = this.HAVE_BLOCK
          }
          // 判断有没有满行的
          for (let j = 0; j < this.currentFall.length; j++) {
            for (let i = 0; i < this.TETRIS_COLS; i++) {
              if (this.tetris_status[this.currentFall[j].y][i] === this.NO_BLOCK) {
                break
              }
              // 最后一行满了
              if (i === this.TETRIS_COLS - 1) {
                // 消除最后一行
                for (let i = this.currentFall[j].y; i > 0; i--) {
                  for (let j = 0; j < this.TETRIS_COLS; j++) {
                    this.tetris_status[i][j] = this.tetris_status[i - 1][j]
                  }
                }
                // 加分
                this.$parent.lineOk()
              }
            }
          }
          return true
        }
      }
      for (let i = 0; i < this.currentFall.length; i++) {
        this.currentFall[i].y += 1
      }
      this.drawBlocks()
      return false
    }

最后修改我们的html代码

<template>
  <div id="container" class="bg">
        <!--ui-->
        <div id="ui_bg" class="ui_bg">
            <div style="float:left;margin-right:4px;">
                <!--保留一位小数-->
                速度:<span>{{ data.speed.toFixed(1) }}</span>
            </div>
            <div style="float:left;">
                当前分数:<span>{{ data.cur_points }}</span>
            </div>
            <div style="float:right;">
                最高分数:<span>{{ data.max_points }}</span>
            </div>
        </div>
        <game-canvas ref="gameCanvas"></game-canvas>
    </div>
</template>

然后,如图。

代码可能后来修改了一下,具体以github的版本为准。

原文地址:https://www.cnblogs.com/zyyz1126/p/12263028.html

时间: 2024-10-07 05:15:25

[从零开始]使用Vue.js制作俄罗斯方块小游戏(四)ui实现的相关文章

[从零开始]使用Vue.js制作俄罗斯方块小游戏(一)创建项目

一.创建项目 开发环境:win10 开发的前置操作:安装npm. 首先在命令行里进入一个文件夹A,然后输入vue init webpack tetris tetris是文件夹的名字,可以随便定义,但不能有大写字母 接下来全部按回车就好. 接下来,我们进入tetris,并运行 cd tetris npm run dev 就会出现这样一个界面. 然后我们根据提示打开浏览器,在地址栏输入http://localhost:8080 就会出现如下界面. 这样我们的项目就搭建好了! 原文地址:https:/

C语言俄罗斯方块小游戏练习

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

js选择颜色小游戏(随机生成不含重复数字的数组,通过数组中的数控制定义好的数组)

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>js网页版小游戏</title> <style media="screen"> .wrap { width: 577px; outline: 1px solid hotpink; margin: 100px auto; box-shadow: 0 0 5px; } .

使用AxureRP7.0制作经典小游戏"大家来找茬"

本案例是<网站蓝图AxureRP7.0从入门到精通视频教程>中的最后一节,适用于对Axure基础知识掌握比较熟练的同学:教程由axure原型库网站录制,转载请注明出处!相信很多刚接触Axure或者学习了一段时间但并没有深入的同学们,看到这个案例一定很惊讶,使用Axure竟然能做出如此逼真的交互效果!通过此案例也可以激发广大同学们学习Axure的热情和信心!试想一下,如果你有情侣的话,把你们珍藏的合影拿出来处理几张,做成大家来找茬的小游戏,不但锻炼了自己的技能,还能给对方一个惊喜,岂不是一举两得

Vue.js 和 MVVM 小细节

Vue.js 和 MVVM 小细节 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定. Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于View 层.它的核心是 MVVM 中的 VM,也就是 ViewModel. ViewModel负责连接 View 和 Mode

原生js打飞机小游戏

最近为了巩固一下原生的知识,然后拿了一个js小游戏来入手.主要也是为了学习和练手. js代码如下: 1 window.onload = function(){ 2 var oBtn = document.getElementById('gameBtn'); 3 oBtn.onclick = function(){ 4 this.style.display = 'none'; 5 Game.init('div1');//把父级传进去 6 }; 7 }; 8 //创建Game单体 9 10 var

java swing开发短小精悍的俄罗斯方块小游戏源代码下载,仅300行代码

原文:java swing开发短小精悍的俄罗斯方块小游戏源代码下载,仅300行代码 源代码下载地址:http://www.zuidaima.com/share/1550463495146496.htm java swing开发短小精悍的俄罗斯方块小游戏源代码下载,仅300行代码, 很久以前找到的一个Swing实现的俄罗斯方块,短线精悍,算法值得一看 经验证代码可用,确实短小精悍,值得下载. package com.zuidaima.swing.game; import java.awt.*; i

MPVUE - 使用vue.js开发微信小程序

MPVUE - 使用vue.js开发微信小程序 什么是mpvue? mpvue 是美团点评前端团队开源的一款使用 Vue.js 开发微信小程序的前端框架.框架提供了完整的 Vue.js 开发体验,开发者编写 Vue.js 代码,mpvue 将其解析转换为小程序并确保其正确运行. 简单上手mpvue 官方提供了一套quickstart模板. vue init mpvue/mpvue-quickstart my-project 安装好依赖之后,执行npm run dev,将会将小程序文件打包进dis

使用JS实现2048小游戏

JS实现2048小游戏源码 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器.) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name=&