完整工程已打包放在我的资源文件中  https://download.csdn.net/download/huangshuai147/11151692

 

package com.example.pushbox;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.IntentFilter;import android.util.Log;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;public class GameMain extends Activity {electricity elect;public LinearLayout ll = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_game_main);        ll = (LinearLayout)findViewById(R.id.ll);    }    /*     * 通过判断用户点击按钮来做相应的动作     * 通过Intent携带数据,Game类根据数据判断应该加载的那类游戏视图     * continue= no是新游戏     * continue = yes是需要加载存储的游戏状态,来继续上一次未完成的游戏     * */    public void onClick(View view)    {    Intent in=null;    switch (view.getId())     {case R.id.btn_newgame:in=new Intent(GameMain.this, Game.class);in.putExtra("continue", "no");//新游戏startActivity(in);break;case R.id.btn_exit: //游戏退出isFinish();break;case R.id.btn_about:  //游戏介绍in=new Intent(GameMain.this, about.class);startActivity(in);break;case R.id.btn_continue: //继续游戏in=new Intent(this, Game.class);in.putExtra("continue", "yes");startActivity(in);break;}    }    public void isFinish()    {    AlertDialog.Builder dl1 = new AlertDialog.Builder(this);dl1.setTitle("Warnning!");dl1.setMessage("Do you want exit?");dl1.setPositiveButton("yes", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {GameMain.this.finish();}});dl1.setNeutralButton("no", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dl1.create();dl1.show();    }    @Override    protected void onPause()    {    // TODO Auto-generated method stub    super.onPause();    unregisterReceiver(elect);    }        @Override    protected void onResume()    {    // TODO Auto-generated method stub    super.onResume();    elect=new electricity();    IntentFilter intentFilter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);    registerReceiver(elect, intentFilter);    }       @Override    public boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater =new MenuInflater(this);        inflater.inflate(R.menu.activity_game_main, menu);        return super.onCreateOptionsMenu(menu);    }        @Override                         public boolean onOptionsItemSelected(MenuItem item) {    // TODO Auto-generated method stub    switch (item.getItemId())     {case R.id.music:ll.setBackgroundResource(R.drawable.pc3);Intent in=new Intent(GameMain.this,music.class);startActivity(in);break;case R.id.help:Log.i("info", "help");Intent inn=new Intent(GameMain.this,help.class);startActivity(inn);ll.setBackgroundResource(R.drawable.pc4);break;case R.id.bgset:    findBgset();    ll.setBackgroundResource(R.drawable.pc2);    break;    case R.id.explain:    findAbout();    ll.setBackgroundResource(R.drawable.pc1);    break;}        return super.onOptionsItemSelected(item);    }      public void findBgset()    {    AlertDialog.Builder dll = new AlertDialog.Builder(this);    final String[] Bgset = {"跑车1","跑车2","跑车3","跑车4"};    dll.setTitle("Which favorite's is select");    dll.setIcon(R.id.bgset);    dll.setItems(Bgset, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog,int which)    {    String s="你的选择是:";    if(Bgset[which]=="跑车1")    {    s += "跑车1";    ll.setBackgroundResource(R.drawable.pc1);    }    else if(Bgset[which]=="跑车2")    {    s += "跑车2";    ll.setBackgroundResource(R.drawable.pc2);    }    else if(Bgset[which]=="跑车3")    {    s += "跑车3";    ll.setBackgroundResource(R.drawable.pc3);    }    else    {    s += "跑车4";    ll.setBackgroundResource(R.drawable.pc4);    }    Toast.makeText(GameMain.this,s,1000).show();    }    });    dll.create();    dll.show();    }    public void findAbout()    {    String s="最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上下左右移动,来将箱子推到指定地点记得几年前,《推箱子》在PC机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对《推箱子》赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。 \n推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由Thinking Rabbit 公司首次发行,名“仓库番”。箱子只可以推, 不可以拉, 而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。\n推箱子游戏是一种老少皆宜的益智游戏,既可以开发青少年学生的智力,又可以防止老年痴呆症,全家一起攻关还可以促进家庭和睦,何乐而不为?";    Toast.makeText(GameMain.this,s,1000).show();    }}

 

package com.example.pushbox;import java.util.ArrayList;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.Toast;public class GameView extends View {public int gate=Game.gate;private int manx;private int many;private float xoff=10;private float yoff=20;private int tilesize;public int maprow=0;public int mapcolumn=0;private int width=0;private int heith=0;private Bitmap pic[]=null;final int WALL=1;final int GOAL=2;final int ROAD=3;final int BOX=4;final int BOXATGOAL=5;final int MAN=6;private Paint paint;private Game game=null;public  int [][]map=null;private int [][]tem;//原来的地图float currentx;float currenty;public GameView(Context context, AttributeSet attrs) {super(context, attrs);//实例化game,后面用game=(Game)context;/*WindowManager = manager = game.getWindowManager();width = manager.getDefaultDisplay().getWidth();heith = manager.getDefaultDisplay().getHeight(); *///上面的那种获取宽高改成下面的那种//获取当前游戏屏幕的宽和高DisplayMetrics dm = getResources().getDisplayMetrics();width= dm.widthPixels;heith= dm.heightPixels;this.setFocusable(true);/* * 这里不再是initMap() * 我们需要判断一下,用户单击的时哪个按钮 * 如果是continue按钮,则需要使用存储的地图game.stored * 如果是New Game按钮,则直接使用initMap()从MapList中调取地图*/if(game.continue_game){map=game.stored;getMapdetail();getmanposition();}else{initMap();}initpic();}public void initMap() {map=getmap(gate);getMapdetail();getmanposition();list.clear();}public int [][]getmap(int grate){return MapList.getmap(grate);}//获取地图的行列数,地图边距,每个图片的大小,保存当前游戏的原始地图private void getMapdetail(){maprow=map.length;mapcolumn=map[gate].length;xoff=30;yoff=60;int t=maprow>mapcolumn?maprow:mapcolumn;int s1=(int) Math.floor((width-2*xoff)/t);int s2=(int) Math.floor((heith-xoff)/t);tilesize=s1y&&(currentyx+tilesize){moveRight();}if(currentxx&&(currentxy+tilesize){moveDown();}if(currenty list=new ArrayList();public void back() {if(list.size()>0){CurrentMap proMap=list.get(list.size()-1);map=proMap.getmap();getmanposition();list.remove(list.size()-1);}else{Toast.makeText(getContext(), "You Can't Back", 1).show();}}public void storyMap(int map[][]){CurrentMap cMap=new CurrentMap(map);list.add(cMap);if(list.size()>10)list.remove(0);}}

 

package com.example.pushbox;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.widget.LinearLayout;import android.widget.Toast;public class Game extends Activity {public LinearLayout lll = null;public static int gate=0;GameView gameView;//定义布尔值,表示游戏是继续 还是新游戏public boolean continue_game;private String s;//s用来接收Intent传递的数据@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//默认是新游戏continue_game=false;//Intent传递过来的值s=getIntent().getStringExtra("continue");/* * 假如接收的是yes,说明用户单击的是Continue按钮 * 那么,continue_game为真时,使用loadMap()来加载内存数据*/if(s.equals("yes"))continue_game=true;if(continue_game)loadMap();setContentView(R.layout.game);gameView=(GameView) findViewById(R.id.mygameview);lll = (LinearLayout)findViewById(R.id.lll);//接收布局}//当界面运行时,根据用户的爱好//调用Musichandle类的play()方法决定是否播放音乐@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();if(music.isMusicCheck(this))musicHandle.play(this, R.raw.bg);}//游戏暂停,调用Musichandle类的stop()方法停止音乐@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();musicHandle.stop(this);/* * 游戏暂停时,游戏数据需要存储,游戏的地图信息,行列数都要存储 * savegame()的返回值时一个字符串,它的功能就是把二维数组转化为字符串 * maprow.mapcolumn保存的时游戏的行列数*///新添的代码getPreferences(MODE_PRIVATE).edit().putLong("gate",gameView.gate).commit();getPreferences(MODE_PRIVATE).edit().putString("maps",saveGame()).commit();getPreferences(MODE_PRIVATE).edit().putLong("maprow",gameView.maprow).commit();getPreferences(MODE_PRIVATE).edit().putLong("mapcolumn",gameView.mapcolumn).commit();}/* * saveGame()的返回值时一个字符串,它的功能就是把一个二维数组转化成字符串 * 先把二维数组转化为一维数组 * 然后把 一维数组使用StringBuilder类的append()方法变为一个StringBuilder * 最后使用Object类中的toString()方法把StringBuilder转化为String对象*/public String saveGame() {int[] saved = new int[gameView.maprow * gameView.mapcolumn];for (int i = 0; i < gameView.maprow; i++)for (int j = 0; j < gameView.mapcolumn; j++){saved[i * gameView.mapcolumn + j] = gameView.map[i][j];}StringBuilder buf = new StringBuilder();      for (int element : saved)      {         buf.append(element);      }      String s=buf.toString();      return s;}/* * 如果取值不成功,则还是第一关 * first就是第一关转化的字符串*/String first="0011100000121000001311111114342112346111111141000001210000011100";public int[][]stored;/* * loadMap()的作用时在存储空间里取出字符串的游戏数值,并还原为二维数组*/public void loadMap() {gate = (int)getPreferences(MODE_PRIVATE).getLong("gate",0);String mapstring =getPreferences(MODE_PRIVATE).getString("maps", first);int ii=(int) getPreferences(MODE_PRIVATE).getLong("maprow", 8);int jj=(int) getPreferences(MODE_PRIVATE).getLong("mapcolumn", 8);int []maps=new int [mapstring.length()];for(int i=0;i

 

package com.example.pushbox;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;public class about extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.about);}}

 

package com.example.pushbox;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class electricity extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(intent.ACTION_BATTERY_CHANGED)){int level=intent.getIntExtra("level", 0);int total=intent.getIntExtra("scale", 100);Toast.makeText(context, "当前电量是:"+(level*100)/total+"%",1).show();}}}

 

package com.example.pushbox;import android.app.Activity;import android.os.Bundle;import android.widget.MediaController;import android.widget.Toast;import android.widget.VideoView;public class help extends Activity {VideoView vv;  @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.help);        vv=(VideoView) findViewById(R.id.videoview1);        vv.setVideoPath("android.resource://"+getPackageName()+"/"+R.raw.gate1);        vv.setMediaController(new MediaController(this));        vv.start();        vv.requestFocus();            }}

 

package com.example.pushbox;public class MapList {static int map[][][]={{{0,0,1,1,1,0,0,0},{0,0,1,2,1,0,0,0},{0,0,1,3,1,1,1,1},{1,1,1,4,3,4,2,1},{1,2,3,4,6,1,1,1},{1,1,1,1,4,1,0,0},{0,0,0,1,2,1,0,0},{0,0,0,1,1,1,0,0}},{{1,1,1,1,1,0,0,0,0},{1,3,3,6,1,0,0,0,0},{1,3,4,4,1,0,1,1,1},{1,3,4,3,1,0,1,2,1},{1,1,1,3,1,1,1,2,1},{0,1,1,3,3,3,3,2,1},{0,1,3,3,3,1,3,3,1},{0,1,3,3,3,1,1,1,1},{0,1,1,1,1,1,0,0,0}},{{0,1,1,1,1,1,1,1,0,0},{0,1,3,3,3,3,3,1,1,1},{1,1,4,1,1,1,3,3,3,1},{1,6,3,3,4,3,3,4,3,1},{1,3,2,2,1,3,4,3,1,1},{1,1,2,2,1,3,3,3,1,0},{0,1,1,1,1,1,1,1,1,0}},{{0,1,1,1,1,0},{1,1,3,3,1,0},{1,3,6,4,1,0},{1,1,4,3,1,1},{1,1,3,4,3,1},{1,2,4,3,3,1},{1,2,2,3,2,1},{1,1,1,1,1,1}}};static int count=map.length;public static int [][] getmap(int grade){int temp[][];if(grade>=0&&grade

 

package com.example.pushbox;import android.app.Activity;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaPlayer;import android.os.Bundle;import android.os.IBinder;import android.preference.PreferenceActivity;import android.preference.PreferenceManager;import android.widget.Toast;public class music extends PreferenceActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.music_setting);}public static boolean isMusicCheck(Context context) {return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("music", true);}}

 

package com.example.pushbox;import android.content.Context;import android.media.MediaPlayer;public class musicHandle {private static MediaPlayer mp=null;public static void play(Context context,int resource){stop(context);if(music.isMusicCheck(context)){mp=MediaPlayer.create(context, resource);mp.setLooping(true);mp.start();}}public static void stop(Context context) {if(mp!=null){mp.stop();mp.release();mp=null;}}}

 

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

 

 

 

 

 

更多相关文章

  1. Android学习札记48:将TextView中的指定文字转换为表情显示
  2. android 开源项目列表
  3. Android横竖屏切换的解决方法
  4. android猜数字游戏
  5. android 动画学习系列(一)
  6. Activity之间传递类对象
  7. Android(安卓)build.gradle buildConfigField 配置数组
  8. Android开发便签9:在android资源文件中定义字符串数组
  9. Android(安卓)如何判断CPU是32位还是64位

随机推荐

  1. Android 技术专题系列之十三 -- 与PC同步
  2. Android视图优化之Merge,ViewStub基本使用
  3. Android SDK 2.2 和ADT插件下载
  4. android 的各种manager
  5. 【Android每日一练】Android项目结构详解
  6. Android中显示在线PDF
  7. [置顶] Android 多渠道打包:使用Gradle和A
  8. android listviewListview中的button点击
  9. RelativeLayout布局属性
  10. Android Actionbar自定义标题栏