java中用awt实现弹球游戏

这篇博客介绍了一个使用Java Swing编写的弹球游戏。游戏中,小球从屏幕中央开始,通过键盘控制球拍左右移动来接球。当球超过边界或者未接到球时,游戏结束。博主详细展示了游戏的主要代码,包括画布设置、键盘监听和定时器更新游戏状态等关键部分。
摘要由CSDN通过智能技术生成

 Canvas画布默认坐标原点是左上角

|

package com.one.graphics01;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BallGameDemo {
    Frame f=new Frame("弹球游戏");
    private  final  int TABLIE_WIDTH=400;//桌面大小,即画布大小
    private  final  int TABLIE_HEIGHT=400;


    private  final  int BAT_WIDTH=60;//小球大小
    private  final  int BAT_HEIGHT=20;

    private  final  int BALL_SIZE=16;

    private    int ballX =300;//小球起始坐标
    private    int ballY =0;

    private    int batX =300;  //球拍起始坐标
    private   final int BAT_Y=340;

    private    int ballSpeedX =5;//小球的速度,即小球的运动轨迹
    private    int ballSpeedY =5;

    private  boolean isOver=false;//初始定义游戏是否结束:运行中(未结束)

    private Timer timer;//声明一个定时器



    //Canvas只是用来画画面
    private  class myCanvas extends  Canvas{
        @Override
        public void paint(Graphics g) {
        if (isOver){
            //over
            g.setColor(Color.RED);
            //Font(String name, int style, int size)
          //  创建指定名称的一个新的 Font,样式和大小
            g.setFont(new Font("over",Font.BOLD,30));
            /*drawString(String str, int x, int y)
                使用指定的字符串绘制的文本,使用此图形上下文的当前字体和颜色。*/
            g.drawString("Over",150,200);

        }else{
            g.setColor(Color.CYAN );
            g.fillOval(ballX, ballY,BALL_SIZE,BALL_SIZE);

            g.setColor(Color.MAGENTA);
            g.fillRect(batX,BAT_Y,BAT_WIDTH,BAT_HEIGHT);
        }

        }
    }


    myCanvas c=new myCanvas();


    private void game() {
                                //创建一个键盘监听器
        KeyListener key = new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {

                int keyCode = e.getKeyCode();
                if (keyCode == KeyEvent.VK_LEFT) {//按键盘上的<-,即球拍向左移
                    if (batX > 0) {//不能让球拍移出画布外
                        batX -= 20;//移多少可以自己定
                    }
                } else if (keyCode == KeyEvent.VK_RIGHT) {//按键盘上的->,即球拍向右移
                    if (batX < TABLIE_WIDTH - BAT_WIDTH) {
                        batX += 20;
                    }
                }
            }
        };

        f.addKeyListener(key);//给Frame  Canvas  注册监听器
        c.addKeyListener(key);




        ActionListener al=new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            if (ballX <0|| ballX >=TABLIE_WIDTH-BALL_SIZE){
                ballSpeedX = -ballSpeedX;//碰到边缘后返回
            }
   if(ballY <0|| ballY >BAT_Y-BALL_SIZE&& ballX > batX && ballX <= batX +BAT_WIDTH){
                //    小球超过桌面上边缘 || 小球坐标超过球拍上表面   并且小球处于球拍宽度之内   小球反向即小球碰到球拍反弹
                ballSpeedY = -ballSpeedY;//碰到边缘后返回
            }
    if (ballY >BAT_Y-BALL_SIZE&& (ballX < batX || ballX > batX +BAT_WIDTH) ){
          // 没接住球   不要忘了这个小括号-->  (ballX<batX||ballX>batX+BAT_WIDTH) 
            //即游戏结束  
                timer.stop();//关闭定时器
                isOver=true;//修改游戏状态:结束
                c.repaint();//重绘画面
            }

//               修正小球坐标
            ballX += ballSpeedX;
            ballY += ballSpeedY;
            c.repaint();
            }
        };

        timer =new Timer(100,al);
        timer.start();//启动定时器,即开始游戏

f.addWindowListener(new WindowAdapter() {//关闭按钮
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
});
        c.setPreferredSize(new Dimension( TABLIE_WIDTH, TABLIE_HEIGHT));//设置画布大小
        f.add(c);//将画布放入Frame(窗口)中
        f.pack();
        f.setVisible(true);//窗口可见


    }



    public static void main(String[] args) {
        new BallGameDemo().game();//运行game
    }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值