//第一步创建窗体,定义小球的大小以及在画布中的位置,平台的大小以及在画布中的位置,
//第二步创建画布,在画布中填充小球,平台的形状颜色,并创建实体画布drawArea
//第三步在public void initial(){}中定义平台的移动方法和小球的移动方法,设置键盘监听器来控制键盘的左右键移动平台,创建Timer类对象用timer.start()开始执行
//KeyListener listenr=new KeyAdapter(){
//public void KeyPressed(KeyEvent e){
// int keycode;
// keycode= e.getcode();
//if(keycode==keyevent.VK_LEFT)
//if(racketX>0){
//racketX=racket-10;}
//}
//if(keycode==keyevent.VK_RIGHT){
//if(racketX<TABLEX){
//racketX=racketX+10;
//}
//}
//设置小球移动的监听器
//ActionListener task=new ActionListener(){
//public void actionperformed(){
//if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
//speedX=-speedX;
//}
//if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<racketX+RACKET_WIDTH)
//{
//speedY=-speedY;
//}
//if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH){
//{
//isover=true;
//drawArea.repaints();}
//之后调用
//第四步调用initial()方法实现;
package com.student;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class test5 {
//创建窗口对象
Frame frame=new Frame("弹弹弹");
//桌面的宽度和高度
int TABLE_WIDTH=300;
int TABLE_HEIGHT=400;
//定义平台的宽度和高度
int RACKET_WIDTH=200;
int RACKET_HEIGHT=10;
//定义小球的大小
int BALL_SIZE=16;
//记录小球的坐标
int ballX=120;
int ballY=20;
//小球的运动速度
int speedY=10;
int speedX=5;
//定义平台的坐标
int racketX=120;
int racketY=340;
//判断游戏是否结束
boolean isover=false;
//为了实现问题就重新调用组件的repaints()的方法,可以借助Swing提供的定时器他有如下一个构造
//Timer(int delay,ActionListener listener)每隔delay毫秒系统自动触发ActionListener
//声明一个定时器
Timer timer;
//自定义一个类充当画布,绘制游戏界面
class MyCanvas extends Canvas{
@Override
public void paint(Graphics g) {
if(isover)
{
g.setColor(Color.RED);
g.setFont(new Font("Times", Font.BOLD, 30));
g.drawString("游戏结束!", 50, 200);
}
else
{
//绘制小球
g.setColor(Color.RED);
g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);
//g表示画笔用画笔中的颜色来填充窗体中的相应坐标的组件
g.setColor(Color.black);
g.fillRect(racketX, racketY, RACKET_WIDTH, TABLE_HEIGHT);
}
}
}
//创建绘画区域
MyCanvas drawArea=new MyCanvas() ;
//对平台移动
public void init() {
KeyListener listener=new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keycode=e.getKeyCode();
if(keycode==KeyEvent.VK_LEFT) {
if(racketX>0) {
racketX=racketX-10;
}
}
if(keycode==KeyEvent.VK_RIGHT) {
if(racketX<TABLE_WIDTH-RACKET_WIDTH) {
racketX=racketX+10;
}
}
}
};
//frame.addKeyListener(listener);
drawArea.addKeyListener(listener);
//完成小球坐标的移动变化
ActionListener task=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(ballX<=0||ballX>=(TABLE_WIDTH-BALL_SIZE)) {
speedX=-speedX;
}
if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<racketX+TABLE_WIDTH)){
speedY=-speedY;
}
if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH)) {
//游戏结束
//timer.stop();
isover=true;
drawArea.repaint();
}
//如果没有在边界情况,小球正常运行时的情况
ballX+=speedX;
ballY+=speedY;
drawArea.repaint();
}
};
Timer timer=new Timer(100,task);
timer.start();
drawArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
frame.add(drawArea);
frame. pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
new test5().init();
}
}