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打开相机和打开相册
打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 Intent cameraIntent = new Intent(MediaSto ...
- MVC 生成图片,下载文件
/// <summary> /// 生成图片 /// </summary> /// <param name="collection"></ ...
- 数据存储与IO(一)
应用程序沙盒简介:iOS应用程序只能在系统为它分配的文件区域内读写文件,这个区域就是此应用程序的沙盒,Application目录下的GUID文件夹就是沙盒,这个文件夹是系统随机命名的.程序所有的非代码 ...
- DB2常用sql命令
DB2 清除数据库序列缓存 alter sequence wfr.wfr_bill_histories_s nocache; 创建清空所有表数据脚本select 'alter table '||RT ...
- EMC Documentum DQL整理(四)
1.List files and folder in specified folder pathSELECT DISTINCT s.object_name, fr.r_folder_path FROM ...
- 5个示例带你学习AngularJS
直到现在,你或许已经听说过AngularJS了,一个改变你对web应用思考方式,由谷歌开发的令人兴奋的开源框架.关于它的文章已经写得非常之多,但我发现还是要写些给那些更喜欢快速且实际例子的开发者.当今 ...
- SQL Server 2000 :选择许可模式及更改
在SQL Server企业版中,有一个许可模式概念,有两种许可模式:“处理器许可证”和“每客户”模式.“处理器许可证”模式表示允许几个CPU运行SQL Server,“每客户”决定的是客户端连接数. ...
- Activiti之 Exclusive Gateway
一.Exclusive Gateway Exclusive Gateway(也称为XOR网关或更多技术基于数据的排他网关)经常用做决定流程的流转方向.当流程到达该网关的时候,所有的流出序列流到按照已定 ...
- 创建mysql存储过程,调用 及删除
//创建表 create table test ( aid ) primary key auto_increment , nickname ), addtime ) ) //查看表结构 show co ...
- 烂泥:使KVM显示VM的IP地址及主机名
本文由秀依林枫提供友情赞助,首发于烂泥行天下. KVM虚拟化学习已经有一段时间了,现在虚拟化软件比较多,对比了下目前使用比较多的VMware Vsphere.发现在不进入VM系统的情况下,Vspher ...