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设计仁者见仁智者见智,大家怎么看着舒服喜欢就怎么来吧。