Android 打飞机 小游戏 的实现 - 画面移动 对象封装 碰撞效果
打飞机小游戏
*1、画背景
*2、画飞机
*3、画小怪
*4、画子弹
*——背景,飞机、小怪、子弹各有draw和move方法
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GameView gameView = new GameView(MainActivity.this);
setContentView(gameView);
}
}
public class GameView extends SurfaceView implements Callback {
private int indexbo=0;
private SurfaceHolder holder;
private Paint paint;
private Background background;
private Hero hero;
private ArrayList<BulletHero> bullets_hero;
private int [][]enemysData={{1,1},{0,0},{1,1,1,0},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1},{1,1},{0,0},{1,1,1,0,1},{0,1,0,1},{1,0,0,1},{1,1,1},{1,0,1,1}};
private ArrayList<Enemy> enemys;
Canvas canvas ;
public GameView(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
paint = new Paint();
background = new Background(context);
hero = new Hero(context);
bullets_hero = new ArrayList<BulletHero>();
enemys = new ArrayList<Enemy>();
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
isRunning = true;
new ViewThread().start();
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
isRunning = false;
}
private boolean isRunning = false;
class ViewThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while (isRunning) {
canvas = holder.lockCanvas();
if (canvas == null)
continue;
canvas.drawColor(0xFFFFFFFF);
drawView(canvas);
logic();
if (canvas != null)
holder.unlockCanvasAndPost(canvas);
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
int count = 0;
private void logic() {
// TODO Auto-generated method stub
background.logic();
count++;
if (count % 2 == 0) {
BulletHero bullet = new BulletHero(getContext(), hero.getX()
+ hero.getBitmap1().getWidth() / 2, hero.getY());
bullets_hero.add(bullet);
}
if(count%20==0){
int[]is=enemysData[indexbo];
for(int i=0;i<is.length;i++){
Enemy enemy = new Enemy(getContext(),is[i]);
enemys.add(enemy);
}
indexbo++;
if(indexbo>enemysData.length-1)
indexbo=0;
}
//检测碰撞
for(int i=0;i<enemys.size();i++){
Enemy enemy=enemys.get(i);
for(int j=0;j<bullets_hero.size();j++){
BulletHero bullet=bullets_hero.get(j);
if(enemy.isCollection(bullet)){
enemys.remove(i);
enemy.drawCollection(canvas,paint);
bullets_hero.remove(j);
}
}
}
}private void drawView(Canvas canvas) {
// TODO Auto-generated method stub
background.draw(canvas, paint);
hero.draw(canvas, paint);
//画子弹
for (BulletHero bullet : bullets_hero) {
bullet.draw(canvas, paint);
bullet.move();
}
//画小怪
for(Enemy e:enemys){
e.draw(canvas,paint);
e.move();
}
}
}
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
hero.move(x, y);
return true;
}
}
public class Background {
private Bitmap bitmap;
private int y,y2,speed,width,height;
public Background(Context context) {
super();
bitmap=BitmapFactory.decodeResource(context.getResources(), R.drawable.background);
y=0;
y2=-852;
speed=10;
}
public void draw(Canvas canvas,Paint paint){
canvas.drawBitmap(bitmap,0,y,paint);
canvas.drawBitmap(bitmap,0,y2,paint);
}
public void logic(){
y+=speed;
y2+=speed;
if(y>800)
// y=-height;
y=-852;
if(y2>800)
// y2=-height;
y2=-852;
}
}
public class BulletHero {
private Bitmap bitmap;
private int x,y,speed;
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
public BulletHero(Context context,int x,int y) {
// TODO Auto-generated constructor stub
bitmap=BitmapFactory.decodeResource(context.getResources(), R.drawable.bullet1);
this.x=x;
this.y=y;
speed=40;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void draw(Canvas canvas,Paint paint){
canvas.drawBitmap(bitmap, x, y, paint);
}
public void move(){
y=y-speed;
}
}
public class Enemy {
private Bitmap bitmap;
private int x, y,speed,type;
public static final int TYPE_UP=0;
public static final int TYPE_DOWN=1;
Context context;
private Bitmap bitmap3;
private Bitmap bitmap4;
public Enemy(Context context,int type){
this.type=type;
this.context=context;
switch(type){
case TYPE_UP:
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy1);
speed=40;
break;
case TYPE_DOWN:
bitmap=BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy2);
speed=30;
break;
}
y=bitmap.getHeight()-100;
x=(int)(Math.random()*480);
if(x>(480-bitmap.getWidth())){
x=480-bitmap.getWidth();
}
}
public void draw(Canvas canvas,Paint paint){
canvas.drawBitmap(bitmap, x, y, paint);
}
public void move(){
y+=speed;
if(type==TYPE_UP)
speed-=2;
}
//碰撞检测
public boolean isCollection(BulletHero bullet){
int left=bullet.getX();
int right=bullet.getX()+bullet.getBitmap().getWidth();
int top=bullet.getY();
int bottom=bullet.getY()+bullet.getBitmap().getHeight();
//左边
if(right<x)
return false;
//右边
if(x+bitmap.getWidth()<left)
return false;
//上边
if(bottom<y)
return false;
//下边
if(y+bitmap.getHeight()<top)
return false;
return true;
}
public void drawCollection(Canvas canvas,Paint paint) {
// TODO Auto-generated method stub
switch(type){
case 0:
bitmap3=BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy1_down1);
canvas.drawBitmap(bitmap3, x, y, paint);
break;
case 1:
bitmap4 = BitmapFactory.decodeResource(context.getResources(), R.drawable.enemy2_down2);
canvas.drawBitmap(bitmap4, x, y, paint);
}
}
}
public class Hero {
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public Bitmap getBitmap1() {
return bitmap1;
}
public void setBitmap1(Bitmap bitmap1) {
this.bitmap1 = bitmap1;
}
public Bitmap getBitmap2() {
return bitmap2;
}
public void setBitmap2(Bitmap bitmap2) {
this.bitmap2 = bitmap2;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
private int x,y;
private Bitmap bitmap1;
private Bitmap bitmap2;
private int count;
public Hero(Context context){
super();
bitmap1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.hero1);
bitmap2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.hero2);
x=240-bitmap1.getWidth()/2;
y=800-bitmap1.getHeight();
}
public void draw(Canvas canvas,Paint paint){
count++;
if(count%2==1)
canvas.drawBitmap(bitmap1, x, y, paint);
else
canvas.drawBitmap(bitmap2, x, y, paint);
}
public void move(int x,int y){
this.x=x-bitmap1.getWidth()/2;
this.y=y-bitmap1.getHeight()/2;
}
}
转载于:https://my.oschina.net/nandecanghai123/blog/1529293
Android 打飞机 小游戏 的实现 - 画面移动 对象封装 碰撞效果相关推荐
- Android 打飞机小游戏 cocos2d
从cocos2d官网上下载合适的框架 导入自己的应用程序中. 1.CCDirector:导演类是游戏当中的组织者和领导者,负责调度游戏当中的一切对象和资源: Director是一个单例,在全部游戏中只 ...
- java打飞机小游戏(跟着网上视频写到)
package 飞机小游戏; //如果觉得好的话,给一点积分哦,太痛苦了,平时下一点资料都得需要 import java.awt.Color; import java.awt.Font; import ...
- Python编写微信打飞机小游戏(三)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(八)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(七)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(十)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(十二)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- 用JAVA写个飞机小游戏玩玩吧
闲来无事写了个飞机小游戏. 设定很简单,子弹打到飞机就结束游戏. 实现步骤如下,有问题可以评论区讨论: 首先建立一个PlayGame项目和它之下的包: MyGameFrame(游戏实现)类: pack ...
- C语言射击类打飞机小游戏
使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会. 在网上查询资料并且和同学讨论之后,对原来的代码有了一些改进, 改进:增加了颜色函数 ...
最新文章
- iOS逆向(1)-密码学(RSA)
- hibernate整合进spring后的事务处理
- 新手学JAVA(六)----处理随机性的数据
- python3.6.5下载-Python
- 现代微波滤波器结构与设计_高功率射频及微波无源器件中的考虑和限制
- ng build command not found(ng命令到底是什么鬼)
- eclipse没有server怎么办
- 排除表_数字高压表(交直流分压器)常见故障分析
- 将cmd添加到鼠标右键,并且在任意目录下可以打开
- 深入解剖 linux内存管理之mmap
- android两种基本联网方式与一种第三方开源项目的使用
- android分享文字到朋友圈,微信,分享朋友圈,只能分享图,文字带不过来,这是什么原因?是BUG吗?...
- 获取打印机状态,判断打印机状态,获取打印机驱动信息
- vue Fullcalendar鼠标放上展示悬浮框 (tippyjs插件的简单使用)
- Linux之ubuntu离线安装软件包
- 热浪(单源最短路问题)
- 【上】CS229 吴恩达机器学习 习题作业答案 problem sets 03 PS03(全部问题解答,欢迎各位前辈指教)
- STM32F407探索者(正点原子的资料)(百度链接)
- 教你在Ubuntu上安装Linux内核6.1
- 点云配准(二)— python open3d ICP方法
热门文章
- 实用的it知识学习_IT榜样 | 寇宇宸:认真听讲是学习知识的绝佳途径
- busybox v1.22.1(debian 1:1.22.0-19) built-in shell(ash)解决方案
- 基于Django框架的视频播放器设计
- 联发科天玑 9200 旗舰芯片,有哪些亮点和不足
- 一路编程,一路迷茫,一路醒悟,接着迷茫,再醒悟再迷茫
- BA-协议-BACnet 协议优势简析
- 华为交换机导入配置_华为交换机怎么配置FTP上传文件?
- 菜鸟笔记-微信分享突然失效的解决
- 学计算机的什么是镜像,一、什么是windows镜像?什么是Ghost?它们有什么优缺点?...
- 计算机报名照片不能小于20kb,公务员考试:上传20KB电子照片难倒不少考生