最近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 bullets = new ArrayList(); 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){ 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     @Override154     public void surfaceCreated(SurfaceHolder holder) {155         156         init();157         158         mThread.start();159         160         //canvas.drawBitmap(imageBitmap, 0, 0, null);161     }162 163     164     @Override165     public boolean onTouchEvent(MotionEvent event) {166         // TODO Auto-generated method stub167         //System.out.println("监听到了");168         switch(event.getAction()){169         case MotionEvent.ACTION_DOWN:170             if((int)event.getX()>0&&171                     (int)event.getX()172                     (int)event.getY()>0&&173                     (int)event.getY()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()182                     (int)event.getY()>0&&183                     (int)event.getY()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()191                     (int)event.getY()>0&&192                     (int)event.getY()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     @Override203     public void surfaceChanged(SurfaceHolder holder, int format, int width,204             int height) {205         // TODO Auto-generated method stub206         207     }208     @Override209     public void surfaceDestroyed(SurfaceHolder holder) {210         // TODO Auto-generated method stub211         212     }213 }

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

 

转载于:https://www.cnblogs.com/lolybj/p/6166408.html

更多相关文章

  1. Android软键盘监听KeyboardWatcher
  2. Android(安卓)开发:glide圆角正确实现方法
  3. Android高手进阶教程(九)之 ----Android(安卓)Handler的使用
  4. Android实现简单水波纹效果
  5. Android(安卓)checkCallingPermission()方法返回值问题
  6. Android命令行编译方法,不用Eclipse IDE
  7. android4.3 截屏功能的尝试与失败分析
  8. Android生命周期组件Lifecycle使用详解
  9. Unity3D与android交互

随机推荐

  1. 简析mysql字符集导致恢复数据库报错问题
  2. MySQL数据库表分区注意事项大全【推荐】
  3. mysql利用参数sql_safe_updates限制updat
  4. 解析MySQL中存储时间日期类型的选择问题
  5. Mysql主从同步Last_IO_Errno:1236错误解
  6. MySQL优化之使用连接(join)代替子查询
  7. MYSQL子查询和嵌套查询优化实例解析
  8. 浅谈mysql的子查询联合与in的效率
  9. mysql in语句子查询效率慢的优化技巧示例
  10. MySQL批量去掉某个字段中的空格