在学习图形图像这一块,写一个小游戏,记录学习历程。

规则:小球随机向下运动,遇到左边框、右边框、上边框和“球拍”时反弹,用户可以控制“球拍”的左右,若“球拍”接不到小球,游戏结束。代码如下:

package com.example.admin.imgapp;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.Display;import android.view.KeyEvent;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 AppCompatActivity {    Random random = new Random();    float bx = 100,by = 100;   //球的坐标    float b_size = 10;    double xyRate = random.nextDouble()-0.5;    int yspeed = 15;    int xspeed = (int)(yspeed*xyRate*2);    int rx= random.nextInt(200);//球拍的坐标    int ry =0;    float r_width = 90;    float r_height = 10;    boolean isOver = false;    int tableWidth,tableHeight;    @Override    protected void onCreate(final Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);  //不要标题        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏        final GameView gameView = new GameView(this);        setContentView(gameView);  //设置页面为游戏界面        WindowManager wm = getWindowManager();        Display display = wm.getDefaultDisplay();        DisplayMetrics dm = new DisplayMetrics();        display.getMetrics(dm);        tableHeight = dm.widthPixels;        tableWidth = dm.widthPixels;        ry = tableHeight-20;        gameView.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                switch(event.getKeyCode()){                    case KeyEvent.KEYCODE_A:                        if(rx>0)rx-=10;break;                    case KeyEvent.KEYCODE_D:                        if(rx=tableWidth-b_size){                    xspeed = -xspeed;                }                //如果没接住                if(by>=ry-b_size &&(bxrx+r_width)){                    timer.cancel();                    isOver = true;                } //接住了,反弹                else if(by<=0 ||(by>=ry-b_size && bx>rx && bx<=rx+r_width)){                    yspeed = -yspeed;                }                by+=yspeed;                bx += xspeed;                handler.sendEmptyMessage(100);            }        },0,200);    }    /**     *游戏类     */    class GameView extends View {        Paint paint = new Paint();        public GameView(Context context){            super(context);            setFocusable(true); //可获得焦点        }        public void onDraw(Canvas canvas){            paint.setStyle(Paint.Style.FILL);            paint.setAntiAlias(true);            if(isOver){                paint.setColor(Color.RED);                paint.setTextSize(40);                canvas.drawText("游戏结束",tableWidth/2-100,200,paint);            }else{                paint.setColor(Color.rgb(255,0,0));                canvas.drawCircle(bx,by,b_size,paint);                paint.setColor(Color.rgb(80,80,200));                canvas.drawRect(rx,ry,rx+r_width,ry+r_height,paint);            }        }    }}


更多相关文章

  1. Android的事件处理之通过回调实现跟随手指的小球
  2. Android实现拖动小球跟随手指移动效果
  3. Android(安卓)shape中的padding无效
  4. Android动态改变shape填充颜色
  5. android给图片添加边框
  6. Android(安卓)UI设计中的三种特效
  7. android 之 SurfaceView使用(桌面弹球)
  8. 如何去除android上a标签产生的边框
  9. Android之多种Bitmap效果

随机推荐

  1. 在Android设备上安装kali的最佳方案与Lin
  2. Android(安卓)仿2016版京东筛选
  3. Android炫酷之动画简记
  4. Android开发 如何最优的在Activity里释放
  5. 解析Glide用法
  6. Android应用监听自己是否被卸载,做反馈统
  7. Android实现应用程序卸载自己
  8. android中SparseArray和ArrayMap代替Hash
  9. Android设备的内置存储和外置存储到底是
  10. 基于 Android(安卓)NDK 的学习之旅-----