2048分析

Android开发之2048小游戏游戏逻辑源码


一、游戏简介

  2048小游戏类似于开心消消乐,但是相同的数字会相加而不是相消,主要实现逻辑代码如下,这里cardMap是一个4*4的二维数组,游戏逻辑主要通过对这个二维数组的运算来实现。
##二、逻辑代码

private void rightMove(){

boolean isAdd = false;

boolean isplay = false;

for(int row=0;row<4;row++){

for(int column = 2;column>=0;column--){

if(cardMap[row][column]!=0){
if(cardMap[row][column+1]==0){
isAdd = true;
cardMap[row][column+1]=cardMap[row][column];cardMap[row][column]=0;}
   }
}
for(int column = 2;column>=0;column--){
if(cardMap[row][column]!=0){
if(cardMap[row][column+1]==0){
cardMap[row][column+1]=cardMap[row][column];
cardMap[row][column]=0;
}
}
}//前两个for循环用于排去数字之间的空格
for(int column =2;column>=0;column--){
if(cardMap[row][column]!=0){
if(cardMap[row][column+1]==cardMap[row][column]){
isplay = true;
isAdd = true;
cardMap[row][column+1]*=2;
cardMap[row][column]=0;
}
}
}//合并数字
for(int column = 2;column>=0;column--){
if(cardMap[row][column]!=0){
if(cardMap[row][column+1]==0){
cardMap[row][column+1]=cardMap[row][column];
cardMap[row][column]=0;
}
}
}
for(int column = 2;column>=0;column--){
if(cardMap[row][column]!=0){
if(cardMap[row][column+1]==0){
cardMap[row][column+1]=cardMap[row][column];

	cardMap[row][column]=0;
         }
      }
  }
}//再次排出空格即0元素
if(isAdd){addNum();//添加数字}
if(isplay){stopService(mIntent);startService(mIntent);}
}

  以上代码中是手势右滑之后的游戏逻辑的实现。上滑,左滑,下滑与此类似。计算完数组后还要对界面进行绘制,可以采用自定义的View也可以直接利用TextView,当然,能找到数字图片素材最好。这里以TextView为例进行绘制。

private void style(TextView textView, int number){
   
 switch (number){//依据数字对背景颜色和数字字体进行设计
        case 0:{textView.setText("");textView.setTextSize(50);textView.setBackgroundColor(0xffD1CBDC); break;}
        case 2:{textView.setText("2");textView.setTextSize(50);textView.setBackgroundColor(0xff9CCBD1); break;}
        case 4:{textView.setText("4");textView.setTextSize(50);textView.setBackgroundColor(0xffCCD8BD);break;}
        case 8:{textView.setText("8");textView.setTextSize(50);textView.setBackgroundColor(0xffDCBEBC);break;}
        case 16:{textView.setText("16");textView.setTextSize(50);textView.setBackgroundColor(0xff2683D5);break;}
        case 32:{textView.setText("32");textView.setTextSize(50);textView.setBackgroundColor(0xff5EAC61);break;}
        case 64:{textView.setText("64");textView.setTextSize(50);textView.setBackgroundColor(0xffD8D1B0);break;}
        case 128:{textView.setText("128");textView.setTextSize(35);textView.setBackgroundColor(0xff896DC3);break;}
        case 256:{textView.setText("256");textView.setTextSize(35);textView.setBackgroundColor(0xffF4D4CA);break;}
        case 512:{textView.setText("512");textView.setTextSize(35);textView.setBackgroundColor(0xffF48562);break;}
        case 1024:{textView.setText("1024");textView.setTextSize(25);textView.setBackgroundColor(0xffD81B17);break;}
        case 2048:{textView.setText("2048");textView.setTextSize(25);textView.setBackgroundColor(0xffEAC31A);break;}

    }
}
private void draw(){//遍历二维数组,将其中的每个数都画出来
    Integer key = 1;
    for(int row =0;row<4;row++){
        for(int column = 0;column<4;column++){
            if(cardMap[row][column] == 512)
                isWin = true;
            style(textViews.get(key),cardMap[row][column]);
            key++;
        }
    }

}

三、UI设计
   UI设计仁者见仁智者见智,大家怎么看着舒服喜欢就怎么来吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值