2048移動演算法
版權宣告:本文為博主原創文章,轉載請註明出處。 https://blog.csdn.net/twilight_karl/article/details/71254965
之前一直想寫一個web版的2048 ,主要頁面已經寫好了,但是移動的演算法還沒有完成。今天研究了一下移動的演算法,用4*4的陣列表示遊戲介面,雖然有點簡陋,不過已經能看出效果了( ̄▽ ̄)/。接下來有時間再把程式碼和頁面整合一下。( ̄▽ ̄”)
以左移為例,當使用者按下左鍵時,遊戲需要完成兩個步驟:
1,從左往右檢查是否有可以相加的數字
2,每次檢查後從右往左調整數字的位置,保證數字相鄰的左端不會有0
左移函式:
function moveLeft (){
var i,j;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
if(data[i][j] == data[i][j+1]){
data[i][j] += data[i][j+1];
data[i][j+1] = 0 ;
}
clearLeft();
}
}
}
清零函式:
function clearRight(){
for(var i = 0 ; i < 4 ; i++){
for(var j = 3 ; j >= 0 ; j-- ){
for(var k = j ; k < 4 ; k++ ){
if(data[i][j]!= 0 && data[i][k] == 0){
data[i][k] = data[i][j];
data[i][j] = 0 ;
}
}
}
}
}
完整程式碼如下:
<html>
<body>
<input type="button" value="Left" onclick="moveLeft(); show();"/>
<input type="button" value="right" onclick="moveRight(); show();"/>
<input type="button" value="up" onclick="moveUp(); show();"/>
<input type="button" value="down" onclick="moveDown(); show();"/>
<div id="s"></div>
<script>
var data = [[8,8,2,0],[8,0,8,2],[8,0,2,8],[8,2,0,8]];
function show(){
var s = document.getElementById("s");
s.innerHTML = "";
for(var i = 0 ; i < 4 ; i++){
for(var j = 0 ; j < 4 ; j++){
s.innerHTML += data[i][j]+" ";
}
s.innerHTML += "<br/>";
}
}
// 左移
function moveLeft (){
var i,j;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
if(data[i][j] == data[i][j+1]){
data[i][j] += data[i][j+1];
data[i][j+1] = 0 ;
}
clearLeft();
}
}
}
// 右移
function moveRight (){
var i,j;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
if(data[i][j] == data[i][j+1]){
data[i][j+1] += data[i][j];
data[i][j] = 0 ;
}
clearRight();
}
}
}
// 上移
function moveUp (){
var i,j;
for(j=0;j<4;j++){
for(i=0;i<3;i++){
if(data[i][j] == data[i+1][j]){
data[i][j] += data[i+1][j];
data[i+1][j] = 0 ;
}
clearUp();
}
}
}
// 下移
function moveDown (){
var i,j;
for(j=0;j<4;j++){
for(i=3;i>0;i--){
if(data[i][j] == data[i-1][j]){
data[i][j] += data[i-1][j];
data[i-1][j] = 0 ;
}
clearDown();
}
}
}
// 清除右邊的0
function clearRight(){
for(var i = 0 ; i < 4 ; i++){
for(var j = 3 ; j >= 0 ; j-- ){
for(var k = j ; k < 4 ; k++ ){
if(data[i][j]!= 0 && data[i][k] == 0){
data[i][k] = data[i][j];
data[i][j] = 0 ;
}
}
}
}
}
// 清除左邊的0
function clearLeft(){
for(var i = 0 ; i < 4 ; i++){
for(var j = 0 ; j < 4 ; j++){
for(var k = j ; k >= 0 ; k-- ){
if(data[i][j]!= 0 && data[i][k] == 0){
data[i][k] = data[i][j];
data[i][j] = 0 ;
}
}
}
}
}
// 清除上方的0
function clearUp(){
for(var j = 0 ; j < 4 ; j++){
for(var i = 0 ; i <4 ; i++){
for(var k = i ; k >=0 ; k-- ){
if(data[i][j]!= 0 && data[k][j] == 0){
data[k][j] = data[i][j];
data[i][j] = 0 ;
}
}
}
}
}
// 清除下方的0
function clearDown(){
for(var j = 0 ; j < 4 ; j++){
for(var i = 3 ; i >= 0 ; i--){
for(var k = i ; k < 4 ; k++ ){
if(data[i][j]!= 0 && data[k][j] == 0){
data[k][j] = data[i][j];
data[i][j] = 0 ;
}
}
}
}
}
show();
</script>
</body>
</html>
相關文章
- 移動面積演算法——捕捉移動波峰演算法
- 演算法題-移動零演算法
- 2048原始碼原始碼
- 小遊戲2048最佳演算法怎麼實現?思路全解析!遊戲演算法
- 移動端影像相似度演算法選型演算法
- 2048遊戲的最佳演算法是?來看看AI版作者的回答遊戲演算法AI
- vue實現2048Vue
- 《球球大作戰》原始碼解析:移動演算法原始碼演算法
- Python小遊戲2048Python遊戲
- 微信小程式版2048微信小程式
- 谷歌對移動演算法進行空前的調整谷歌演算法
- 2048小遊戲設計思路遊戲設計
- 【IDL】開發遊戲"2048"開發遊戲
- javascript實現前端小遊戲2048JavaScript前端遊戲
- Public Easy Round #2 E. 2048
- hdu2048遞迴問題遞迴
- iterator移動
- 棋子移動
- 華為推出新型HiSR:移動端的超解析度演算法演算法
- 移動端web整理 移動端問題總結,移動web遇到的那些坑Web
- 移動的微博,移動的網際網路薦
- KVM線上遷移(動態遷移)
- 移動檔案
- 移動端定位
- 移動web——移動web開發簡介,WebStorgae簡介Web
- 移動web開發之移動端真機測試Web
- TP5開發海賊王版2048遊戲遊戲
- bash shell實現2048小遊戲詳解遊戲
- 移動端模擬滾動
- 移動新聞網站,掌上移動新聞,移動新聞客戶端,jQuery Mobile移動新聞網站,移動新聞網站demo,新聞閱讀器開發網站客戶端jQuery
- 領釦LintCode演算法問題答案-1886. 目標移動演算法
- 中國移動:2021年中國移動自動駕駛網路白皮書自動駕駛
- 中國移動:2021年中國移動智慧家庭白皮書
- 【移動端開發】移動端開發基礎問題
- vim實用指南:游標移動——行內、行間移動
- Lesktop開源IM移動端:接入LayIM移動端UIUI
- 3D 移動3D
- OpenGL 繪圖移動繪圖