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

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

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

只放出主要的类,

 public class GameView extends SurfaceView implements SurfaceHolder.Callback{

     private boolean threadFlag;
private int view_width;
private int view_height;
private int plane_x;
private int plane_y;
private boolean isLive;
private boolean isBao;
private int speed;
private int time;
private int time1;
private Date startTime;
private Date endTime;
private SurfaceHolder surfaceHolder;
private Canvas canvas;
private String TAG = "提示";
private Bitmap bgBitmap ;
private Bitmap planeBitmap;
private Bitmap[] baoBitmaps;
private Bullet bullet;
private Plane plane;
private Context context;
private SharedPreferences preferences;
private SharedPreferences.Editor editor; ArrayList<Bullet> bullets = new ArrayList<Bullet>(); public GameView(Context context,int speed) {
super(context);
surfaceHolder = this.getHolder();
surfaceHolder.addCallback(this);
this.context = context;
this.speed = speed; //System.out.println(getWidth());
//System.out.println(getHeight()); // TODO Auto-generated constructor stub
} public void init(){
bgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
planeBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.plane);
baoBitmaps = new Bitmap[];
baoBitmaps[] = BitmapFactory.decodeResource(getResources(), R.drawable.e1);
for(int i=;i<;i++){
baoBitmaps[i+] = BitmapFactory.decodeResource(getResources(), R.drawable.e2+i);
}
for(int i=;i<;i++){
baoBitmaps[i+] = BitmapFactory.decodeResource(getResources(), R.drawable.e10+i);
}
Constant.SetView(getWidth(), getHeight());
view_width = getWidth();
view_height = getHeight();
plane = new Plane(view_width/-planeBitmap.getWidth()/,view_height-planeBitmap.getHeight()-,planeBitmap.getWidth(),planeBitmap.getHeight());
startTime = new Date();
isLive = true;
isBao = false;
threadFlag = true;
for(int i=;i<;i++)
{
bullet = new Bullet(view_width/, view_height/, speed);
bullets.add(bullet);
}
preferences = context.getSharedPreferences("test",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
editor = preferences.edit();
time = preferences.getInt("one", ); /*editor.putInt("one", 0);
editor.putInt("two", 0);
editor.putInt("three", 0);
editor.commit();*/
} private Thread mThread = new Thread(new Runnable() { @Override
public void run() {
while(threadFlag){ canvas = surfaceHolder.lockCanvas(); Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawPaint(paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); canvas.drawBitmap(bgBitmap, , , null); for(int i=;i<bullets.size();i++){
bullet = bullets.get(i);
bullet.drawSelf(canvas);
if(bullet.getRect().intersect(plane.getRect())){ isLive = false;
} }
if(isLive){
canvas.drawBitmap(planeBitmap,plane.getPlane_x(), plane.getPlane_y(), null);
}
else{
if(!isBao){
for(int i=;i<;i++){ canvas.drawBitmap(baoBitmaps[i], plane.getPlane_x(), plane.getPlane_y(), null);
}
isBao = true;
endTime = new Date(); time1 = (int) ((endTime.getTime()-startTime.getTime())/); }
paint.setColor(Color.RED);
paint.setTextSize();
canvas.drawText("GAME_OVER!", Constant.getGAME_WIDTH()/-, Constant.getGAME_HIGHT()/-, paint);
paint.setTextSize();
canvas.drawText("你存活了"+(endTime.getTime()-startTime.getTime())/+"秒", Constant.getGAME_WIDTH()/-, Constant.getGAME_HIGHT()/, paint);
if(time<time1){
editor.putInt("one", time1);
editor.commit();
}
paint.setTextSize();
paint.setColor(Color.YELLOW);
canvas.drawText("最高记录秒"+preferences.getInt("one", ), Constant.getGAME_WIDTH()/-, Constant.getGAME_HIGHT()/+, paint); //Log.i(TAG, "GAME_OVER!"); } if(canvas !=null){
surfaceHolder.unlockCanvasAndPost(canvas); } try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}); @Override
public void surfaceCreated(SurfaceHolder holder) { init(); mThread.start(); //canvas.drawBitmap(imageBitmap, 0, 0, null);
} @Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//System.out.println("监听到了");
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if((int)event.getX()>&&
(int)event.getX()<view_width-plane.getPlane_width()&&
(int)event.getY()>&&
(int)event.getY()<view_height-plane.getPlane_height()){
plane.setPlane_x((int)event.getX());
plane.setPlane_y((int)event.getY());
} break;
case MotionEvent.ACTION_MOVE:
if((int)event.getX()>&&
(int)event.getX()<view_width-plane.getPlane_width()&&
(int)event.getY()>&&
(int)event.getY()<view_height-plane.getPlane_height()){
plane.setPlane_x((int)event.getX());
plane.setPlane_y((int)event.getY());
}
break;
case MotionEvent.ACTION_UP:
if((int)event.getX()>&&
(int)event.getX()<view_width-plane.getPlane_width()&&
(int)event.getY()>&&
(int)event.getY()<view_height-plane.getPlane_height()){
plane.setPlane_x((int)event.getX());
plane.setPlane_y((int)event.getY());
}
break;
} //return super.onTouchEvent(event);
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub }
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub }
}

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

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

  1. android小游戏模版—重力感应

               好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...

  2. 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人

    8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...

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

    一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Andr ...

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

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编 ...

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

    写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统居然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发project款然后開始项目了.想想有工资进账,心里也为 ...

  6. Android小游戏:功夫蛇 团队开发经验总结

    前言 曾经没有代码管理的习惯,不用回版本控制工具.这种陋习虽然让原来千穿百孔的代码远离了实现,但这种逃避未必就是一件好事吧;). 于是从博客中挖出了原来的文章,并千辛万苦找到了最早的代码贴出来. 这篇 ...

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

            学了一个多月安卓.由于暑假的时候要给朋友说写个小游戏.并且也想检測下自己的能力,所以说从7号開始就着手写这个小游戏了,前前后后带上课到今天总算是写完了,可是写的这个小游戏还是有非常多问 ...

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

    /*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...

  9. android 小游戏 ---- 数独(二)

    > 首先创建一个自己的View类   -->继承SurfaceView并实现SurfaceHolder.Callback接口    --> SurfaceView.getHolder ...

随机推荐

  1. Android消息机制入门

    接着处理<Android 网络图片查看器>中出现的问题 使用添加子线程,修改原程序: package com.wuyudong.imagesviewer; import java.io.I ...

  2. Android数据存储五种方式总结

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用Cont ...

  3. 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则

    单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...

  4. [转载]50个Demo展示HTML5无穷的魅力

    Flash和HTML5的比较已经成为现在最热门的主题之一,我们不去争论哪个好哪个不好.和HTML5在很酷的动画和简单的游戏等方面一样,除非HTML5在未来几年有一些重大发展,否则Flash在富内容网页 ...

  5. CSS3 rgba

    复制粘贴: <!DOCTYPE html > <html > <head> <meta charset="utf-8"> <t ...

  6. Java内存泄露简述

    Java的一个最显著的优势是内存管理.你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收.然而,情况并不是这样简单,内存泄露还是经常会在Java应用程序中出现. 本篇 ...

  7. ORACLE查看表空间对象

    ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME       AS TABLESPACE_NAME    ...

  8. [20140829]spinlock导致cpu居高不下

    背景: 出现cpu高于常规的告警 排查: 1.开跟踪,没有发现cup特别高的查询 2.查看内核cpu使用量,看是否是sql server 端引起 3.查看负荷,是否负荷特别高这里使用 batch re ...

  9. 使用C/C++,赋值运算时发生的转换

    使用C/C++,赋值运算时发生的转换主要有以下四种情况 一: 两边类型不同: 结果: 自动完成类型转换! 二: 长数赋给短数: 结果: 截取长数的低位送给短数! 三: 短数赋给长数: 结果: 原来是什 ...

  10. ASP.NET MVC 拓展ActionResult实现Html To Pdf 导出

    之前实现了html直接转换为word文档的功能,那么是否也同样可以直接转换为pdf文档呢,网上搜了下html to pdf 的开源插件有很多 如:wkhtmltopdf,pdfsharp,itexts ...