WeChat 미니 프로그램 버전 2048 미니 게임

小云云
풀어 주다: 2018-01-25 13:34:20
원래의
4568명이 탐색했습니다.

WeChat "점프" 게임이 최근 인기를 끌었습니다. 이 사이트에는 공유할 기사도 있습니다. PHP는 WeChat "점프" 게임을 구현합니다 이 기사에서는 주로 2048을 구현하기 위한 알고리즘과 주의할 점을 공유합니다. 함께! (소스 코드 주소는 기사 끝 부분을 참조하십시오.)

알고리즘

4*4 체커보드 보기 생성

2개 또는 4개를 무작위로 생성하여 두 개의 셀을 채움

사용자가 터치할 때 시작 위치와 끝 위치를 기록하여 슬라이딩 방향 결정

슬라이딩 방향에 따라 셀 이동 , 그리고 같은 값을 병합합니다

사용자가 한 번의 스와이프를 완료한 후 2단계를 반복합니다

게임이 끝났는지 판단하고 게임 결과에 따라 다른 프롬프트를 생성합니다


난이도

슬라이딩 방향을 결정합니다

The 사용자가 스와이프하면 동일한 그리드가 병합되고 슬라이딩 방향의 측면으로 이동됩니다
implementation

view 구현

1. wxml+wxss를 사용하여 체커보드 보기를 생성합니다

WeChat 미니 프로그램 버전 2048 미니 게임

2. wx:for를 사용하여 렌더링합니다. 데이터를 각 셀에

로직 구현

1. 페이지가 로드된 후 두 셀에 숫자 2 또는 4를 무작위로 채웁니다

2. 사용자의 슬라이딩 방향을 결정합니다

touchStart 이벤트 함수를 사용하여 시작 위치 touchStartX를 얻습니다. touchStartY

touchMove 이벤트 함수를 사용하여 종료 위치 touchEndX, touchEndY

var disX = this.touchStartX - this.touchEndX;
    var absdisX = Math.abs(disX);
    var disY = this.touchStartY - this.touchEndY;
    var absdisY = Math.abs(disY);  
    // 确定移动方向 // 0:上, 1:右, 2:下, 3:左 var direction = absdisX > absdisY ? (disX < 0 ? 1 : 3) : (disY < 0 ? 2 : 0);
로그인 후 복사

3를 획득합니다. 슬라이딩 방향에 따라 테이블을 이동하고(오른쪽으로 슬라이딩한다고 가정) 동일한 항목을 병합합니다

4*4 2-를 생성합니다. 2048 체스판의 차원 배열 목록이며 빈 공간은 0

// 比如棋盘数据如下 var grid = [
    [2, 2, 0, 0],
    [0, 0, 0, 0],
    [0, 8, 4, 0],
    [0, 0, 0, 0]
];
로그인 후 복사

슬라이딩 방향에 따라 4개 생성 *4 2차원 배열

var list = [
    [0, 0, 2, 2],  // 注意是0022不是2200,因为像右滑动所以从右边push入数组
    [0, 0, 0, 0],
    [0, 4, 8, 0],
    [0, 0, 0, 0]
];
로그인 후 복사

해당 코드(코드 중 this.board.grid는 위의 초기 그리드임) ):

formList(dir) {  // 根据传入的滑动方向生成list的四个数组 var list = [[], [], [], []];
    for(var i = 0; i < this.size; i++)
      for(var j = 0; j < this.size; j++) {
        switch(dir) {
          case 0:
            list[i].push(this.board.grid[j][i]);
            break;
          case 1:
            list[i].push(this.board.grid[i][this.size-1-j]);
            break;
          case 2:
            list[i].push(this.board.grid[this.size-1-j][i]);
            break;
          case 3:
            list[i].push(this.board.grid[i][j]);
            break;
        }
      }
    return list;
  }
로그인 후 복사

목록의 각 작은 배열에 숫자를 앞에 두고, 끝에 0을 넣습니다

list2 = [
    [2, 2, 0, 0], 
    [0, 0, 0, 0],
    [4, 8, 0, 0],
    [0, 0, 0, 0]
];
로그인 후 복사

해당 코드:

changeItem(item) {  // 将 [0, 2, 0, 2] 改为 [2, 2, 0, 0] var cnt = 0;
    for(var i = 0; i < item.length; i++)
      if(item[i] != 0)
        item[cnt++] = item[i];
    for(var j = cnt; j < item.length; j++) 
      item[j] = 0;
    return item;
  }
로그인 후 복사

같은 값을 가진 셀을 추가하고 다음 셀의 값을 0으로 변경합니다.

list2 = [
    [4, 0, 0, 0], 
    [0, 0, 0, 0],
    [4, 8, 0, 0],
    [0, 0, 0, 0]
];
로그인 후 복사

해당 코드:

combine(list) { // 滑动时相同的合并 for(var i = 0; i < list.length; i++)  // 数字靠边
      list[i] = this.changeItem(list[i]);
    for(var i = 0; i < this.size; i++) { 
      for(var j = 1; j < this.size; j++) {
        if(list[i][j-1] == list[i][j] && list[i][j]!=0) {
          list[i][j-1] += list[i][j];
          list[i][j] = 0; 
        }
      }
    }
    for (var i = 0; i < list.length; i++)  // 再次数字靠边,避免0220变成0400的情况发生
      list[i] = this.changeItem(list[i]);
    return list;
  }
로그인 후 복사

list2를 반환하여 데이터를 나열하고 체커보드 보기에 렌더링합니다

list = [
[0, 0, 0, 4],
[0, 0, 0, 0],
[ 0, 0, 8, 4],
[0, 0, 0, 0]
];

해당 코드 :

move(dir) {
    // 0:上, 1:右, 2:下, 3:左 var curList = this.formList(dir);
    var list = this.combine(curList); 
    var result = [[],[],[],[]];
    for(var i = 0; i < this.size; i++)
      for(var j = 0; j < this.size; j++) {
        switch (dir) {
          case 0:
            result[i][j] = list[j][i];
            break;
          case 1:
            result[i][j] = list[i][this.size-1-j];
            break;
          case 2:
            result[i][j] = list[j][this.size-1-i];
            break;
          case 3:
            result[i][j] = list[i][j];
            break;
        }
      } 
    this.board.grid = result;
    this.setDataRandom();  // 移动一次之后随机用2或4填充两个单元格 return result;
  }
로그인 후 복사

4. 1

5단계를 반복하여 게임 오버

판정 기준을 정합니다. : 4*4 셀이 채워져 있으며 어떤 셀의 위, 아래, 왼쪽, 오른쪽에도 동일한 값을 가진 셀이 없습니다

isOver() {  // 游戏是否结束,结束条件:可用格子为空且所有格子上下左右值不等 for (var i = 0; i < this.size; i++) // 左右不等 for (var j = 1; j < this.size; j++) {
      if (this.board.grid[i][j] == this.board.grid[i][j - 1])
        return false;
    }
  for (var j = 0; j < this.size; j++)  // 上下不等 for (var i = 1; i < this.size; i++) {
      if (this.board.grid[i][j] == this.board.grid[i - 1][j])
        return false;
    }
  return true;
}
로그인 후 복사

6. 게임 결과에 따라 해당 프롬프트가 제공됩니다

WeChat 미니 프로그램 버전 2048 미니 게임

po 소스 코드. 주소: windlany/wechat-weapp-2048 관심이 있으신 분은 시도해 보시기 바랍니다. 모두에게 도움이 되기를 바랍니다.

관련 권장 사항:

WeChat 점프 파이썬 보조 스크립트 예제 공유

php는 WeChat 점프 게임을 구현합니다.

인스턴스 공유 jQuery는 퍼즐 게임을 구현합니다

위 내용은 WeChat 미니 프로그램 버전 2048 미니 게임의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿