package test.example.lxm.test;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends Activity {
boolean isClose; //游戏是否已结束
//屏幕大小
int windowWidth;
int windowHeight;
//小球位置、半径a
int ballX;
int ballY;
int ballR = 20;
//球拍的位置、大小
int paiX;
int paiY;
int paiWidth = 100;
int paiHeight = 25;
//球的速度
int ballSpeedX = 30;
int ballSpeedY;
TimerTask timerTask;
GameView gameView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//获取屏幕大小
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
windowWidth = displayMetrics.widthPixels;
windowHeight = displayMetrics.heightPixels;
init(); //初始化
gameView = new GameView(this);
setContentView(gameView);
//时间控件,控制球的位置
final Timer timer = new Timer();
gameView.setOnClickListener(new View.OnClickListener() { //单击界面重新开始游戏
@Override
public void onClick(View v) {
if(isClose){
init();
isClose = false;
timer.schedule(timerTask,0,100);
}
}
});
}
//界面更新
final Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.what == 0x123){
gameView.invalidate();
}
}
};
private void init(){
isClose = true;
Random random = new Random();
//设置球拍位置
paiX = (windowWidth - paiWidth)/2;
paiY = windowHeight - paiHeight;
//设置球的位置
ballX = random.nextInt(200) + 20;
ballY = random.nextInt(10) + 20;
ballSpeedY = (int) ((random.nextDouble() - 0.5) * ballSpeedX *2);
if(timerTask != null){
timerTask.cancel();
timerTask = null;
}
timerTask = (new TimerTask() {
@Override
public void run() {
if((ballX <= 0 || ballX >= windowWidth-ballR*2) && ballY < paiY){ //到达屏幕右边缘,且高度没到底,反方向
ballSpeedX = -ballSpeedX;
}
if(ballY >= paiY && (ballX + ballR < paiX || ballX - ballR > paiX + paiWidth)){ //游戏结束
isClose = true;
timerTask.cancel();
timerTask = null;
}else if(ballY <= 0 || ballY>= paiY){ //到达边缘或到达拍子,反方向
ballSpeedY = -ballSpeedY;
}
//改变球的位置
ballX += ballSpeedX;
ballY += ballSpeedY;
handler.sendEmptyMessage(0x123);
}
});
}
class GameView extends View{
Paint paint;
public GameView(Context context) {
super(context);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.GREEN);
}
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
//游戏已结束
if(isClose) {
paint.setTextSize(50);
canvas.drawText(getResources().getString(R.string.gameOver), windowWidth / 2 - 50, windowHeight / 2 - 20, paint);
}
else{
//画球
canvas.drawCircle(ballX + ballR,ballY + ballR,ballR,paint);
//画球拍
canvas.drawRect(paiX,paiY,paiX + paiWidth,paiY + paiHeight,paint);
}
}
float oldX;
//球拍跟着手指移动
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
float newX = event.getX();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN: //开始移动位置
oldX = event.getX();
break;
case MotionEvent.ACTION_MOVE: //结束移动位置
float newPoint = paiX + newX - oldX;
if(newPoint < 0 ){
newPoint = 0;
}else if(newPoint > windowWidth-paiWidth){
newPoint = windowWidth - paiWidth;
}
paiX = (int)newPoint;
oldX = newX;
invalidate();
break;
}
return true;
}
}
}
弹球小游戏
最新推荐文章于 2025-02-05 11:33:11 发布