自己无聊写着玩的,没有注意代码架构和规范阿,大家就当娱乐一下,挺好玩的!我玩了一下午....

package com.example.phonegaptest;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;public class MainActivity extends Activity {int planeX = 160;int planeY = 550;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置无标题requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(new MyView(this));}class MyView extends View {final int BACK_HEIGHT = 1700;private Bitmap back;private Bitmap plane;private Bitmap plane2;ArrayList<Point> bomb = new ArrayList<Point>();ArrayList<Point> foemanBomb = new ArrayList<Point>();int foemanBombTimes = 0;Point foeman = new Point();boolean foemanDied = true;boolean imDied = false;Random random = new Random();Matrix m = new Matrix();int count = 0;final int WIDTH = 320;final int HEIGHT = 600;private int startY = BACK_HEIGHT - HEIGHT;public MyView(Context context) {super(context);setFocusable(true);back = BitmapFactory.decodeResource(getResources(),R.drawable.back_img);plane = BitmapFactory.decodeResource(getResources(),R.drawable.plane);m.setRotate(180);plane2 = Bitmap.createBitmap(plane, 0, 0, plane.getWidth(),plane.getHeight(), m, true);final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 0x123) {startY -= 30;if (startY < 0) {startY = BACK_HEIGHT - HEIGHT;}}invalidate();}};new Timer().schedule(new TimerTask() {@Overridepublic void run() {if (foemanDied) {int x = random.nextInt(320 - 34);int y = random.nextInt(600 - 90);foeman.x = x;foeman.y = y;foemanDied = false;}if (foemanBombTimes++ > 10) {foemanBombTimes = 0;Point point = new Point(foeman.x + 17, foeman.y+ plane2.getHeight());foemanBomb.add(point);}handler.sendEmptyMessage(0x123);}}, 0, 100);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_LEFT:planeX -= 30;if (planeX < 0) {planeX = 0;}break;case KeyEvent.KEYCODE_DPAD_RIGHT:planeX += 30;if (planeX > WIDTH - 34) {planeX = WIDTH - 34;}break;case KeyEvent.KEYCODE_DPAD_DOWN:planeY += 30;if (planeY > HEIGHT - 45) {planeY = HEIGHT - 45;}break;case KeyEvent.KEYCODE_DPAD_UP:planeY -= 30;if (planeY < 0) {planeY = 0;}break;case KeyEvent.KEYCODE_DPAD_CENTER:if (!imDied) {Point point = new Point(planeX + 17, planeY);bomb.add(point);}break;case KeyEvent.KEYCODE_BACK:if (imDied) {count = 0;imDied = false;foeman.x = random.nextInt(320 - 34);foeman.y = random.nextInt(600 - 90);}break;}invalidate();return true;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Bitmap bitmap2 = Bitmap.createBitmap(back, 0, startY, WIDTH, HEIGHT);canvas.drawBitmap(bitmap2, 0, 0, null);if (!imDied) {canvas.drawBitmap(plane, planeX, planeY, null);}Paint paint = new Paint();Paint paint2 = new Paint();paint.setColor(Color.RED);paint2.setColor(Color.WHITE);Iterator iterator = bomb.iterator();if (!foemanDied) {canvas.drawBitmap(plane2, foeman.x, foeman.y, null);Iterator iterator2 = foemanBomb.iterator();while (iterator2.hasNext()) {Point p = (Point) iterator2.next();p.y += 20;if (p.y > 595) {iterator2.remove();}canvas.drawCircle(p.x, p.y, 5, paint2);if (p.x > planeX && p.x < planeX + 34 && p.y > planeY&& p.y < planeY + 45) {imDied = true;}}}while (iterator.hasNext()) {Point p = (Point) iterator.next();p.y -= 10;if (p.y < 0) {iterator.remove();}canvas.drawCircle(p.x, p.y, 5, paint);if (p.x > foeman.x && p.x < foeman.x + 34 && p.y > foeman.y&& p.y < foeman.y + 45) {foemanDied = true;canvas.drawText("nice", foeman.x, foeman.y, paint);count++;}}canvas.drawText("Your score:" + count, 5, 10, paint);if (imDied) {canvas.drawText("Game is over! Press the back key.", planeX,planeY, paint2);}}}
}

源码:http://download.csdn.net/detail/h3c4lenovo/4565429

雷电战机---附源码相关推荐

  1. 【Java游戏开发合集】毕业设计(附源码+资料+课件)

    为正在准备毕业设计的小伙伴们以及想自学一些Java练手项目,小编终于整理出了本套视频课程(附源码+资料+课件),快来白嫖吧!!! 视频教程链接: 全站最全Java游戏合集!毕业设计!(附源码课件)8款 ...

  2. C#共享内存实例 附源码

    原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...

  3. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  4. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 SpringBoot+Echarts用户访问地图可视化 意义 在常 ...

  5. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...

    原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github. ...

  6. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

    黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...

  7. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...

  9. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

最新文章

  1. 为啥不能用uuid做MySQL的主键?
  2. 并行化-你的高并发大杀器
  3. Sprinig泛型依赖注入
  4. OpenCV4.5.x DNN + YOLOv5 C++推理
  5. 中国氢能行业发展现状与投资规划深度研究报告2022-2027年版
  6. Mass对象类型介绍
  7. python日记----2017.8.1
  8. uic计算机科学与技术,北京师范大学-香港浸会大学联合国际学院UIC理工科技学部高招网...
  9. ndk学习19: 使用Eclipse调试so
  10. C#,pdf文件转换成图片文件。
  11. angular 使用rxjs 监听同级兄弟组件数据变化
  12. 高级JAVA码农必须搞清楚它们的区别:instanceof、isInstance、isAssignableFrom
  13. 《利用Python进行数据分析·第2版》第6章 数据加载、存储与文件格式
  14. System.Windows.Forms.ListView
  15. 家庭路由器哪家强:固件漏洞多年不修复,更新无济于事
  16. 在Office 365中使用自助密码重置功能减轻管理员负担(一)功能简介
  17. android在副屏中运行一个应用_android一个app打开另一个app的指定页面
  18. 几万字的博文,你自己会看吗
  19. HandlerSocket
  20. eclipse使用git合并_Eclipse的git插件冲突合并方法

热门文章

  1. 理解COM套间(第二部分)
  2. 教你如何重装电脑系统xp
  3. TypeScript学习笔记(技术胖b站视频)
  4. mysql的int的最大数_mysql int范围与最大值分析
  5. 计算机能够模仿哪些智力活动,信息学奥林匹克竞赛培训教案计划.docx
  6. javascript basical knowledge
  7. 开单大师(开源可定制的房产管理系统) v3.6.4 学习版
  8. 【硅谷问道】 WWDC 17: 开发者的最初观感
  9. 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归
  10. Redis--模糊查询--方法/实例