自定义view:

package com.jisai.materialdesigndemo.tuixiangzhi;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;import com.jisai.materialdesigndemo.R;import java.util.ArrayList;public class View_tuixiangzhi extends ImageView {ArrayList<int[][]> arrayList = new ArrayList<>();int[][][] ccc =new int[300][15][15];int kk=0;Canvas canvas;private int mWidth;private int mHeight;Boolean flag=false;Bitmap bitmap0= BitmapFactory.decodeResource(getResources(), R.mipmap.qiang);Bitmap bitmap1= BitmapFactory.decodeResource(getResources(),R.mipmap.kong);Bitmap bitmap2= BitmapFactory.decodeResource(getResources(),R.mipmap.ren_1);Bitmap bitmap3= BitmapFactory.decodeResource(getResources(),R.mipmap.xiang_1);Bitmap bitmap4= BitmapFactory.decodeResource(getResources(),R.mipmap.xiang_2);Bitmap bitmap5= BitmapFactory.decodeResource(getResources(),R.mipmap.hua);Bitmap bitmap6= BitmapFactory.decodeResource(getResources(),R.mipmap.renandhua);int [][]aaa= {//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,5,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,1,3,5,0,0,0,0,0},{0,0,0,0,5,3,2,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,3,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,5,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};public interface PassLitener{void pass();}private PassLitener mPassLitener;public void setPassLitener(PassLitener mPassLitener){this.mPassLitener = mPassLitener;}public View_tuixiangzhi(Context context) {super(context);init("MyImageView(Context context)");}public View_tuixiangzhi(Context context, AttributeSet attrs) {super(context, attrs);init("MyImageView(Context context, AttributeSet attrs)");}public View_tuixiangzhi(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init("MyImageView(Context context, AttributeSet attrs, int defStyle)");}private void init(String structName) {}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int specSize = MeasureSpec.getSize(widthMeasureSpec);mWidth = specSize;specSize = MeasureSpec.getSize(heightMeasureSpec);mHeight = specSize;Log.e("宽高:","宽:"+mWidth+"高:"+mHeight);setMeasuredDimension(mWidth, mHeight);}@Overrideprotected void onDraw(Canvas canvas) {Log.e("onDraw:","onDraw");this.canvas=canvas;super.onDraw(canvas);Paint p=new Paint();p.setColor(Color.RED);//canvas.drawRect(20,20,100,100,p);//canvas.drawColor(Color.RED);for(int i=0;i<15;i++){for(int k=0;k<15;k++){int x=aaa[i][k];Rect rect = new Rect((mWidth/15)*k,(mWidth/15)*i,(mWidth/15)*(k+1),(mWidth/15)*(i+1));switch (x){case 0:canvas.drawBitmap(bitmap0,null,rect,p);break;case 1:canvas.drawBitmap(bitmap1,null,rect,p);break;case 2:canvas.drawBitmap(bitmap2,null,rect,p);break;case 3:canvas.drawBitmap(bitmap3,null,rect,p);break;case 4:canvas.drawBitmap(bitmap4,null,rect,p);break;case 5:canvas.drawBitmap(bitmap5,null,rect,p);break;case 6:canvas.drawBitmap(bitmap6,null,rect,p);break;}}}}public void setaaa(int [][]xxx){for(int i=0;i<15;i++){for(int k=0;k<15;k++) {aaa[i][k]=xxx[i][k];}}kk=0;arrayList.clear();postInvalidate();}public void moveLeft(){addBack();flag=false;for(int i=0;i<15;i++){if (flag){break;}for(int k=0;k<15;k++) {if (flag){break;}int x = aaa[i][k];if(x==2|x==6){Log.e("x",""+x+"i:"+i+"k:"+k);switch ( aaa[i][k-1]){case 0://左边是墙,不能移动break;case 1://左边是空,可以移动if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i][k-1]=2;break;case 3://左边是空箱子if(aaa[i][k-2]==5){//箱子左边是花aaa[i][k-2]=4;aaa[i][k-1]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i][k-2]==1){//箱子左边是空aaa[i][k-2]=3;aaa[i][k-1]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 4://左边是满箱子if(aaa[i][k-2]==5){//箱子左边是花aaa[i][k-2]=4;aaa[i][k-1]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i][k-2]==1){//箱子左边是空aaa[i][k-2]=3;aaa[i][k-1]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 5://左边是花if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i][k-1]=6;break;}flag=true;}}}postInvalidate();ifPass();}public void moveRight(){addBack();flag=false;for(int i=0;i<15;i++){if (flag){break;}for(int k=0;k<15;k++) {int x = aaa[i][k];if (flag){break;}if(x==2|x==6){Log.e("x",""+x+"i:"+i+"k:"+k);switch ( aaa[i][k+1]){case 0://右边是墙,不能移动break;case 1://右边是空,可以移动if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i][k+1]=2;break;case 3://右边是空箱子if(aaa[i][k+2]==5){//箱子右边是花aaa[i][k+2]=4;aaa[i][k+1]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i][k+2]==1){//箱子右边是空aaa[i][k+2]=3;aaa[i][k+1]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 4://右边是满箱子if(aaa[i][k+2]==5){//箱子右边是花aaa[i][k+2]=4;aaa[i][k+1]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i][k+2]==1){//箱子右边是空aaa[i][k+2]=3;aaa[i][k+1]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 5://右边是花if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i][k+1]=6;break;}flag=true;}}}postInvalidate();ifPass();}public void moveUp(){addBack();flag=false;for(int i=0;i<15;i++){if (flag){break;}for(int k=0;k<15;k++) {int x = aaa[i][k];if (flag){break;}if(x==2|x==6){Log.e("x",""+x+"i:"+i+"k:"+k);switch ( aaa[i-1][k]){case 0://上边是墙,不能移动break;case 1://上边是空,可以移动if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i-1][k]=2;break;case 3://上边是空箱子if(aaa[i-2][k]==5){//箱子上边是花aaa[i-2][k]=4;aaa[i-1][k]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i-2][k]==1){//箱子上边是空aaa[i-2][k]=3;aaa[i-1][k]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 4://上边是满箱子if(aaa[i-2][k]==5){//箱子上边是花aaa[i-2][k]=4;aaa[i-1][k]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i-2][k]==1){//箱子上边是空aaa[i-2][k]=3;aaa[i-1][k]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 5://上边是花if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i-1][k]=6;break;}flag=true;}}}postInvalidate();ifPass();}public void moveDown(){addBack();flag=false;for(int i=0;i<15;i++){if (flag){break;}for(int k=0;k<15;k++) {int x = aaa[i][k];if (flag){break;}if(x==2|x==6){Log.e("x",""+x+"i:"+i+"k:"+k);switch ( aaa[i+1][k]){case 0://下边是墙,不能移动break;case 1://下边是空,可以移动if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i+1][k]=2;break;case 3://下边是空箱子if(aaa[i+2][k]==5){//箱子下边是花aaa[i+2][k]=4;aaa[i+1][k]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i+2][k]==1){//箱子下边是空aaa[i+2][k]=3;aaa[i+1][k]=2;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 4://下边是满箱子if(aaa[i+2][k]==5){//箱子下边是花aaa[i+2][k]=4;aaa[i+1][k]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else if(aaa[i+2][k]==1){//箱子下边是空aaa[i+2][k]=3;aaa[i+1][k]=6;if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}}else{}//是其他则不能移动break;case 5://下边是花if(x==6){aaa[i][k]=5;}else{aaa[i][k]=1;}aaa[i+1][k]=6;break;}flag=true;}}}postInvalidate();ifPass();}public void ifPass(){flag=false;for(int i=0;i<15;i++){if (flag){break;}for(int k=0;k<15;k++) {int x = aaa[i][k];if (flag){break;}if(x==3){//还有空箱子flag=true;}}}if (!flag){//没有一个空箱子mPassLitener.pass();}}public void moveBack(){if(arrayList.size()>0){this.aaa=(arrayList.get(arrayList.size()-1));postInvalidate();arrayList.remove(arrayList.size()-1);}}public void addBack(){if(kk>299){arrayList.clear();kk=0;}if(arrayList.size()>99){arrayList.remove(0);}for(int i=0;i<15;i++){for(int k=0;k<15;k++){ccc[kk][i][k]=aaa[i][k];}}arrayList.add(ccc[kk]);kk++;}}

activity  :

package com.jisai.materialdesigndemo.tuixiangzhi;import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;import com.jisai.materialdesigndemo.R;import java.util.ArrayList;public class MainActivity_tuixiangzhi extends AppCompatActivity{ArrayList<int[][]> arrayList=new ArrayList<>();Button up,down,left,right,back,nextup,nextdown;View_tuixiangzhi myImageView_circle;Toolbar mToolbar;int     LV=1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tuixiangzhi);LV_data lv_data=new LV_data();arrayList=lv_data.arrayList;mToolbar = (Toolbar) findViewById(R.id.toolbar);// mToolbar.setBackgroundColor(0xFF42B1CD);mToolbar.setTitle("推箱子(第"+LV+"关)");       //设置标题mToolbar.setTitleTextColor(Color.parseColor("#ffffff"));    //设置标题颜色setSupportActionBar(mToolbar);getSupportActionBar().setDisplayHomeAsUpEnabled(true);mToolbar.setNavigationOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// onBackPressed();finish();//Toast.makeText(getApplicationContext(),"返回",Toast.LENGTH_SHORT).show();}});myImageView_circle= (View_tuixiangzhi) findViewById(R.id.nnn);myImageView_circle.setPassLitener(new View_tuixiangzhi.PassLitener() {@Overridepublic void pass() {final AlertDialog.Builder normalDialog =new AlertDialog.Builder(MainActivity_tuixiangzhi.this);normalDialog.setTitle("恭喜你");normalDialog.setMessage("真厉害,你已通过本关!");normalDialog.setPositiveButton("下一关",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if(LV<arrayList.size()){LV=LV+1;myImageView_circle.setaaa(arrayList.get(LV-1));mToolbar.setTitle("推箱子(第"+LV+"关)");       //设置标题}else{final Snackbar snackbar = Snackbar.make(up, "已是最后一关", Snackbar.LENGTH_LONG);snackbar.show();snackbar.setAction("确定", new View.OnClickListener() {@Overridepublic void onClick(View view) {snackbar.dismiss();}});}}});// 显示normalDialog.show();}});up= (Button) findViewById(R.id.shang);down= (Button) findViewById(R.id.xia);left= (Button) findViewById(R.id.zuo);right= (Button) findViewById(R.id.you);back= (Button) findViewById(R.id.back);nextup= (Button) findViewById(R.id.shangyi);nextdown= (Button) findViewById(R.id.xiayi);up.setOnClickListener(cccc);down.setOnClickListener(cccc);left.setOnClickListener(cccc);right.setOnClickListener(cccc);back.setOnClickListener(cccc);nextup.setOnClickListener(cccc);nextdown.setOnClickListener(cccc);}View.OnClickListener cccc = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.shang:myImageView_circle.moveUp();break;case R.id.xia:myImageView_circle.moveDown();break;case R.id.zuo:myImageView_circle.moveLeft();break;case R.id.you:myImageView_circle.moveRight();break;case R.id.back:myImageView_circle.moveBack();break;case R.id.shangyi:if(LV>1){LV=LV-1;myImageView_circle.setaaa(arrayList.get(LV-1));mToolbar.setTitle("推箱子(第"+LV+"关)");       //设置标题}break;case R.id.xiayi:if(LV<arrayList.size()){LV=LV+1;myImageView_circle.setaaa(arrayList.get(LV-1));mToolbar.setTitle("推箱子(第"+LV+"关)");       //设置标题}else{final Snackbar snackbar = Snackbar.make(up, "已是最后一关", Snackbar.LENGTH_LONG);snackbar.show();snackbar.setAction("确定", new View.OnClickListener() {@Overridepublic void onClick(View view) {snackbar.dismiss();}});}break;}}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_tuixiangzhi, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.item1) {myImageView_circle.setaaa(arrayList.get(LV-1));return true;}return super.onOptionsItemSelected(item);}}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"xmlns:app="http://schemas.android.com/apk/res-auto"tools:context="com.jisai.materialdesigndemo.caipu.CaipuItemActivity"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"app:layout_collapseMode="pin"android:elevation="6dp"android:background="?attr/colorPrimary"app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"app:layout_scrollFlags="scroll|enterAlways"/><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/bg3"><com.jisai.materialdesigndemo.tuixiangzhi.View_tuixiangzhiandroid:id="@+id/nnn"android:layout_width="match_parent"android:layout_height="wrap_content" /><RelativeLayoutandroid:layout_alignParentBottom="true"android:layout_width="match_parent"android:layout_height="150dp"><Buttonandroid:id="@+id/back"android:layout_width="40dp"android:layout_centerInParent="true"android:layout_height="40dp"android:background="@drawable/back2"android:layout_margin="15dp"/><Buttonandroid:id="@+id/shang"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/s_s"android:layout_above="@+id/back"android:layout_alignLeft="@+id/back"/><Buttonandroid:id="@+id/xia"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/d_s"android:layout_below="@+id/back"android:layout_alignLeft="@+id/back"/><Buttonandroid:id="@+id/zuo"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/l_s"android:layout_toLeftOf="@+id/back"android:layout_alignTop="@+id/back"/><Buttonandroid:id="@+id/you"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/r_s"android:layout_toRightOf="@+id/back"android:layout_alignTop="@+id/back"/><Buttonandroid:id="@+id/shangyi"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/l_n"android:layout_marginBottom="40dp"android:layout_marginLeft="15dp"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="30dp"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_marginLeft="20dp"android:text="上一关"/><Buttonandroid:id="@+id/xiayi"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/r_n"android:layout_marginBottom="40dp"android:layout_marginRight="15dp"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginRight="20dp"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:text="下一关"/></RelativeLayout></RelativeLayout></LinearLayout>

关卡数据(二位数组),我加了40关,太长这里就贴一点。

package com.jisai.materialdesigndemo.tuixiangzhi;import java.util.ArrayList;/*** Created by Administrator on 17-4-11.*/
public class LV_data {final   ArrayList<int[][]>arrayList = new ArrayList<>();LV_data(){int[][] LV_1 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,5,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,1,3,5,0,0,0,0,0},{0,0,0,0,5,3,2,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,3,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,5,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_1);int[][] LV_2 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,2,1,1,0,0,0,0,0,0,0,0},{0,0,0,0,1,3,3,0,0,0,0,0,0,0,0},{0,0,0,0,1,3,1,0,0,0,5,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,5,0,0,0,0},{0,0,0,0,0,0,1,1,1,1,5,0,0,0,0},{0,0,0,0,0,1,1,1,0,1,1,0,0,0,0},{0,0,0,0,0,1,1,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_2);int[][] LV_3 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},{0,0,0,0,0,3,0,0,0,1,1,1,0,0,0},{0,0,0,0,1,2,1,3,1,1,3,1,0,0,0},{0,0,0,0,1,5,5,0,1,3,1,0,0,0,0},{0,0,0,0,0,5,5,0,1,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_3);int[][] LV_4 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},{0,0,0,0,0,2,3,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,3,1,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,3,1,0,0,0,0,0,0},{0,0,0,0,0,5,3,1,1,0,0,0,0,0,0},{0,0,0,0,0,5,5,4,5,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_4);int[][] LV_5 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,2,1,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,3,1,1,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,1,0,0,0,0,0,0},{0,0,0,0,5,0,1,0,1,1,0,0,0,0,0},{0,0,0,0,5,3,1,1,0,1,0,0,0,0,0},{0,0,0,0,5,1,1,1,3,1,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_5);int[][] LV_6 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},{0,0,1,1,1,5,0,0,0,1,0,0,0,0,0},{0,0,1,0,1,0,1,1,1,1,0,0,0,0,0},{0,0,1,0,1,3,1,3,0,5,1,0,0,0,0},{0,0,1,0,1,1,4,1,1,0,1,0,0,0,0},{0,0,1,5,0,3,1,3,1,0,1,0,0,0,0},{0,0,0,1,1,1,1,0,1,0,1,0,0,0,0},{0,0,0,1,0,0,0,5,1,1,1,1,2,0,0},{0,0,0,1,1,1,1,1,0,0,1,1,1,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_6);int[][] LV_7 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{0,0,0,1,3,1,5,5,1,3,1,0,0,0,0},{0,0,0,0,3,1,5,5,3,3,2,0,0,0,0},{0,0,0,0,1,1,5,5,1,3,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_7);int[][] LV_8 ={//0是墙,1是空,2是人,3是空箱子,4是满箱子,5是花,6是人加花{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,1,1,1,1,0,0,0,0},{0,0,0,0,0,5,1,3,0,0,1,0,0,0,0},{0,0,0,0,5,5,3,1,3,1,1,2,0,0,0},{0,0,0,0,5,5,1,3,1,3,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};arrayList.add(LV_8);

项目地址:https://github.com/inksnow/Sokoban

CSDN下载:https://download.csdn.net/download/ink_s/11328934

欢迎点星星★★★★★

android 自定义view实现推箱子小游戏。相关推荐

  1. 推箱子android源代码,android自定义view实现推箱子小游戏

    本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...

  2. Android 自定义View实现炮弹射击小游戏

    先看效果图: 这是一个比较简易的射击小游戏,后期可以将圆球,炮筒用其它图片来替换,应该可以变得好看一些.我实现这个效果,主要是为了学习和巩固自定义View的一些知识点.下面我来讲述一下本游戏的设计思路 ...

  3. android开发--推箱子小游戏(二)

    一.前言 迎来第二章的更新啦:使用ListView实现关卡的选择. 本章的内容有点小复杂,毕竟涉及使用了安卓开发中最难用也是最常用的控件之一:ListView 本章可以说是复杂但是单一吧.主要是想大家 ...

  4. Android Studio实现推箱子小游戏

    项目目录 一.项目概述 二.开发环境 三.详细设计 四.运行演示 五.项目总结 六.源码获取 一.项目概述 推箱子是一款非常受欢迎的益智游戏,游戏的玩法简单,但是需要玩家具备一定的逻辑思维能力和空间感 ...

  5. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  6. PLC也能制作小游戏----Codesys编写推箱子小游戏

    1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...

  7. [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)

    完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...

  8. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  9. 简单的c语言推箱子程序,完整版本的推箱子小游戏,最简单的纯C语言打造

    /*推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 左 ...

最新文章

  1. js php 实现日历签到_Js 实现每日签到打卡轨迹功能。
  2. 2020年10月GitHub上最热门的开源项目
  3. [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络
  4. select、poll、epoll之间的区别
  5. 学php5还是php7,学习猿地-php5.*与php7.* 区别
  6. 需做勿畏拖 效能更轻松
  7. HDU2216:Game III(BFS)
  8. DataTable/DataSet汇出Excel
  9. bat文件备份MySQL数据库
  10. Java编程:切面条
  11. 2022五一数学建模b题完成代码
  12. Python入门教程(从小白到高级)(新版)
  13. 官方正式(简/繁/英/日/韩文) Windows XP sp3 下载
  14. Excel教程: Excel的窗口冻结与拆分
  15. 国内quora_处理Quora不真诚问题分类问题
  16. gin binding方法汇总
  17. 5万款Lr顶级调色预设合集,精心整理,分类清晰,摄影师调色师必备素材,够用一辈子
  18. RTSP/Onvif视频智能平台EasyNVR播放视频卡顿的原因分析及解决
  19. 小程序UI框架minui
  20. hbuilder运行uniapp,微信开发者工具打开但没有运行项目

热门文章

  1. 软件开发(方法、模型)
  2. 如何使用条码打印机?打印标签?
  3. ubuntu使用ctrl+z中断并kill进程导致显卡无法释放以及nvidia-smi命令阻塞
  4. 安装 Zend Studio 报错:0x80070666
  5. 国防科大计算机考博大纲,2020年国防科技大学数字信号处理考博大纲
  6. SGX程序员开发手册
  7. Python抢票项目源码
  8. png、jpg、gif、webp这些图片格式分别什么时候使用
  9. Unity Shader总结(十)——Cubemap、镜子、玻璃、程序纹理
  10. 【调剂】西安建筑科技大学信息与控制工程学院2023年硕士研究生招生拟接收调剂专业公告...