java学习日记-----------------------------弹弹球

本文介绍了一个简单但有趣的弹弹球游戏的实现过程,包括使用Java编程语言创建游戏画布、实现球体运动逻辑以及通过定时器控制游戏速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好玩的小程序,弹弹弹....................

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import javax.swing.event.*;
public class BallsCanvas extends Canvas implements ActionListener,FocusListener{
    private Ball balls[];
    private Timer timer;//定时器
    
    private static class Ball{
        int x,y;
        Color color;
        boolean up,left;
        Ball(int x,int y,Color color){
            this.x=x;
            this.y=y;
            this.color=color;
        }
    }
    public BallsCanvas(Color color[],int delay){//指定颜色,延时
        this.balls=new Ball[color.length];
        for(int i=0,x=40;i<color.length;i++,x+=40)
            balls[i]=new Ball(x,x,color[i]);
            this.addFocusListener(this);
            timer=new Timer(delay,this);
            timer.start();//定时器启动
    }
        public void setDelay(int delay1){
            timer.setDelay(delay1);
        }
        public void paint(Graphics g){
            for(int i=0;i<balls.length;i++){
                g.setColor(balls[i].color);
                balls[i].x=balls[i].left?balls[i].x-10:balls[i].x+10;
                if(balls[i].x<=0||balls[i].x>=this.getWidth())//到水平变给变方向
                balls[i].left=!balls[i].left;
                balls[i].y=balls[i].up?balls[i].y-10:balls[i].y+10;
                if(balls[i].y<=0||balls[i].y>=this.getHeight())//到垂直边更改方向
                balls[i].up=!balls[i].up;
                g.fillOval(balls[i].x, balls[i].y, 20, 20);
            }
        }

    @Override
    public void focusGained(FocusEvent e) {
        // TODO Auto-generated method stub
        timer.stop();
    }

    @Override
    public void focusLost(FocusEvent e) {
        // TODO Auto-generated method stub
        timer.restart();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        repaint();
    }

}
class BallsJFrame extends JFrame implements ChangeListener{
     public BallsCanvas ball;
     private JSpinner spinner;
     public BallsJFrame(){
         super("弹弹球");
         this.setBounds(300,200, 480, 360);
         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
         Color colors[]={Color.red,Color.green,Color.blue,Color.magenta,Color.cyan};
         ball=new BallsCanvas(colors,100);
         this.getContentPane().add(ball);
         
         JPanel panel=new JPanel();
         this.getContentPane().add(panel,"South");
         panel.add(new JLabel("Delay"));
         spinner =new JSpinner();
         spinner.setValue(100);
         panel.add(spinner);
         spinner.addChangeListener(this);
         this.setVisible(true);
     }
    @Override
    public void stateChanged(ChangeEvent e) {
        // TODO Auto-generated method stub
        ball.setDelay(Integer.parseInt(""+spinner.getValue()));
    }
    public static void main(String[] args) {
        new BallsJFrame();
    }
}

 

转载于:https://www.cnblogs.com/he-shao/p/4902735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值