本文实例为大家分享了Android实现拼图小游戏的具体代码,供大家参考,具体内容如下

目标效果:

 Android实现拼图小游戏_第1张图片

1.activity_main.xml页面:

<?xml version="1.0" encoding="utf-8"?>    

2.MainActivity.java页面:

package com.example.vivinia.puzzle; import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.GridLayout;import android.widget.ImageView;import android.widget.Toast; public class MainActivity extends AppCompatActivity {  /** * 当前动画是否正在执行 */ private boolean isAnimRun=false; /** *判断游戏是否开始*/ private boolean isGameStart=false; /** *利用二维数组创建若干个游戏小方块 */ private ImageView[][] iv_game_arr = new ImageView[3][5]; /** *游戏主界面 */ private GridLayout gl_main_game; /** *当前空方块的实例保存 */ private ImageView iv_null_ImageView; /** *当前手势 */ private GestureDetector mDetector;  //非图片位置可以进行手势滑动 @Override public boolean onTouchEvent(MotionEvent event) { return mDetector.onTouchEvent(event); //手势监听 }  //在图片上可以进行手势滑动 @Override public boolean dispatchTouchEvent(MotionEvent ev) { mDetector.onTouchEvent(ev); return super.dispatchTouchEvent(ev); }  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDetector=new GestureDetector(this, new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent motionEvent) { return false; }  @Override public void onShowPress(MotionEvent motionEvent) {  }  @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return false; }  @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; }  @Override public void onLongPress(MotionEvent motionEvent) {  }  /** *一瞬间执行的方法 */ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) { int type=getDirByGes(e1.getX(),e1.getY(),e2.getX(),e2.getY()); changeByDir(type); return false; } }); setContentView(R.layout.activity_main); //初始化游戏的若干个小方块 Bitmap bigBm=((BitmapDrawable)getResources().getDrawable(R.drawable.puzzle_bg)).getBitmap(); int everyWidth=bigBm.getWidth()/5; //每个游戏小方块的宽和高 for (int i = 0; i < iv_game_arr.length; i++) { for (int j = 0; j < iv_game_arr[0].length; j++) { Bitmap bm=Bitmap.createBitmap(bigBm,j*everyWidth,i*everyWidth,everyWidth,everyWidth);//根据行列来切成若干个游戏小图片 iv_game_arr[i][j]=new ImageView(this); iv_game_arr[i][j].setImageBitmap(bm); //设置每一个游戏小方块图案 iv_game_arr[i][j].setPadding(2,2,2,2);//设置方块之间的间距 iv_game_arr[i][j].setTag(new GameData(i,j,bm)); //绑定自定义的数据 iv_game_arr[i][j].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean flag=isHasByNullImageView((ImageView)view); if(flag){ changeDataByImageView((ImageView)view); } } }); } } //初始化游戏主界面,并添加若干个小方块 gl_main_game = (GridLayout) findViewById(R.id.gl_main_game); for(int i=0;i=0&&new_x=0&&new_yMath.abs(start_y-end_y))?true:false; //是否左右 if(isLeftOrRight){ //左右 boolean isLeft=start_x-end_x>0?true:false; if(isLeft){ return 3; }else{ return 4; } }else{ //上下 boolean isUp=start_y-end_y>0?true:false; if(isUp){ return 1; }else{ return 2; } } }  /** * 随机打乱顺序 */ public void randomMove(){ //打乱的次数 for(int i=0;i<10;i++){ //根据手势开始交换,无动画 int type=(int)(Math.random()*4)+1; changeByDir(type,false); } } public void changeDataByImageView(final ImageView mImageView) { changeDataByImageView(mImageView,true); }  /** * 利用动画结束之后,交换两个方块的数据 * @param mImageView 点击的方块 * @param isAnim true:有动画,false:无动画 */ public void changeDataByImageView(final ImageView mImageView,boolean isAnim){ if(isAnimRun){ //如果动画已经开始,则不做交换操作 return; } if(!isAnim){ //如果没有动画 GameData mGameData= (GameData) mImageView.getTag(); iv_null_ImageView.setImageBitmap(mGameData.bm); GameData mNullGameData= (GameData) iv_null_ImageView.getTag(); mNullGameData.bm=mGameData.bm; mNullGameData.p_x=mGameData.p_x; mNullGameData.p_y=mGameData.p_y; setNullImageView(mImageView); //设置当前点击的是空方块 if(isGameStart) { isGameOver(); //成功时谈一个toast } return; } /** *创建一个动画,设置好方向,移动的距离 */ TranslateAnimation translateAnimation = null; if(mImageView.getX()>iv_null_ImageView.getX()){ //当前点击的方块在空方块下边 //往上移动 translateAnimation=new TranslateAnimation(0.1f,-mImageView.getWidth(),0.1f,0.1f); }else if(mImageView.getX()iv_null_ImageView.getY()){ //当前点击的方块在空方块下边 //往左移动 translateAnimation=new TranslateAnimation(0.1f,0.1f,0.1f,-mImageView.getWidth()); } else if(mImageView.getX()    

3.设置去掉标题栏样式

styles.xml页面:

    

4.清单文件中使用该样式

AndroidManifest.xml页面:

<?xml version="1.0" encoding="utf-8"?>           

源码下载:点击打开链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. android 属性动画之 ObjectAnimator
  2. Android 自定义SurfaceView实现加载GIF动画
  3. Android 动画效果学习笔记
  4. Android 获取手势onfling代码片段
  5. Android Activity屏幕切换动画-左右滑动切换
  6. 今天发现了一个不错的android加载动画
  7. Android:Handler实现ProgressDialog动画加载
  8. android的属性动画

随机推荐

  1. 如何使用Android(安卓)SDK开发Android应
  2. Android支持HTML标签
  3. [实战示例] 带您深入探讨 Android(安卓)
  4. Android(安卓)3.0发布了
  5. 谷歌关于Android平板应用开发的一些资源
  6. 获得 android 的 root 权限
  7. Android当中的MVP模式(七)终篇---关于对MVP
  8. Android之应用进程托管
  9. Android(安卓)Studio(七)Android(安卓)St
  10. Android(安卓)APP支持RTL模式