android小游戏 飞机躲子弹
16lz
2021-01-26
最近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 ArrayListbullets = 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
更多相关文章
- Android软键盘监听KeyboardWatcher
- Android(安卓)开发:glide圆角正确实现方法
- Android高手进阶教程(九)之 ----Android(安卓)Handler的使用
- Android实现简单水波纹效果
- Android(安卓)checkCallingPermission()方法返回值问题
- Android命令行编译方法,不用Eclipse IDE
- android4.3 截屏功能的尝试与失败分析
- Android生命周期组件Lifecycle使用详解
- Unity3D与android交互