这个弹球游戏是没有砖块的打砖块游戏,简版,效果如下


package WangLi.Graphics.PinBall;import java.util.Random;import java.util.Timer;import java.util.TimerTask;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.view.Display;import android.view.KeyEvent;import android.view.View;import android.view.View.OnKeyListener;import android.view.Window;import android.view.WindowManager;public class PinBall extends Activity {class GameView extends View{public GameView(Context context) {super(context);setFocusable(true);}//重写View的onDraw方法,实现绘画public void onDraw(Canvas canvas){Paint paint = new Paint();paint.setStyle(Paint.Style.FILL);//如果游戏已经结束if(isLose){paint.setColor(Color.RED);paint.setTextSize(40);canvas.drawText("游戏已结束", 50, 200, paint);}//如果游戏还未结束else{//设置颜色,并绘制小球 paint.setColor(Color.rgb(240, 240, 80));canvas.drawCircle(ballX, ballY, BALL_SIZE, paint);//设置颜色,并绘制小球paint.setColor(Color.rgb(80, 80, 200));canvas.drawRect(racketX, racketY, racketX + RACKET_WIDTH,racketY + RACKET_HEIGHT, paint);}}}    /** Called when the activity is first created. *///桌面的宽度private int tableWidth;//桌面的高度private int tableHeight;//球拍的垂直位置private int racketY;//定义球拍的高度和宽度private final int RACKET_HEIGHT = 20;private final int RACKET_WIDTH = 70;//小球的大小private final int BALL_SIZE = 12;//小球纵向的运行速度private int ySpeed = 10;Random rand = new Random();//返回一个-0.5~0.5比率,用于控制小球的运行方向private double xyRate = rand.nextDouble() - 0.5;//小球横向的运行速度private int xSpeed = (int)(ySpeed * xyRate * 2);//ballX和ballY代表小球坐标private int ballX = rand.nextInt(200) + 20;private int ballY = rand.nextInt(10) + 20;//racketX代表球拍的水平位置private int racketX = rand.nextInt(200);//游戏是否结束的旗标private boolean isLose = false;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //去掉窗口标题        requestWindowFeature(Window.FEATURE_NO_TITLE);        //全屏显示        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,        WindowManager.LayoutParams.FLAG_FULLSCREEN);        //创建GameView组件        final GameView gameView = new GameView(this);        setContentView(gameView);        //获取窗口管理器        WindowManager windowManager = getWindowManager();        Display display = windowManager.getDefaultDisplay();        //获取屏幕宽和高        tableWidth = display.getWidth();        tableHeight = display.getHeight();        racketY = tableHeight - 80;        final Handler handler = new Handler()        {        public void handleMessage(Message msg)        {        if(msg.what == 0x123)        {        gameView.invalidate();        }        }        };        gameView.setOnKeyListener(new OnKeyListener()        {        public boolean onKey(View source,int keyCode,KeyEvent event)        {        //获取由哪个键触发事件        switch(event.getKeyCode())        {              //控制挡板左移              case KeyEvent.KEYCODE_DPAD_LEFT:              if(racketX > 0)              racketX -= 10;              break;              //控制挡板右移              case KeyEvent.KEYCODE_DPAD_RIGHT:              //判断是否已移到最右端              if(racketX < tableWidth - RACKET_WIDTH)              racketX += 10;              break;        }        //通知gameView组件重绘        gameView.invalidate();        return true;        }        });        final Timer timer = new Timer();        timer.schedule(new TimerTask()        {        public void run()        {               //如果小球碰到左边边框            if(ballX <= 0 || ballX >= tableWidth - BALL_SIZE)            {            xSpeed = -xSpeed;            }            //如果小球高度超出了球拍位置,且横向不在球拍范围之内,游戏结束            if(ballY >= racketY - BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH))            {            timer.cancel();            //设置游戏是否结束的旗标为true            isLose = true;            }            //如果小球位于球拍之内,且到达球拍位置,小球反弹            else if(ballY <= 0 || (ballY > racketY - BALL_SIZE && ballX > racketX && ballX <= racketX + RACKET_WIDTH))            {            ySpeed = -ySpeed;            }            //小球坐标增加            ballY += ySpeed;            ballX += xSpeed;            //发送消息,通知系统重绘            handler.sendEmptyMessage(0x123);        }        }, 0, 100);    }}


更多相关文章

  1. 转:Game Engines for Android(安卓)(Android游戏引擎)
  2. 分享20个Android游戏源码,希望大家喜欢哈!
  3. Android(安卓)studio 基于BaseAdapter 的翻牌游戏
  4. android平台上20个自由移动的小球
  5. 近百个Android优秀开源项目,覆盖Android开发的每个领域
  6. Android猜牌小游戏(改进版)
  7. android文字滚动
  8. Android(安卓)游戏与应用开发最佳学习路线图
  9. Android中view的简单应用---随手指移动的小球

随机推荐

  1. Android 动画基础-变换动画(Twen Animati
  2. Android(安卓)Audio System 之一:AudioTra
  3. 生成Android(安卓)App签名(为APK签名)
  4. 什么是Android------Android中文SDK
  5. 【Android Dev Guide - 02】 - Applicati
  6. 极光推送获取不到RegisterId(注册ID)Andr
  7. Android中给Listview的HeadView加ViewPag
  8. Flutter底部导航栏NavigationBar的几种实
  9. Android 获取系统音量
  10. COCOS2D-X编译成android的项目