使用Vue实现简易推箱子小游戏

经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况。此次让我们做一个简易的推箱子,以此来回忆童年。

下面为效果图

 添加css样式,设置背景。

 使用多个选择器容器控制最外面大盒子,小箱子以及墙。

 编写script代码,创建Vue实例绑定app容器使用。

<script>
        var vm = new Vue({
                    el: "#app",
                    data: {
                        top: 0,
                        left: 0
                    },
                    methods: {
                        move(event) {
                            console.log(this.top);
                            console.log(this.left);
                            switch (event.keyCode) {
                                case 37:
                                    if (this.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Vue 推箱子小游戏的示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>推箱子游戏</title> <style> .box { width: 50px; height: 50px; background-color: #ccc; display: inline-block; position: relative; } .player { width: 50px; height: 50px; background-color: #f00; position: absolute; top: 0; left: 0; } .target { width: 50px; height: 50px; background-color: #0f0; position: absolute; top: 0; left: 0; } </style> </head> <body> <div id="app"> <div v-for="(row, rowIndex) in map" :key="rowIndex"> <div v-for="(col, colIndex) in row" :key="colIndex" :class="{ box: true, target: col === 'T' }"></div> </div> <div class="player" :style="{ top: playerY * 50 + 'px', left: playerX * 50 + 'px' }"></div> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { map: [ ['W', 'W', 'W', 'W', 'W', 'W', 'W'], ['W', ' ', ' ', ' ', 'T', ' ', 'W'], ['W', ' ', ' ', ' ', ' ', ' ', 'W'], ['W', ' ', ' ', ' ', 'B', ' ', 'W'], ['W', ' ', ' ', ' ', ' ', ' ', 'W'], ['W', ' ', ' ', 'P', ' ', ' ', 'W'], ['W', 'W', 'W', 'W', 'W', 'W', 'W'] ], playerX: 3, playerY: 5 }, methods: { move: function (dx, dy) { var x = this.playerX + dx; var y = this.playerY + dy; if (this.map[y][x] === ' ') { this.playerX = x; this.playerY = y; } else if (this.map[y][x] === 'B') { var bx = x + dx; var by = y + dy; if (this.map[by][bx] === ' ') { this.map[y][x] = ' '; this.map[by][bx] = 'B'; this.playerX = x; this.playerY = y; } } } }, mounted: function () { window.addEventListener('keydown', function (event) { if (event.keyCode === 37) { app.move(-1, 0); } else if (event.keyCode === 38) { app.move(0, -1); } else if (event.keyCode === 39) { app.move(1, 0); } else if (event.keyCode === 40) { app.move(0, 1); } }); } }); </script> </body> </html> ``` 这个页面包含一个 Vue 实例,它将一个数据对象 `{ map: [], playerX: 3, playerY: 5 }` 绑定到一个 HTML 模板中。`map` 数组表示游戏地图,其中 `W` 表示墙壁,`T` 表示目标,`B` 表示箱子,`空格` 表示空地。`playerX` 和 `playerY` 表示玩家的位置。模板中使用 `v-for` 指令来循环遍历 `map` 数组,生成游戏地图。`v-bind` 指令和 `:class` 绑定一个 CSS 类来显示地图块的背景颜色及目标的位置。页面还包含一个红色的玩家块,它通过 `playerX` 和 `playerY` 数据的值来控制位置。页面使用 `window.addEventListener` 监听键盘事件,并调用 `move` 方法来移动玩家。`move` 方法根据移动的方向,计算出新的位置,并判断该位置是否可以移动,或者是否需要移动箱子。如果可以移动,则更新 `playerX` 和 `playerY` 的值。如果需要移动箱子,则同时更新 `map` 数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值