基本信息
源码名称:android 2048游戏代码 下载
源码大小:3.06M
文件格式:.7z
开发语言:Java
更新时间:2014-05-23
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
package com.example.l2048;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnGestureListener {
private int width;
private int height;
private int iwidth;
private int iheight;
private LinearLayout centerlayout;
private List<ViewCell> lists = new ArrayList<ViewCell>();
private int[][] arrays = new int[4][4];
private Random random = new Random();//
private GestureDetector gd;
// private int testnumber=1;//测试数字方格分布情况
private boolean flag_move = false;
private TextView tv_currenScore;
private TextView tv_bestScore;
private int current_score = 0;
private BestScode record;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display dp = wm.getDefaultDisplay();
width = dp.getWidth();
height = dp.getHeight();
iwidth=width/4;
iheight=iwidth;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, width);
centerlayout = new LinearLayout(this);
centerlayout.setLayoutParams(params);
centerlayout.setOrientation(LinearLayout.VERTICAL);
centerlayout.setBackgroundColor(Color.WHITE);
centerlayout.addView(getMainLayout());
View scode =View.inflate(this, R.layout.main, null);
centerlayout.addView(scode);
setContentView(centerlayout);
record = new BestScode(this);
tv_currenScore = (TextView) findViewById(R.id.tv_currenScore);
tv_bestScore = (TextView) findViewById(R.id.tv_bestScore);
tv_bestScore.setText(record.getBestScode() "");
gd = new GestureDetector(this);
random2Or4();
}
//随机产生2或4
private void random2Or4() {
if(!getFillAll()){//没充满非0数字
int row = random.nextInt(4);
int col = random.nextInt(4);
ViewCell randomview = lists.get(row*4 col);
if(randomview.getNumber()==0){//
int n2Or4 = (random.nextInt(2) 1)*2;
randomview.setNumber(n2Or4);
if(getFillAll()&¬Add()){
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("游戏结束!");
builder.setMessage("是否继续游戏?");
android.content.DialogInterface.OnClickListener listener = new MyOnclickListener();
builder.setPositiveButton("继续游戏", listener );
builder.setNegativeButton("退出游戏", listener);
builder.setCancelable(false);//不能按退回键关闭
builder.create().show();
}
}else{
random2Or4();
}
}
}
/**
* 对话框按钮事件监听器
*
*/
public class MyOnclickListener implements
android.content.DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
switch(which){
case AlertDialog.BUTTON_POSITIVE:
//继续游戏
for(int x=0;x<arrays.length;x ){
for(int y=0;y<arrays[x].length;y ){
ViewCell view = lists.get(x*4 y);
view.setNumber(0);
}
}
//比较,写入最高分数
if(current_score>record.getBestScode()){
record.setBestScode(current_score);
tv_bestScore.setText(current_score "");
}
current_score = 0;
tv_currenScore.setText(0 "");
random2Or4();
break;
//退出游戏
case AlertDialog.BUTTON_NEGATIVE:
//比较,写入最高分数
if(current_score>record.getBestScode()){
record.setBestScode(current_score);
tv_bestScore.setText(current_score "");
}
finish();
break;
}
}
}
//返回主布局
private View getMainLayout() {
LinearLayout colLayout = new LinearLayout(this);
colLayout.setOrientation(LinearLayout.VERTICAL);
for(int i=0;i<4;i ){
colLayout.addView(getRowLayout());
}
return colLayout;
}
//行
private View getRowLayout() {
LinearLayout rowLayout = new LinearLayout(this);
rowLayout.setOrientation(LinearLayout.HORIZONTAL);
// rowLayout.setBackgroundColor(Color.GRAY);
for(int i=0;i<4;i ){
ViewCell viewcell = new ViewCell(this,iwidth,iheight);
rowLayout.addView(viewcell);
//测试数字方格排列情况
// viewcell.setNumber((int) Math.pow(2, testnumber));
// testnumber ;
lists.add(viewcell);
}
return rowLayout;
}
/**
* 判断是否充满非0数字
* @return
*/
private boolean getFillAll(){
markNumber();
for(int i=0;i<4;i ){
for(int j=0;j<4;j ){
if(arrays[i][j]==0){
return false;
}
}
}
return true;
}
/**
* 判断是否有相邻数字是否相等;
* @return true :有(非0)相邻数字相等
*/
private boolean notAdd(){
markNumber();
boolean notadd = true;
for(int i=0;i<4;i ){
for(int j=0;j<3;j ){
if(arrays[i][j]==arrays[i][j 1]&&arrays[i][j]!=0){
notadd = false;
}else if(arrays[j][i]==arrays[j 1][i]&&arrays[j][i]!=0){
notadd = false;
}
}
}
return notadd;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float X=e2.getX()-e1.getX();
float Y=e2.getY()-e1.getY();
final int FLING_Min_DISTANCE =50;
if(X>FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){
toRight();
// Toast.makeText(this, "右", 0).show();
}else if(X<-FLING_Min_DISTANCE&&Math.abs(velocityX)>Math.abs(velocityY)){
toLeft();
// Toast.makeText(this, "左", 0).show();
}else if(Y>FLING_Min_DISTANCE&&Math.abs(velocityX)<Math.abs(velocityY)){
toDown();
// Toast.makeText(this, "下", 0).show();
}else if(Y<-FLING_Min_DISTANCE&&Math.abs(velocityX)<Math.abs(velocityY)){
toUp();
// Toast.makeText(this, "上", 0).show();
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
/**
* 向上划动
*/
private void toUp() {
markNumber();
orderUp();
//合并相同数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[q][p]==arrays[q 1][p]&&arrays[q][p]!=0){
flag_move = true;
arrays[q][p] =arrays[q 1][p];
addscode =arrays[q][p];
arrays[q 1][p]=0;
q ;
}
}
}
orderUp();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向下划动
*/
private void toDown() {
markNumber();
//逐一排列
orderDown();
//合并相同数据
int addscode = 0;
for(int p=0;p<4;p ){
for(int q=3;q>0;q--){
if(arrays[q][p]==arrays[q-1][p]&&arrays[q][p]!=0){
flag_move = true;
arrays[q][p] =arrays[q-1][p];
addscode =arrays[q][p];
arrays[q-1][p]=0;
q--;
}
}
}
orderDown();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向左划动
*/
private void toLeft() {
markNumber();
orderLeft();
//合并相等数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[p][q]==arrays[p][q 1]&&arrays[p][q]!=0){
flag_move = true;
arrays[p][q] =arrays[p][q 1];
addscode =arrays[p][q];
arrays[p][q 1]=0;
q ;
}
}
}
orderLeft();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向右划动
*/
private void toRight() {
markNumber();
orderRight();
//合并相同数据
int addscode = 0;
for(int p =0;p<4;p ){
for(int q=0;q<3;q ){
if(arrays[p][q]==arrays[p][q 1]&&arrays[p][q]!=0){
flag_move = true;
arrays[p][q] =arrays[p][q 1];
addscode =arrays[p][q];
arrays[p][q 1]=0;
q ;
}
}
}
orderRight();
move2draw();
current_score =addscode;
tv_currenScore.setText(current_score "");
}
/**
* 向上划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderUp() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=0;m<4;m ){
for(int i=m 1;i<4;i ){
if(arrays[m][n]==0&&arrays[i][n]!=0){
flag_move = true;
arrays[m][n]=arrays[i][n];
arrays[i][n]=0;
}
}
}
}
}
/**
* 向下划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderDown() {
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=3;m>=0;m--){
for(int i=m-1;i>=0;i--){
if(arrays[m][n]==0&&arrays[i][n]!=0){
flag_move = true;
arrays[m][n]=arrays[i][n];
arrays[i][n]=0;
}
}
}
}
}
/**
* 向左划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderLeft() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=0;m<4;m ){
for(int i=m 1;i<4;i ){
if(arrays[n][m]==0&&arrays[n][i]!=0){
flag_move = true;
arrays[n][m]=arrays[n][i];
arrays[n][i]=0;
}
}
}
}
}
/**
* 向右划动,方格排列,非0靠前,0靠后,如0、2、0、4 ——>2、4、0、0
*/
private void orderRight() {
//逐一排列
for(int n=0;n<4;n ){
//冒泡排序法
for(int m=3;m>=0;m--){
for(int i=m-1;i>=0;i--){
if(arrays[n][m]==0&&arrays[n][i]!=0){
flag_move = true;
arrays[n][m]=arrays[n][i];
arrays[n][i]=0;
}
}
}
}
}
/**
* 记录数字方格表中的数字。
*/
private void markNumber() {
for(int i=0;i<4;i ){
for(int j=0;j<4;j ){
ViewCell view =lists.get(i*4 j);
arrays[i][j] = view.getNumber();
}
}
}
/**
* /有移动数字方格就重画数字方格表并随机产生2或4数字方格,否则,不重画和产生数字方格。
*/
private void move2draw() {
if(flag_move){//判断是否有移动
//重画方格
for(int x=0;x<arrays.length;x ){
for(int y=0;y<arrays[x].length;y ){
ViewCell view = lists.get(x*4 y);
view.setNumber(arrays[x][y]);
}
}
random2Or4();
flag_move = false;
}
}
}