2012年8月15日星期三

【转】小游戏

【转】小游戏

package com.ss.fml;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;/*** Description:* site: <a href="http://www.crazyit.org">crazyit.org</a> * Copyright (C), 2001-2012, Yeeku.H.Lee* This program is protected by copyright laws.* Program Name:* Date:* @author  Yeeku.H.Lee kongyeeku@163.com* @version  1.0*/public class PinBall extends Activity{        // 桌面的宽度        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);                // 创建PlaneView组件                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()                {                        @Override                        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;                                }                                // 通知planeView组件重绘                                gameView.invalidate();                                return true;                        }                });                final Timer timer = new Timer();                timer.schedule(new TimerTask()                {                        @Override                        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);        }        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);                        }                }        }}

http://www.cnblogs.com/feifei1010/admin/Files.aspx

欢迎Android开发热爱者加入开发群互相交流~~111059554(北京)252742753(深圳)


TAG: