android 自定义view实现推箱子小游戏。
自定义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实现推箱子小游戏。相关推荐
- 推箱子android源代码,android自定义view实现推箱子小游戏
本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...
- Android 自定义View实现炮弹射击小游戏
先看效果图: 这是一个比较简易的射击小游戏,后期可以将圆球,炮筒用其它图片来替换,应该可以变得好看一些.我实现这个效果,主要是为了学习和巩固自定义View的一些知识点.下面我来讲述一下本游戏的设计思路 ...
- android开发--推箱子小游戏(二)
一.前言 迎来第二章的更新啦:使用ListView实现关卡的选择. 本章的内容有点小复杂,毕竟涉及使用了安卓开发中最难用也是最常用的控件之一:ListView 本章可以说是复杂但是单一吧.主要是想大家 ...
- Android Studio实现推箱子小游戏
项目目录 一.项目概述 二.开发环境 三.详细设计 四.运行演示 五.项目总结 六.源码获取 一.项目概述 推箱子是一款非常受欢迎的益智游戏,游戏的玩法简单,但是需要玩家具备一定的逻辑思维能力和空间感 ...
- 手把手教你使用Python实现推箱子小游戏(附完整源码)
文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...
- PLC也能制作小游戏----Codesys编写推箱子小游戏
1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...
- [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)
完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 简单的c语言推箱子程序,完整版本的推箱子小游戏,最简单的纯C语言打造
/*推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 左 ...
最新文章
- js php 实现日历签到_Js 实现每日签到打卡轨迹功能。
- 2020年10月GitHub上最热门的开源项目
- [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络
- select、poll、epoll之间的区别
- 学php5还是php7,学习猿地-php5.*与php7.* 区别
- 需做勿畏拖 效能更轻松
- HDU2216:Game III(BFS)
- DataTable/DataSet汇出Excel
- bat文件备份MySQL数据库
- Java编程:切面条
- 2022五一数学建模b题完成代码
- Python入门教程(从小白到高级)(新版)
- 官方正式(简/繁/英/日/韩文) Windows XP sp3 下载
- Excel教程: Excel的窗口冻结与拆分
- 国内quora_处理Quora不真诚问题分类问题
- gin binding方法汇总
- 5万款Lr顶级调色预设合集,精心整理,分类清晰,摄影师调色师必备素材,够用一辈子
- RTSP/Onvif视频智能平台EasyNVR播放视频卡顿的原因分析及解决
- 小程序UI框架minui
- hbuilder运行uniapp,微信开发者工具打开但没有运行项目
热门文章
- 软件开发(方法、模型)
- 如何使用条码打印机?打印标签?
- ubuntu使用ctrl+z中断并kill进程导致显卡无法释放以及nvidia-smi命令阻塞
- 安装 Zend Studio 报错:0x80070666
- 国防科大计算机考博大纲,2020年国防科技大学数字信号处理考博大纲
- SGX程序员开发手册
- Python抢票项目源码
- png、jpg、gif、webp这些图片格式分别什么时候使用
- Unity Shader总结(十)——Cubemap、镜子、玻璃、程序纹理
- 【调剂】西安建筑科技大学信息与控制工程学院2023年硕士研究生招生拟接收调剂专业公告...