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 ...
随机推荐
- css浮动
一.浮动介绍 历史: 浮动属性产生之初是为了实现“文字环绕”的效果,让文字环绕图片在网页实现类似word中“图文混排”. 定位方式: 浮动让元素脱离正常流,向父容器的左边或右边移动直到碰到包含容器的边 ...
- javascript中,对于this指向的浅见
# this的指向在函数创建的时候确定不了.只有在执行的时候,才可以确定. ## 1 . 这里的this指向window window.fn(); 所以this.user是undefined func ...
- PHP5中的stdClass
PHP5中新增stdClass 官方手册参考:http://www.php.net/manual/en/language.oop5.basic.php#92123 stdClass类是PHP的一个内部 ...
- C# 多线程,论多核时代爱恨情仇
为什么要学习多线程? 2010年1月21日是10年某市公务员考试的报名截止日.因从下午2点开始,用于报名的北京市人事考试网瘫痪,原定于昨天下午5点截止的报名时间延迟至今天上午11点. 2011年3月1 ...
- HBase应用开发回顾与总结系列之二:RowKey行键设计规范
2. RowKey行键设计规范 2.1. RowKey四大特性 2.1.1 字符串类型 虽然行键在HBase中是以byte[]字节数组的形式存储的,但是建议在系统开发过程中将其数据类型设置为Strin ...
- Java api 入门教程 之 JAVA的SYSTEM类
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类.其内部的成员变 ...
- 使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
1.查询待导出表Ad中的数据. SELECT * FROM [DB_Temp].[dbo].[Ad] 2.编写存储过程. --将表数据生成SQL脚本的存储过程 CREATE PROCEDURE dbo ...
- ARM体系结构
工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...
- Linux rpm 查询
[root@wang /]# rpm -qa // 查看安装所有包 [root@wang /]# rpm -qa |grep vim // 查询所安装的包 +包名 [root@wang /]# rpm ...
- android WebView网页浏览器
组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...