实例介绍
【实例简介】
【实例截图】
【核心代码】
package com.example.flygame; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import static java.lang.System.in; /** * Created by Administrator on 2017/10/23. */ public class PlayingGameActivity extends AppCompatActivity implements Thread.UncaughtExceptionHandler{ static volatile Boolean rightLongOntouch=false; static volatile Boolean leftLongOntouch=false; static int templife; static Boolean isStoped=false; static Handler handler; static volatile int lifeNumber=3; static volatile int TotalGrade=0; static Thread obstacleThread1; static Thread obstacleThread2; static Thread obstacleThread3; static Thread obstacleThread4; static Thread obstacleThread5; int screenWidth; Game game; Plane plane; List<Obstacle> obstacles; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_playing); initShow(); initHandler(); initThread(); Thread.setDefaultUncaughtExceptionHandler(this); } //初始化handler public void initHandler() { handler=new Handler() { public void handleMessage(Message msg) { Random random=new Random(); ImageView obstacleImageView1 = (ImageView)findViewById(R.id.obstacleView1); ImageView obstacleImageView2 = (ImageView)findViewById(R.id.obstacleView2); ImageView obstacleImageView3 = (ImageView)findViewById(R.id.obstacleView3); ImageView obstacleImageView4 = (ImageView)findViewById(R.id.obstacleView4); ImageView obstacleImageView5 = (ImageView)findViewById(R.id.obstacleView5); final TextView LifeTextView=(TextView)findViewById(R.id.life_textView1) ; final TextView GradeTextView=(TextView)findViewById(R.id.grade_textView1) ; ImageView planeImageView=(ImageView)findViewById(R.id.planeImageView); Obstacle obstacle1=obstacles.get(0); Obstacle obstacle2=obstacles.get(1); Obstacle obstacle3=obstacles.get(2); Obstacle obstacle4=obstacles.get(3); Obstacle obstacle5=obstacles.get(4); switch (msg.what) { case 1: float obstacleY1=obstacles.get(0).getY() obstacles.get(0).getSpeed(); obstacleImageView1.setY(obstacleY1); obstacles.get(0).setY(obstacleY1); break; case 2: float obstacleY2=obstacles.get(1).getY() obstacles.get(1).getSpeed(); obstacleImageView2.setY(obstacleY2); obstacles.get(1).setY(obstacleY2); break; case 3: float obstacleY3=obstacles.get(2).getY() obstacles.get(2).getSpeed(); obstacleImageView3.setY(obstacleY3); obstacles.get(2).setY(obstacleY3); break; case 4: float obstacleY4=obstacles.get(3).getY() obstacles.get(3).getSpeed(); obstacleImageView4.setY(obstacleY4); obstacles.get(3).setY(obstacleY4); break; case 5: float obstacleY5=obstacles.get(4).getY() obstacles.get(4).getSpeed(); obstacleImageView5.setY(obstacleY5); obstacles.get(4).setY(obstacleY5); break; case 6: obstacle1.setEdge(random.nextInt(40) 20); obstacle1.setSpeed(10); obstacle1.setY(0); obstacle1.setX(random.nextInt(screenWidth-50)); obstacleImageView1.setY(obstacle1.getY()); obstacleImageView1.setX(obstacle1.getX()); obstacleImageView1.getLayoutParams().height=obstacle1.getEdge(); obstacleImageView1.getLayoutParams().width=obstacle1.getEdge(); break; case 7: obstacle2.setEdge(random.nextInt(50) 10); obstacle2.setSpeed(obstacle1.getSpeed()); obstacle2.setY(0); obstacle2.setX(random.nextInt(screenWidth-50)); obstacleImageView2.setY(obstacle2.getY()); obstacleImageView2.setX(obstacle2.getX()); obstacleImageView2.getLayoutParams().height=obstacle2.getEdge(); obstacleImageView2.getLayoutParams().width=obstacle2.getEdge(); break; case 8: obstacle3.setEdge(random.nextInt(50) 10); obstacle3.setSpeed(obstacle1.getSpeed()); obstacle3.setY(0); obstacle3.setX(random.nextInt(screenWidth-50)); obstacleImageView3.setY(obstacle3.getY()); obstacleImageView3.setX(obstacle3.getX()); obstacleImageView3.getLayoutParams().height=obstacle3.getEdge(); obstacleImageView3.getLayoutParams().width=obstacle3.getEdge(); break; case 9: obstacle4.setEdge(random.nextInt(50) 10); obstacle4.setSpeed(obstacle1.getSpeed()); obstacle4.setY(0); obstacle4.setX(random.nextInt(screenWidth-50)); obstacleImageView4.setY(obstacle4.getY()); obstacleImageView4.setX(obstacle4.getX()); obstacleImageView4.getLayoutParams().height=obstacle4.getEdge(); obstacleImageView4.getLayoutParams().width=obstacle4.getEdge(); break; case 10: obstacle5.setEdge(random.nextInt(50) 10); obstacle5.setSpeed(obstacle1.getSpeed()); obstacle5.setY(0); obstacle5.setX(random.nextInt(screenWidth-50)); obstacleImageView5.setY(obstacle5.getY()); obstacleImageView5.setX(obstacle5.getX()); obstacleImageView5.getLayoutParams().height=obstacle5.getEdge(); obstacleImageView5.getLayoutParams().width=obstacle5.getEdge(); break; case 11: LifeTextView.setText(String.valueOf(lifeNumber)); break; case 12: GradeTextView.setText(String.valueOf(String.valueOf(TotalGrade))); reSetSpeed(); break; case 13: if(plane.getX()>=10) { planeImageView.setX(plane.getX()-10); plane.setX(plane.getX()-10); } break; case 14: if(plane.getX()<screenWidth-10-plane.getHeight()) { planeImageView.setX(plane.getX() 10); plane.setX(plane.getX() 10); } break; } } }; } /** public void onRestart() { super.onRestart(); TotalGrade=0; lifeNumber=3; initThread(); }*/ //改变物体运动的速度 public void reSetSpeed() { for(Obstacle b:obstacles) { b.setSpeed(b.getSpeed() TotalGrade/500); } } //页面跳转 public void checkChange() { TextView t=(TextView)findViewById(R.id.life_textView1); String temp=t.getText().toString(); Log.d("int :::::::::",temp); int a = Integer.parseInt(temp); if(a<=0) { Intent intent=new Intent(PlayingGameActivity.this,GameOverActivity.class); intent.putExtra("grade",TotalGrade); startActivity(intent); this.onDestroy(); } } //初始化线程 public void initThread() { final Random random=new Random(); obstacleThread1=new Thread(new Runnable() { @Override public void run() { while (lifeNumber>=1) { try { Thread.sleep(100); Message s=new Message(); s.what=1; handler.sendMessage(s); if(check(obstacles.get(0))==true) { lifeNumber--; Message m12=new Message(); m12.what=11; handler.sendMessage(m12); Message m14=new Message(); m14.what=6; handler.sendMessage(m14); Thread.sleep(random.nextInt(500) 500); checkChange(); } else if((obstacles.get(0).getY() obstacles.get(0).getEdge())>=(plane.getY() plane.getHeight())) { TotalGrade =50; Message m13=new Message(); m13.what=12; handler.sendMessage(m13); Message m=new Message(); m.what=6; handler.sendMessage(m); Thread.sleep(random.nextInt(500) 500); } } catch (InterruptedException e) { e.printStackTrace(); } } } }); obstacleThread2=new Thread(new Runnable() { @Override public void run() { while (lifeNumber>=1) { try { Thread.sleep(100); Message s=new Message(); s.what=2; handler.sendMessage(s); if(check(obstacles.get(1))==true) { lifeNumber--; Message m22=new Message(); m22.what=11; handler.sendMessage(m22); Message m24=new Message(); m24.what=7; handler.sendMessage(m24); Thread.sleep(random.nextInt(500) 500); checkChange(); } if((obstacles.get(1).getY() obstacles.get(1).getEdge())>=(plane.getY() plane.getHeight())) { TotalGrade =50; Message m23=new Message(); m23.what=12; handler.sendMessage(m23); Message m=new Message(); m.what=7; handler.sendMessage(m); Thread.sleep(random.nextInt(500) 500); } } catch (InterruptedException e) { e.printStackTrace(); } } } }); obstacleThread3=new Thread(new Runnable() { @Override public void run() { while (lifeNumber>=1) { try { Thread.sleep(100); Message s=new Message(); s.what=3; handler.sendMessage(s); if(check(obstacles.get(2))==true) { lifeNumber--; Message m32=new Message(); m32.what=11; handler.sendMessage(m32); Message m34=new Message(); m34.what=8; handler.sendMessage(m34); Thread.sleep(random.nextInt(500) 500); checkChange(); } if((obstacles.get(2).getY() obstacles.get(2).getEdge())>=(plane.getY() plane.getHeight())) { TotalGrade =50; Message m33=new Message(); m33.what=12; handler.sendMessage(m33); Message m=new Message(); m.what=8; handler.sendMessage(m); Thread.sleep(random.nextInt(500) 500); } } catch (InterruptedException e) { e.printStackTrace(); } } } }); obstacleThread4=new Thread(new Runnable() { @Override public void run() { while (lifeNumber>=1) { try { Thread.sleep(100); Message s=new Message(); s.what=4; handler.sendMessage(s); if(check(obstacles.get(3))==true) { lifeNumber--; Message m42=new Message(); m42.what=11; handler.sendMessage(m42); Message m44=new Message(); m44.what=9; handler.sendMessage(m44); Thread.sleep(random.nextInt(500) 500); checkChange(); } if((obstacles.get(3).getY() obstacles.get(3).getEdge())>=(plane.getY() plane.getHeight())) { TotalGrade =50; Message m43=new Message(); m43.what=12; handler.sendMessage(m43); Message m=new Message(); m.what=9; handler.sendMessage(m); Thread.sleep(random.nextInt(500) 500); } } catch (InterruptedException e) { e.printStackTrace(); } } } }); obstacleThread5=new Thread(new Runnable() { @Override public void run() { while (lifeNumber>=1) { try { Thread.sleep(100); Message s=new Message(); s.what=5; handler.sendMessage(s); if(check(obstacles.get(4))==true) { lifeNumber--; Message m52=new Message(); m52.what=11; handler.sendMessage(m52); Message m54=new Message(); m54.what=10; handler.sendMessage(m54); Thread.sleep(random.nextInt(500) 500); checkChange(); } if((obstacles.get(4).getY() obstacles.get(4).getEdge())>=(plane.getY() plane.getHeight())) { TotalGrade =50; Message m53=new Message(); m53.what=12; handler.sendMessage(m53); Message m=new Message(); m.what=10; handler.sendMessage(m); Thread.sleep(random.nextInt(500) 500); } } catch (InterruptedException e) { e.printStackTrace(); } } } }); obstacleThread1.start(); Timer timer=new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { obstacleThread2.start(); obstacleThread3.start(); } },new Random().nextInt(500)); timer.schedule(new TimerTask(){ @Override public void run() { obstacleThread4.start(); obstacleThread5.start(); } },new Random().nextInt(500)); } //判断障碍物是否碰到飞机 public boolean check(Obstacle obstacle) { boolean b1=Math.sqrt(Math.pow((obstacle.getX()-plane.getX()-plane.getHeight()/2),2) Math.pow(obstacle.getY() obstacle.getEdge()-plane.getY()-plane.getHeight()/2,2))<plane.getHeight()/2; boolean b2=Math.sqrt(Math.pow((obstacle.getX() obstacle.getEdge()-plane.getX()-plane.getHeight()/2),2) Math.pow(obstacle.getY() obstacle.getEdge()-plane.getY()-plane.getHeight()/2,2))<plane.getHeight()/2; return b1||b2; } //为页面初始化做准备 public void initShow() { initObstacle();//初始化障碍物类 initObstaclesPosition();//设置障碍物的位置 initPlane();//初始化飞机类 initPlaneImageView();//初始化飞机图片的位置 initGame();//初始化游戏类 setButtonsInvalid();//设置返回菜单和继续游戏两个按钮不可见、不可用 setStopImageView();//设置暂停按钮的点击事件 setToleftAndToRight();//设置向左向右两个按钮 setContinueAndback_tomenu();//lainggeanniudedianjishijian } //初始化游戏类 public void initGame() { game=new Game(); game.setPlane(plane); game.setScore(0); game.setUser(""); game.setObstacle(obstacles); } //初始化飞机类 public void initPlane() { plane=new Plane(); plane.setX(screenWidth/2-50/2); plane.setY(462); plane.setHeight(70); plane.setWidth(70); plane.setImage(R.drawable.plane1); plane.setNum(3); } public void initPlaneImageView() { ImageView imageView=(ImageView)findViewById(R.id.planeImageView); imageView.setX(plane.getX()); imageView.getLayoutParams().height=(int)plane.getHeight(); } //设置障碍的初始位置 public void initObstaclesPosition() { ImageView imageView1=(ImageView)findViewById(R.id.obstacleView1) ; ImageView imageView2=(ImageView)findViewById(R.id.obstacleView2) ; ImageView imageView3=(ImageView)findViewById(R.id.obstacleView3) ; ImageView imageView4=(ImageView)findViewById(R.id.obstacleView4) ; ImageView imageView5=(ImageView)findViewById(R.id.obstacleView5) ; imageView1.setX(obstacles.get(0).getX()); imageView2.setX(obstacles.get(1).getX()); imageView3.setX(obstacles.get(2).getX()); imageView4.setX(obstacles.get(3).getX()); imageView5.setX(obstacles.get(4).getX()); imageView1.setY(obstacles.get(0).getY()); imageView2.setY(obstacles.get(1).getY()); imageView3.setY(obstacles.get(2).getY()); imageView4.setY(obstacles.get(3).getY()); imageView5.setY(obstacles.get(4).getY()); imageView1.getLayoutParams().height=obstacles.get(0).getEdge(); imageView2.getLayoutParams().height=obstacles.get(1).getEdge(); imageView3.getLayoutParams().height=obstacles.get(2).getEdge(); imageView4.getLayoutParams().height=obstacles.get(3).getEdge(); imageView5.getLayoutParams().height=obstacles.get(4).getEdge(); imageView1.getLayoutParams().width=obstacles.get(0).getEdge(); imageView2.getLayoutParams().width=obstacles.get(1).getEdge(); imageView3.getLayoutParams().width=obstacles.get(2).getEdge(); imageView4.getLayoutParams().width=obstacles.get(3).getEdge(); imageView5.getLayoutParams().width=obstacles.get(4).getEdge(); } //设置暂停的imageView public void setStopImageView() { final ImageView stopimageView=(ImageView)findViewById(R.id.stop_imageView1); stopimageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isStoped=!isStoped; Log.d("isStoped",String.valueOf(isStoped)); if(isStoped) { templife=lifeNumber; lifeNumber=0; stopimageView.setImageResource(R.drawable.isstop); setButtonValid(); } else { Log.d("isStoped:::","else"); lifeNumber=templife; initThread(); Log.d("Thread1Status",String.valueOf(obstacleThread1.getState())); stopimageView.setImageResource(R.drawable.isstart); lifeNumber=templife; setButtonsInvalid(); } } }); } //设置继续游戏和返回菜单这两个按钮不可用 public void setButtonsInvalid() { Button continue_button=(Button)findViewById(R.id.continue_game); Button back_to_menu_button=(Button)findViewById(R.id.back_to_menu); continue_button.setEnabled(false); back_to_menu_button.setEnabled(false); continue_button.setVisibility(View.INVISIBLE); back_to_menu_button.setVisibility(View.INVISIBLE); } //设置返回菜单和继续游戏两个键不可用 public void setButtonValid(){ Button continue_button=(Button)findViewById(R.id.continue_game); Button back_to_menu_button=(Button)findViewById(R.id.back_to_menu); continue_button.setEnabled(true); back_to_menu_button.setEnabled(true); continue_button.setVisibility(View.VISIBLE); back_to_menu_button.setVisibility(View.VISIBLE); } //设置返回菜单和继续游戏的点击事件 public void setContinueAndback_tomenu() { Button continue_button=(Button)findViewById(R.id.continue_game); Button back_to_menu_button=(Button)findViewById(R.id.back_to_menu); continue_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isStoped=!isStoped; final ImageView stopimageView=(ImageView)findViewById(R.id.stop_imageView1); stopimageView.setImageResource(R.drawable.isstart); lifeNumber=templife; initThread(); setButtonsInvalid(); } }); back_to_menu_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { lifeNumber=0; finish(); } }); } //设置向左和向右两个按钮的按下和松开两个动作的事件 public void setToleftAndToRight() { Button leftbutton=(Button)findViewById(R.id.toleft_button); Button rightbutton=(Button)findViewById(R.id.toright_button); leftbutton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: leftLongOntouch=true; final Thread thread=new Thread(new Runnable() { @Override public void run() { while (leftLongOntouch==true) { try { Thread.sleep(90); Message m=new Message(); m.what=13; handler.sendMessage(m); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); break; case MotionEvent.ACTION_UP: leftLongOntouch=false; break; default:break; } return false; } }); rightbutton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: rightLongOntouch=true; final Thread thread=new Thread(new Runnable() { @Override public void run() { while (rightLongOntouch==true) { try { Thread.sleep(90); Message m=new Message(); m.what=14; handler.sendMessage(m); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); break; case MotionEvent.ACTION_UP: rightLongOntouch=false; break; default:break; } return false; } }); } //初始化障碍对象 public void initObstacle() { DisplayMetrics metrics=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int edge1=30; int edg2=30; screenWidth=metrics.widthPixels; obstacles=new ArrayList<>(); Random random=new Random(); Obstacle obstacle1=new Obstacle(); Obstacle obstacle2=new Obstacle(); Obstacle obstacle3=new Obstacle(); Obstacle obstacle4=new Obstacle(); Obstacle obstacle5=new Obstacle(); obstacle1.setEdge(random.nextInt(edge1) edg2); obstacle1.setSpeed(random.nextInt(5) 1); obstacle1.setY(0); obstacle1.setX(random.nextInt(screenWidth-60)); obstacle2.setEdge(random.nextInt(edge1) edg2); obstacle2.setSpeed(random.nextInt(5) 1); obstacle2.setY(0); obstacle2.setX(random.nextInt(screenWidth-60)); obstacle3.setEdge(random.nextInt(edge1) edg2); obstacle3.setSpeed(random.nextInt(5) 1); obstacle3.setY(0); obstacle3.setX(random.nextInt(screenWidth-60)); obstacle4.setEdge(random.nextInt(edge1) edg2); obstacle4.setSpeed(random.nextInt(5) 1); obstacle4.setY(0); obstacle4.setX(random.nextInt(screenWidth-60)); obstacle5.setEdge(random.nextInt(edge1) edg2); obstacle5.setSpeed(random.nextInt(5) 1); obstacle5.setY(0); obstacle5.setX(random.nextInt(screenWidth-60)); obstacles.add(obstacle1); obstacles.add(obstacle2); obstacles.add(obstacle3); obstacles.add(obstacle4); obstacles.add(obstacle5); } @Override public void uncaughtException(Thread thread, Throwable throwable) { Log.d("Exception handle",String.valueOf(throwable)); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论