vue를 사용하여 2048 미니 게임을 구현하는 방법

php中世界最好的语言
풀어 주다: 2018-06-01 10:32:55
원래의
2096명이 탐색했습니다.

이번에는 vue를 사용하여 2048 미니게임을 구현하는 방법을 알려드리겠습니다. vue를 사용하여 2048 미니게임을 구현할 때 주의사항은 무엇인지 살펴보겠습니다.

사용 방법:

git clone
npm i
npm run dev
로그인 후 복사

구현 아이디어는 다음과 같습니다.

  1. vue-cli를 사용하여 프로젝트를 빌드합니다. 이 프로젝트에서는 약간 번거로울 수 있지만 다른 프로젝트를 빌드하기에는 너무 게으릅니다.

  2. 4X4 그리드에 2D를 사용합니다. 배열 이 저장되면 이 2차원 배열에만 관심이 있습니다. 다른 사항은 vue

  3. 에 맡기고 키보드 이벤트

  4. 핵심 부분을 확인하세요. 2048은 4X4 행렬이기 때문에 이동 및 병합 알고리즘입니다. 따라서 왼쪽 이동 알고리즘이 구현되는 한 다른 방향으로의 이동에는 행렬 회전, 이동 병합, 뒤로 회전 및 바인딩만 필요합니다. 다양한 값을 가진 스타일 ​​

  5. 점수 계산 및 로컬 저장소 사용 최고 점수를 저장하는 열쇠

DOM

<p class="box">
  <p class="row" v-for="row in list">
    <p class="col" :class="&#39;n-&#39;+col" v-for="col in row">{col}}</p>
  </p>
</p>
로그인 후 복사

을 구현하는 것입니다. 단순하고 2차원 배열로 렌더링되며 스타일에 동적으로 바인딩됩니다.

Shift left

주로 다음 상황에 의해 발생합니다.

2 2 2 2 => 4 4 0 0

  • 4 2 2 2 => 4 4 2 0

  • 0 4 2 2=> 4 4 0 1 가장 먼 빈 위치

  • 존재하지 않는 경우 이동합니다. 가장 먼 곳으로

  • 존재하는 경우 가장 먼 곳의 값 - 1이 셀과 동일한지 확인

동일 => ; 병합

  1. 동일하지 않음 =>가장 먼 위치로 이동

  2. 이동 후 셀을 지웁니다

  3. 다음 라운드

  4. 이동 라운드에서는 숫자가 한 번만 병합될 수 있으므로 각 그리드에는 병합 여부를 기록하는 병합 매개변수가 있어야 합니다. .

  5. 메인 코드 :
  6. _list.forEach(item => {
        let farthest = this.farthestPosition(list, item)
        let next = list[farthest - 1]
        if (next && next === item.value && !_list[farthest - 1].merged) {
          //合并
          list[farthest - 1] = next * 2
          list[item.x] = undefined
          item = {
            x: farthest - 1,
            merged: true,
            value: next * 2
          }
          this.score += next * 2
        } else {
          if (farthest != item.x) {
            list[farthest] = item.value
            list[item.x] = undefined
            item.x = farthest
          }
        }
      })
    로그인 후 복사

  7. 행렬 회전
  8. 실제로 상하좌우 시프트가 동일하기 때문에 4번 쓸 수 있지만 실수하기 쉬우므로 직접 행렬 회전 회전한 다음 이동합니다.
  9. 예를 들어 위쪽 이동을 시계 반대 방향으로 한 번 회전하면 위쪽 이동이 왼쪽 이동이 됩니다. 움직임이 병합된 후에는 행렬을 시계 반대 방향으로 4-1회만 회전하면 됩니다. 단순한 상향 이동과 동일합니다.

  10. 반시계 방향 회전 알고리즘:
rotate(arr, n) {
    n = n % 4
    if (n === 0) return arr
    let tmp = Array.from(Array(this.size)).map(() => Array(this.size).fill(undefined))
    for (let i = 0; i < this.size; i++) {
      for (let j = 0; j < this.size; j++) {
        tmp[this.size - 1 - i][j] = arr[j][i]
      }
    }
    if (n > 1) tmp = this.rotate(tmp, n - 1)
    return tmp
  },
로그인 후 복사

이 시점에서는 80% 완료되었으며, 포인트 추가, 재시작 및 기타 기능만 개선하면 됩니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료: Vue에서 vee-validate를 사용하는 방법

노드 교차 도메인 사용 express+http-proxy-middleware 단계별 설명

위 내용은 vue를 사용하여 2048 미니 게임을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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