이번에는 vue를 사용하여 2048 미니게임을 구현하는 단계에 대해 자세히 설명하겠습니다. vue를 사용하여 2048 미니게임을 구현하는 주의사항은 무엇인가요?
git clone npm i npm run dev
구현 아이디어는 다음과 같습니다.
vue-cli를 사용하여 프로젝트를 빌드합니다. 이 프로젝트에서는 약간 번거로울 수 있지만
를 사용하여 또 다른4X4 정사각형을 빌드하기에는 너무 게으릅니다. 2차원 배열 저장하고 바인딩하기 설정한 뒤 이 2차원 배열만 신경쓰고 나머지는 vue에 맡기세요
키보드event
2048의 핵심 부분을 들어보세요 이동 및 병합 알고리즘은 4X4 행렬이므로 왼쪽 이동 알고리즘만 구현하면 됩니다. 다른 방향으로 이동하려면 행렬을 회전하고 이동 및 병합한 다음 뒤로 회전하고 돔을 렌더링하면 됩니다
다양한 값으로 스타일을 바인딩
점수 계산, 로컬 저장소를 사용하여 가장 높은 점수 저장
구현의 핵심
DOM
<p class="box"> <p class="row" v-for="row in list"> <p class="col" :class="'n-'+col" v-for="col in row">{col}}</p> </p> </p>
주요 게임 부분의 DOM은 매우 간단합니다. . 2차원 배열로 렌더링되며 스타일에 동적으로 바인딩됩니다.
Shift left
주로 다음과 같은 케이스로 구성됩니다.
2 2 2 2 =>
4 2 2 => 4 4 2 0Not the 동일 =>가장 먼 위치로 이동
_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 } } })
실제로 상하좌우 시프트가 동일하기 때문에 4번 쓸 수 있지만 실수하기 쉬우므로 직접 행렬 회전 회전한 다음 이동합니다.
예를 들어 위쪽 이동을 시계 반대 방향으로 한 번 회전하면 위쪽 이동이 왼쪽 이동이 됩니다. 움직임이 병합된 후에는 행렬을 시계 반대 방향으로 4-1회만 회전하면 됩니다. 단순한 상향 이동과 동일합니다. 반시계 방향 회전 알고리즘: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 },
Vue 프로젝트의 VeeValidate 양식 확인 사용 사례 코드 분석
JavaScript DOM 요소를 추가, 삭제 및 수정하는 단계에 대한 자세한 설명
위 내용은 Vue를 사용하여 2048 미니게임을 구현하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!