zoukankan      html  css  js  c++  java
  • android小游戏 飞机躲子弹

    最近android老师让每人写一个小东西,因为之前学awt时写过一个java版的飞机躲子弹,所以这次想写成android版的。

    文件直接导入就行http://files.cnblogs.com/files/lolybj/PlaneGame.rar

    项目比较简单。主要用了SurfaceView,

    只放出主要的类,

      1 public class GameView extends SurfaceView implements SurfaceHolder.Callback{
      2     
      3     
      4     private boolean threadFlag;
      5     private int view_width;
      6     private int view_height;
      7     private int plane_x;
      8     private int plane_y;
      9     private boolean isLive;
     10     private boolean isBao;
     11     private int speed;
     12     private int time;
     13     private int time1;
     14     private Date startTime;
     15     private Date endTime;
     16     private SurfaceHolder surfaceHolder;
     17     private Canvas canvas;
     18     private String TAG = "提示";
     19     private Bitmap bgBitmap ;
     20     private Bitmap planeBitmap;
     21     private Bitmap[] baoBitmaps;
     22     private Bullet bullet;
     23     private Plane plane;
     24     private Context context;
     25     private SharedPreferences preferences;
     26     private SharedPreferences.Editor editor;
     27     
     28     ArrayList<Bullet> bullets = new ArrayList<Bullet>();
     29     
     30     
     31     public GameView(Context context,int speed) {
     32         super(context);
     33         surfaceHolder = this.getHolder();
     34         surfaceHolder.addCallback(this);
     35         this.context = context;
     36         this.speed = speed;
     37         
     38         //System.out.println(getWidth());
     39         //System.out.println(getHeight());
     40         
     41         
     42         // TODO Auto-generated constructor stub
     43     }
     44     
     45     public void init(){
     46          bgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
     47          planeBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.plane);
     48          baoBitmaps = new Bitmap[20];
     49          baoBitmaps[0] = BitmapFactory.decodeResource(getResources(), R.drawable.e1);
     50          for(int i=0;i<9;i++){
     51              baoBitmaps[i+1] = BitmapFactory.decodeResource(getResources(), R.drawable.e2+i);
     52          }
     53          for(int i=0;i<7;i++){
     54              baoBitmaps[i+9] = BitmapFactory.decodeResource(getResources(), R.drawable.e10+i);
     55          }
     56          Constant.SetView(getWidth(), getHeight());
     57          view_width = getWidth();
     58          view_height = getHeight();
     59          plane = new Plane(view_width/2-planeBitmap.getWidth()/2,view_height-planeBitmap.getHeight()-150,planeBitmap.getWidth(),planeBitmap.getHeight());
     60          startTime = new Date();
     61          isLive = true;
     62          isBao = false;
     63          threadFlag = true;
     64          for(int i=0;i<20;i++)
     65          {
     66              bullet = new Bullet(view_width/2, view_height/2, speed);
     67              bullets.add(bullet);
     68          }
     69          preferences = context.getSharedPreferences("test",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
     70          editor = preferences.edit();
     71          time = preferences.getInt("one", 0);
     72          
     73          /*editor.putInt("one", 0);
     74          editor.putInt("two", 0);
     75          editor.putInt("three", 0);
     76          editor.commit();*/
     77     }
     78     
     79     
     80     private Thread mThread = new Thread(new Runnable() {
     81         
     82         @Override
     83         public void run() {
     84             while(threadFlag){
     85                 
     86                 canvas = surfaceHolder.lockCanvas();
     87                 
     88                 Paint paint = new Paint();    
     89                 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));    
     90                 canvas.drawPaint(paint);    
     91                 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
     92                 
     93                 canvas.drawBitmap(bgBitmap, 0, 0, null);
     94                 
     95                 for(int i=0;i<bullets.size();i++){
     96                     bullet = bullets.get(i);
     97                     bullet.drawSelf(canvas);
     98                     if(bullet.getRect().intersect(plane.getRect())){
     99                         
    100                         isLive = false;
    101                     }
    102                     
    103                 }
    104                 if(isLive){
    105                     canvas.drawBitmap(planeBitmap,plane.getPlane_x(), plane.getPlane_y(), null);
    106                 }
    107                 else{
    108                     if(!isBao){
    109                         for(int i=0;i<16;i++){
    110                             
    111                             canvas.drawBitmap(baoBitmaps[i], plane.getPlane_x(), plane.getPlane_y(), null);
    112                         }
    113                         isBao = true;
    114                         endTime = new Date();
    115                         
    116                         time1 = (int) ((endTime.getTime()-startTime.getTime())/1000);
    117                         
    118                         
    119                     }
    120                     paint.setColor(Color.RED);
    121                     paint.setTextSize(80);
    122                     canvas.drawText("GAME_OVER!", Constant.getGAME_WIDTH()/2-200, Constant.getGAME_HIGHT()/2-100, paint);
    123                     paint.setTextSize(30);
    124                     canvas.drawText("你存活了"+(endTime.getTime()-startTime.getTime())/1000+"", Constant.getGAME_WIDTH()/2-100, Constant.getGAME_HIGHT()/2, paint);
    125                     if(time<time1){
    126                         editor.putInt("one", time1);
    127                         editor.commit();
    128                     }
    129                     paint.setTextSize(25);
    130                     paint.setColor(Color.YELLOW);
    131                     canvas.drawText("最高记录秒"+preferences.getInt("one", 5), Constant.getGAME_WIDTH()/2-70, Constant.getGAME_HIGHT()/2+100, paint);
    132                     
    133                     //Log.i(TAG, "GAME_OVER!");
    134                     
    135                     
    136                 }
    137                 
    138                 if(canvas !=null){
    139                     surfaceHolder.unlockCanvasAndPost(canvas);
    140                     
    141                 }
    142                 
    143                 try {
    144                     Thread.sleep(40);
    145                 } catch (InterruptedException e) {
    146                     e.printStackTrace();
    147                 }
    148             }
    149         }
    150     });
    151     
    152     
    153     @Override
    154     public void surfaceCreated(SurfaceHolder holder) {
    155         
    156         init();
    157         
    158         mThread.start();
    159         
    160         //canvas.drawBitmap(imageBitmap, 0, 0, null);
    161     }
    162 
    163     
    164     @Override
    165     public boolean onTouchEvent(MotionEvent event) {
    166         // TODO Auto-generated method stub
    167         //System.out.println("监听到了");
    168         switch(event.getAction()){
    169         case MotionEvent.ACTION_DOWN:
    170             if((int)event.getX()>0&&
    171                     (int)event.getX()<view_width-plane.getPlane_width()&&
    172                     (int)event.getY()>0&&
    173                     (int)event.getY()<view_height-plane.getPlane_height()){
    174                 plane.setPlane_x((int)event.getX());
    175                 plane.setPlane_y((int)event.getY());
    176             }
    177             
    178             break;
    179         case MotionEvent.ACTION_MOVE:
    180             if((int)event.getX()>0&&
    181                     (int)event.getX()<view_width-plane.getPlane_width()&&
    182                     (int)event.getY()>0&&
    183                     (int)event.getY()<view_height-plane.getPlane_height()){
    184                 plane.setPlane_x((int)event.getX());
    185                 plane.setPlane_y((int)event.getY());
    186             }
    187             break;
    188         case MotionEvent.ACTION_UP:
    189             if((int)event.getX()>0&&
    190                     (int)event.getX()<view_width-plane.getPlane_width()&&
    191                     (int)event.getY()>0&&
    192                     (int)event.getY()<view_height-plane.getPlane_height()){
    193                 plane.setPlane_x((int)event.getX());
    194                 plane.setPlane_y((int)event.getY());
    195             }
    196             break;
    197         }
    198         
    199         //return super.onTouchEvent(event);
    200         return true;
    201     }
    202     @Override
    203     public void surfaceChanged(SurfaceHolder holder, int format, int width,
    204             int height) {
    205         // TODO Auto-generated method stub
    206         
    207     }
    208     @Override
    209     public void surfaceDestroyed(SurfaceHolder holder) {
    210         // TODO Auto-generated method stub
    211         
    212     }
    213 }

    主要的方法,重写surfaceCreated方法,本类的入口。init()方法数据初始化。thread线程方法,绘制坐标移动后的画面。重新onTouchEvent()监听鼠标坐标变化。

  • 相关阅读:
    css
    ubuntu 解压zip 文件乱码
    常用 Git 命令清单
    phpstorm git配置
    github ssh秘钥配置
    ubuntu 安装phpunit
    ubuntu 安装php xdebug
    nginx压缩,缓存
    mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
    putty登录显示IP
  • 原文地址:https://www.cnblogs.com/lolybj/p/6166408.html
Copyright © 2011-2022 走看看