이번에는 vue를 사용하여 2048 미니게임을 구현하는 방법을 알려드리겠습니다. vue를 사용하여 2048 미니게임을 구현할 때 주의사항은 무엇인지 살펴보겠습니다.
사용 방법:
git clone npm i npm run dev
구현 아이디어는 다음과 같습니다.
vue-cli를 사용하여 프로젝트를 빌드합니다. 이 프로젝트에서는 약간 번거로울 수 있지만 다른 프로젝트를 빌드하기에는 너무 게으릅니다.
4X4 그리드에 2D를 사용합니다. 배열 이 저장되면 이 2차원 배열에만 관심이 있습니다. 다른 사항은 vue
에 맡기고 키보드 이벤트
핵심 부분을 확인하세요. 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>
을 구현하는 것입니다. 단순하고 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이 셀과 동일한지 확인
동일 => ; 병합
동일하지 않음 =>가장 먼 위치로 이동
이동 후 셀을 지웁니다
다음 라운드
이동 라운드에서는 숫자가 한 번만 병합될 수 있으므로 각 그리드에는 병합 여부를 기록하는 병합 매개변수가 있어야 합니다. .
_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-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 },
이 시점에서는 80% 완료되었으며, 포인트 추가, 재시작 및 기타 기능만 개선하면 됩니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료: Vue에서 vee-validate를 사용하는 방법
노드 교차 도메인 사용 express+http-proxy-middleware 단계별 설명
위 내용은 vue를 사용하여 2048 미니 게임을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!