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

初学Android,图形图像之打砖块游戏(二十八)_第1张图片

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. Android实现完整游戏循环的方法
  2. google play SDK 游戏排行榜的接入分享
  3. android利用handler实现打地鼠游戏
  4. Android五子棋游戏设计与实现
  5. Android开源项目:捕鱼达人游戏源代码
  6. Android实现拼图小游戏
  7. 通过OpenGL ES混合模式缩放视频缓冲区-Android 4游戏编程高级篇
  8. 【贪吃蛇—Java程序员写Android游戏】系列 2. 用J2ME实现Android
  9. 《冰球撞击》Android休闲桌球类游戏现已面试,快来下载吧!

随机推荐

  1. Android自定义RadioGroup
  2. xe5 android tts(Text To Speech)
  3. Android(安卓)新兴的UI模式——侧边导航
  4. 关于Android文件Apk下载的那点事
  5. Android的SD卡文件读写
  6. Android之使用微信开放api (一)
  7. Android(安卓)混淆 (不定期完善第三方混
  8. Android锁屏与解锁广播状态监听
  9. GIT开源安卓项目Top100
  10. [置顶] 实现android应用程序自动打包(Ant+