弹球小游戏

该程序主要是用于对java图形化界面编程进行联系,程序实现全部采用的是AWT包下的类。
程序仅做参考,供学习使用,希望能使小伙伴对java图形化界面编程理解有帮助

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.time.*;
public class ball {
    JFrame j=new JFrame("弹球游戏");
    //桌面宽度
    private final int a=400;
    //桌面高度
    private  final int a1=500;
    //挡板宽度
    private final int b=60;
    //挡板高度
    private  final int b1=20;
    //小球大小
    private final int c=16;
    //小球X轴初始位置
    private int cx=120;
    //小球Y轴初始位置
    private  int cy=20;
    //挡板X轴初始位置
    private int bx=120;
    //挡板Y轴初始位置
    private  final  int by=460;
    //Y轴运动速度
    private  int suy=10;
    //X轴运动速度
    private  int sux=5;
    //定义线程对象
    private  Timer  t;
    //用来判断游戏是否结束
    private  boolean f=false;
    //继承画图类并且重写paint()方法
class x extends Canvas
{
    public void paint(Graphics e)
    {
      if(f){
          //定义字体颜色
          e.setColor(Color.BLUE);
          //定义字体
          e.setFont(new Font("Times",Font.BOLD,30));
          //输入字体
          e.drawString("游戏结束!",250,200);
          }else{
          //绘制小球和挡板的颜色
          e.setColor(Color.RED);
          //绘制小球
          e.fillOval(cx,cy,c,c);
          //绘制挡板
          e.fillRect(bx,by,b,b1);

}}
}
//创建画图类对象
x x1=new x();
//组装
public ball()
{      //定义按键监听器
    KeyListener k=new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
          int code=e.getKeyCode();
          if(code==KeyEvent.VK_LEFT)
          {//当挡板运动到最左边使其无法继续运动
              if(bx>0)
              {
                  bx-=10;
              }
          }//当挡板运动到最右边使其无法继续运动
          if(code==KeyEvent.VK_RIGHT)
          {
              if(bx<a-b)
              {
                  bx+=10;
              }
          }
        }
    };
    //设计小球运动
    ActionListener a2=new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //当小球撞到最右边或者最左边是使它反弹
            if(cx<=0||cx>=(a-c))
            {
                sux=-sux;
            }//当小球到顶部或者撞到挡板上反弹
            else  if(cy<=0||(cy>by-c&&cx>bx&&cx<bx+b))
            {
                suy=-suy;
            }//当小球弹到挡板以下位置游戏结束
            else if(cy>by-c&&(cx>bx||cx<bx+b))
            {
                t.stop();
                f=true;
                x1.repaint();

            }//使小球运动
            cx+=sux;
            cy+=suy;
            x1.repaint();
        }
    };
    //将小球运动设计加入到线程中
    t=new Timer(100,a2);
    t.start();
    //使键盘可以控制挡板
  j.addKeyListener(k);
  x1.addKeyListener(k);
  //设计游戏界面的大小
  x1.setPreferredSize(new Dimension(a,a1));
  //组装
  j.add(x1);
  j.setVisible(true);
  j.setBounds(100,100,a+20,a1+100);
  j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}//测试运行
    public static void main(String[] args) {
        new ball();
    }
}

运行测试界面:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值