android小游戏 飞机躲子弹
最近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小游戏 飞机躲子弹的更多相关文章
- android小游戏模版—重力感应
好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...
- 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人
8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...
- 软件工程 Android小游戏 猜拳大战
一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Andr ...
- 介绍一款Android小游戏--交互式人机对战五子棋
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编 ...
- Android开发系列(十六):【Android小游戏成语连连看】第二篇
写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统居然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发project款然后開始项目了.想想有工资进账,心里也为 ...
- Android小游戏:功夫蛇 团队开发经验总结
前言 曾经没有代码管理的习惯,不用回版本控制工具.这种陋习虽然让原来千穿百孔的代码远离了实现,但这种逃避未必就是一件好事吧;). 于是从博客中挖出了原来的文章,并千辛万苦找到了最早的代码贴出来. 这篇 ...
- Android开发系列(十五):【Android小游戏成语连连看】第一篇
学了一个多月安卓.由于暑假的时候要给朋友说写个小游戏.并且也想检測下自己的能力,所以说从7号開始就着手写这个小游戏了,前前后后带上课到今天总算是写完了,可是写的这个小游戏还是有非常多问 ...
- 基于cocos2d开发的android小游戏——採花仙
/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...
- android 小游戏 ---- 数独(二)
> 首先创建一个自己的View类 -->继承SurfaceView并实现SurfaceHolder.Callback接口 --> SurfaceView.getHolder ...
随机推荐
- Android 常见对话框
1.对话框通知(Dialog Notification) 当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成. 下面代码将打开一个如图所示的对话框: public void ...
- java你可能不知道的事(2)--堆和栈
在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...
- iOS 跳转到系统的设置界面
跳到健康设置 上网找了一下 你会发现很难找到.代码如下 不信你试试 . NSURL *url = [NSURL URLWithString:@"prefs:root=Privacy& ...
- iOS iOS9.0 的CoreLocation定位
一.简介 iOS9.0如果当前处于前台授权状态,默认是不可以后台获取用户位置. 如果在前台授权下,让其能获取到后台定位,该怎么办 可以设置以下属性为YES,就可以继续获取后台位置,但是会出现蓝条 使用 ...
- OBST(Optimal Binary Tree最优二叉搜索树)
二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的 ...
- IT行业常见职位职业路线图
我曾经面试过一些计算机相关毕业的应届生,问他希望做什么工作时,他回答只要是软件开发就好了,再细问一下你了解到的软件开发是怎样的?除了软件开发,还有其它什么工作?就答不出来了. 这里我先给出一张IT知识 ...
- Java基础知识学习(四)
高级特性:内部类.抽象类 内部类(Inner Class),有时也称为嵌套类(Nested Class) 允许在一个类(或方法.语句块)的内部定义另一个类 使用内部类的主要原因有: 内部类可以访问外部 ...
- JS中的事件
事件中的几种实现方式 Dom0时代 1.直接在html的属性中写JS代码 <div onclick="alert(4);">Div1 Element</div&g ...
- mysql regexp用法
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...
- DGbroker主备切换
1.检查DG是否正常 DGMGRL> show configuration; Configuration - dgc Protection Mode: MaxProtection Databas ...