Исходный код: https://github.com/lcp1551/lcpisfat
игровой интерфейс
Инициализируйте игру:
Успех игры:
Идеи и функции:
1. Инициализируйте, сохраните числа от 1 до 8 в массиве, объединив 9 (пустое) после случайного нарушения и измените стиль пустого
2. Нажмите на число, чтобы определить направление пустого пространства относительно его местоположения, и соответственно перемещайтесь вверх, вниз, влево и вправо.
3. Двигайтесь вверх, вниз, влево и вправо и меняйте местами два перемещенных числа в массиве.
4. Определить, являются ли элементы в массиве [1,2,3,4,5,6,7,8,9], если да, то игра успешна,
5. Тайминг, использование таймера, окончание, обнуление таймера
Код:
Данные используемые в проекте:
data: {
num: ['★', '★', '★', '★', '★', '★', '★', '★', '★'], //初始化前
hidden: true, //隐藏空白格中的数字
time:0, //秒数
t:'' //定时器
},
Создайте страницу: index.wxml
<view class="container">
<view class="row" wx:for="{{num}}" wx:for-item="item" wx:for-index="index">
<button class="btn {{item == 9?'active':''}}" catchtap='onMoveTap' data-item="{{item}}" data-index="{{index}}">{{item}}</button>
</view>
</view>
Два фрагмента данных должны быть переданы в прошлом, один из которых является индексом нижнего индекса блока, на который нажали, и номером элемента в блоке.
Добавить стиль активных динамических пустых ячеек [9]
{{item == 9?'active':''}}
Инициализация игры:
init:function(){
this.setData({
num:this.sortArr([1,2,3,4,5,6,7,8]).concat([9])
})
},
При инициализации здесь используется sortArr(arr) для скремблирования массива и объединения пробела [9], так что пробел всегда находится в последней позиции при инициализации.
Перемешайте массив случайным образом:
sortArr: function (arr) {
return arr.sort(function () {
return Math.random() - 0.5
})
}
Здесь используется простейший метод скремблирования, недостатком которого является то, что скремблирование неполное.
Добавьте событие клика onMoveTap к каждому блоку:
onMoveTap: function (e) {
var index = e.currentTarget.dataset.index;
var item = e.currentTarget.dataset.item;
if (this.data.num[index + 3] == 9) {
this.down(e);
}
if (this.data.num[index - 3] == 9) {
this.up(e);
}
if (this.data.num[index + 1] == 9 && index != 2 && index != 5) {
this.right(e);
}
if (this.data.num[index - 1] == 9 && index != 3 & index != 6) {
this.left(e);
} }
Если нижний индекс пустой ячейки на 3 больше, чем таблица ниже щелкнутого блока, это означает, что пустая ячейка находится ниже щелкнутого блока, а затем переместится вниз после щелчка;
Если нижний индекс пустой ячейки на 3 меньше, чем таблица ниже выбранного блока, это означает, что пустая ячейка находится над выбранным блоком, а затем перемещается вверх после щелчка;
Если нижний индекс пустой ячейки на 1 больше, чем таблица ниже кликнутого блока, это означает, что пустая ячейка находится справа от кликнутого блока, затем перемещается вправо после клика, и необходимо учитывать, щелчок находится на правом краю контейнера;
Если нижний индекс пустой ячейки меньше, чем таблица ниже кликнутого блока на 1, это означает, что пустая ячейка находится слева от кликнутого блока, а затем перемещается влево после клика, и необходимо учитывать, щелчок находится на левом краю контейнера;
переехать:
Берите пример с подъема
up: function (e) {
var index = e.currentTarget.dataset.index; //当前数字下标
var temp = this.data.num[index];
this.data.num[index] = this.data.num[index - 3]
this.data.num[index - 3] = temp;
this.setData({
num: this.data.num
})
if (this.data.num.toString() == [1, 2, 3, 4, 5, 6, 7, 8, 9].toString()) {
this.success();
}
}
После перемещения поменяйте местами щелкнутый блок с пустым пространством в массиве и оцените, соответствует ли текущий массив условиям успеха игры, и оцените, равны ли массивы Здесь я конвертирую массив в строку для сравнения.
Успех игры:
success: function () {
var that = this;
wx.showToast({
title: '闯关成功',
icon: 'success',
success: function () {
that.init();
}
})
}
Игра прошла успешно, всплывает интерактивное окно обратной связи, массив инициализируется и перетасовывается
Таймер:
timeCount:function(){
var that = this;
var timer = that.data.time;
that.setData({
t:setInterval(function(){
timer++;
that.setData({
time:timer
})
},1000)
})
}
Начать финальную игру:
timeBegin:function(){
clearInterval(this.data.t);
this.setData({
time:0
})
this.timeCount();
this.init();
},
timeStop:function(){
clearInterval(this.data.t);
if (this.data.num.toString() != [1, 2, 3, 4, 5, 6, 7, 8, 9].toString()) {
this.fail();
}
}
Привяжите событие timeBegin к кнопке запуска, чтобы инициализировать игру.
Привяжите событие timeStop к кнопке завершения, чтобы определить, успешна ли игра.
Попробуйте:
Исходный код:GitHub.com/Li Chengpeng1551/Ли Ченгпен…
Быть разработанным:
Выберите сложность
автобиографические картины