android弹球游戏前台代码,安卓上简单弹球游戏 - joshlying的个人空间 - OSCHINA - 中文开源技术交流社区...

最近因为做毕业设计需要,学习安卓开发,看书只能学一些基本东西,真正面对自己的项目还是不知道该怎么做。我决定做一个弹球游戏。看教程良久无果,在参照了网上各种资料之后,自己勉强做了一个。

游戏很简单,现在贴出代码如下。布局就用默认布局即可。

package com.example.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.util.DisplayMetrics;

import android.view.Display;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnKeyListener;

import android.view.Window;

import android.view.WindowManager;

public class MainActivity 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);

// 创建GameView组件

final GameView gameView = new GameView(this);

setContentView(gameView);

// 获取窗口管理器

WindowManager windowManager = getWindowManager();

Display display = windowManager.getDefaultDisplay();

DisplayMetrics metrics = new DisplayMetrics();

display.getMetrics(metrics);

// 获得屏幕宽和高

tableWidth = metrics.widthPixels;

tableHeight = metrics.heightPixels;

racketY = tableHeight - 80;

final Handler handler = new Handler()

{

public void handleMessage(Message msg)

{

if (msg.what == 0x123)

{

gameView.invalidate();

}

}

};

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

+ 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

{

Paint paint = new Paint();

public GameView(Context context)

{

super(context);

setFocusable(true);

}

// 重写View的onDraw方法,实现绘画

public void onDraw(Canvas canvas)

{

paint.setStyle(Paint.Style.FILL);

// 设置去锯齿

paint.setAntiAlias(true);

// 如果游戏已经结束

if (isLose)

{

paint.setColor(Color.RED);

paint.setTextSize(30);

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);

}

}

//触摸屏拖动球拍,只能左右拖动。

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

switch(event.getAction() & MotionEvent.ACTION_MASK){

case MotionEvent.ACTION_MOVE:

int x=(int)event.getX(1);

racketX = x-(int)(0.5*RACKET_WIDTH);

if(racketX<0)

racketX=0;

if(racketX>(tableWidth-RACKET_WIDTH))

racketX = tableWidth-RACKET_WIDTH;

this.invalidate();

break;

default:

break;

}

return true;

}

}

}

我参考了这个,http://www.2cto.com/kf/201404/291457.html,自己只改了响应函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值