最近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】中兴ZTE sdcard路径的问题

    测试机: ZTE U950 现象: 用Environment.getExternalStorageDirectory()取到的路径是/mnt/sdcard 真相: /mnt/sdcard/是一个空文件 ...

  2. drawable以及Bitmap的基本操作

    一.drawable  图形对象,可以转载常用格式的图像,可能是(位图)Bitmapdrawable,或者shapedrawable(图形),还可能是多种其他图片格式GIF,PNG,JEPG 二.Bi ...

  3. EventBus使用详解(一)

    一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...

  4. Spring Batch 批处理框架

    <Spring Batch 批处理框架>基本信息作者: 刘相 出版社:电子工业出版社ISBN:9787121252419上架时间:2015-1-24出版日期:2015 年2月开本:16开页 ...

  5. ASP.NET features need application service database support

    搭建的web程序出现如上图所示的错误 原因程序使用以下ASP.NET 特性 Membership (the SqlMembershipProvider class). Role management ...

  6. Consul 启动命令

    服务端: nohup consul agent -server -bootstrap-expect 1 -config-dir /etc/consul.d/ -data-dir /var/opt/co ...

  7. oracle11G使用DGbroker创建dg

    1.环境: a.主机环境:centos6.5 b.软件环境:oracle 11.2.0.4 c.主机信息: DG1:192.168.100.51(数据库sid:atest) DG2:192.168.1 ...

  8. oracle存储过程、函数、序列、包

    一. 存储过程 1. 语法 create or replace procedure procedureName(seqName varchar2) is /*声明变量*/ n ); cursor cu ...

  9. Eliot

    T.S. Eliot - Biographical Thomas Stearns Eliot (1888-1965) was born in St. Louis, Missouri, of an ol ...

  10. Stanford机器学习笔记-7. Machine Learning System Design

    7 Machine Learning System Design Content 7 Machine Learning System Design 7.1 Prioritizing What to W ...