实例介绍
【实例简介】
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论