移动软件开发 实验6:推箱子游戏
一、实验目标
1、综合所学知识创建完整的推箱子游戏;
2、能够在开发过程中熟练掌握真机预览、调试等操作。
二、实验步骤
(一)创建页面文件
在pages文件夹中创建index,game页面。
(二)创建images、utils文件夹
将图片保存在images文件夹中,在utils中添加data.js
(三)导航栏设计
1 | { |
(四)页面设计
1、公共样式设计
1 | .container{ |
2、首页设计
1 | <view class="container"> |
1 | /* pages/index/index.wxss */ |
3、游戏页面设计
需要用户点击首页的关卡,并在新窗口打开该页面。由于暂时没有做点击跳转的逻辑,所以在开发工具顶端选择普通编译-添加编译模式,携带临时测试参数level=0

1 | <!--pages/game/game.wxml--> |
1 | /* pages/game/game.wxss */ |
(五)逻辑实现
1、公共逻辑
地图数据:以二维数组形式存放。每个位置的数字代表对应的图标素材。
1 | // 1为墙,2为路,3为终点,4为箱子,5为任务,0为墙的外围 |
使用module.exports暴露数据接口
1 | module.exports = { |
在game页面的JS文件顶端引用公共JS文件
1 | var data = require('../../utils/data') |
2、首页逻辑
(1)关卡列表展示
在首页的js文件中添加关卡图片的信息
1 | data: { |
使用循环展示关卡列表数据和图片
1 | <view class="container"> |
(2)点击跳转游戏页面
为关卡图片绑定点击事件,并在对应的index.js中添加chooseLevel函数的内容
1 | <view class="container"> |
1 | chooseLevel:function(e){ |
3、游戏页逻辑
(1)显示当前第几关
游戏页面接收首页跳转时携带的关卡信息,并显示对应的图片内容。
1 | data: { |
1 | <view class="title">第 {{level}} 关</view> |
(2)游戏逻辑实现
游戏初始信息:
1 | var map = [ |
初始化游戏画面:
根据当前是第几关读取对应的游戏地图信息,并更新到游戏初始数据中。
1 | initMap: function(level){ |
先从公共函数文件data.js中读取对应关卡的游戏地图数据,然后使用循环对每一块地图数据进行解析,并更新当前游戏的初始地图数据、箱子数据以及玩家所在位置。
然后在game.js中添加自定义函数drawCanvas,用于将地图信息绘制到画布上。
1 | drawCanvas:function(){ |
在game.js的onLoad函数中创建画布上下文,并依次调用自定义函数initMap和drawCanvas。
1 | onLoad(options) { |
(3)方向键逻辑实现
为方向键绑定点击事件:
1 | <view class="btnBox"> |
分别实现上下左右的移动:
1 | up:function(){ |
(4)判断游戏是否成功
1 | isWin:function(){ |
游戏成功处理:一旦成功就弹出提示对话框
1 | checkWin:function(){ |
添加游戏是否成功判断:
(5)重新开始游戏
给重新开始按钮绑定restartGame函数
game.js中添加对应函数
1 | restartGame:function(){ |
三、程序运行结果

四、问题总结与体会
本次实验我通过推箱子游戏的制作掌握了真机预览、调试的方法,学习了用二维数组存储地图,以及上下左右移动的方法。其中遇到上下左右按钮调试时无法使用的问题,输给ai进行排查,发现是有两个按钮的if条件判断中的条件在复制后没有对应方向的修改。ai在用于代码纠错时可以快速地帮助我们定位存在的问题。