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()监听鼠标坐标变化。

时间: 2024-10-12 06:52:34

android小游戏 飞机躲子弹的相关文章

android小游戏模版—重力感应

好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比较多,比如这类游戏有:神庙逃亡,极品飞车,平衡球,三围重力迷宫,重力赛车等. 首先什么是重力感应,重力感应是指现在手机中常用的一个器件,及加速度传感器.当手机静止时,加速度就是重力,所以一般也叫做重力传感器.这个硬件可以感应加速度的变化,转化为数据提供给系统.还有一种传感器是陀螺仪,检测围绕某轴的旋转动作,是利用有质量的刚体的在做旋转或震动时,如果发生垂直于旋转或震动轴的旋转,因为惯性会产生垂直于旋转或震动轴的柯

android 小游戏 ---- 数独(一)

segment 1 android 小游戏 ----  数独(一) 规则:在9X9的棋盘中,每个横行和竖列中的9个格子都包含数字1至9,不重复, 且每个黑色粗实线围住的9个格子都包含数字1至9,不重复. 既然涉及到棋盘,那就少不了绘图,我们知道在android中绘图的工作是由UI线程完成的, 一般是指主线程,而android系统设定UI绘图线程超过5秒不响应就会报异常,所以一般在 子线程中进行数据的计算,然后将消息发给UI线程,使之更新界面. 在Java中我们可以通过View来绘图,在默认情况下

android 小游戏 ---- 数独(四)

segment 4 android 小游戏 ----  数独(四) 好的,棋盘绘制出来了.那么我们如何在空白方格中填写数字呢? 这时按钮就发挥出来它的作用了. 我们在控制器类game中设置一个标志,标示当前用户想要填写的数字, 可以通过监听器监听当前用户点击是哪个按钮,然后用game的set方法设置一下. 首先在MainActivity.java 中设置一下监听器. public class MainActivity extends Activity { private Game game; p

android 小游戏 ---- 数独(三)

segment 3 android 小游戏 ----  数独(三) 好的,既然要把数独棋盘中初始提示数字绘制出来,我们就要先了解数独的一些特点. 数独棋盘中总共是81个数字,那我们是否可以用一个数组来代表整个棋盘对应的数字呢想象我们初始化一个9x9的数组,private int[] sudoku = new int[9*9] //初始化数据 private int[] sudoku = new int[9*9]; 这里使用一维数组,当然使用二维数组更加明了直接,这个随个人喜好. 那么我们可以让

Android开发系列(十六):【Android小游戏成语连连看】第二篇

写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统竟然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发工程款然后开始项目了,想想有工资进账,心里也为我那干瘪的钱包小兴奋了一把. 闲话不多说了,今天我们来分析下这个小游戏的工作原理以及核心代码的解析: 工作原理: "主界面"以及"关卡界面"不多说了,这两个是直接写了xml文件, 然后,我们在"游戏界面"的搭建是: 用java代码动态生成了这个界面,在界面中通

软件工程 Android小游戏 猜拳大战

一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Android系统下的节奏大师,自己也就考虑做一个类似的,然后自己写技术水平有限,还是在学习Android阶段,自己就想到可以写一个猜拳的比较小游戏. 这是一款基于Android平台小游戏—猜拳大战,简单,易操作,趣味强,训练反应速度,内存小,没有广告,安全. 最大的特点:训练人的反应速度. 游戏规则:在3

介绍一款Android小游戏--交互式人机对战五子棋

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编写了一个小游戏--交互式人机对战五子棋,自娱自乐.之所以称之为交互式人机对战五子棋,一是因为在进入人机对战模式这前,你可以任意设置好开局,同时,在对战过程中,你可以看到机器的思考过程,还可以标识出每一个落子点的优劣势:二是因为可以为机器增加游戏经验,使得机器越来越聪明.希望喜欢五子棋的同学能够喜欢,

Android开发系列(十五):【Android小游戏成语连连看】第一篇

学了一个多月安卓,因为暑假的时候要给朋友说写个小游戏,而且也想检测下自己的能力,所以说从7号开始就着手写这个小游戏了,前前后后带上课到今天总算是写完了,但是写的这个小游戏还是有很多问题,但是还好,勉强能跑起来,一些瑕疵就不要在乎太多了,毕竟咱又不准备发布供别人下载. APK安装包下载链接(我给放在百度云盘了,可以直接点击下载):http://pan.baidu.com/s/1bnxpQrH 代码文件下载:(放在CSDN的下载那里了,不需要积分):http://download.csdn.net/

基于cocos2d开发的android小游戏——採花仙

/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos2d-x上.废话不多说,代码例如以下.*/ watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlub29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/South