JAVA课程设计——飞机大战(个人)

JAVA课程设计——飞机大战(个人)

基于Java SWing的游戏界面设计

团队博客

战机选择

JAVA课程设计——飞机大战(个人)

 private void backwardActionPerformed(java.awt.event.ActionEvent evt) {
   
        // TODO add your handling code here:
        //图片地址数组下标切换
        index++;
        if (index > 3) {
   
            index = 0;
        }
       //图片切换
        new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                fighterPlane.setIcon(new ImageIcon(planesPath[index]));
                try {
   
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
   
                    ex.printStackTrace();
                }

            }
        }).start();

    }
 private void forwardActionPerformed(java.awt.event.ActionEvent evt) {
   
        // TODO add your handling code here:
        //图片地址数组下标切换
        index--;
        if (index < 0) {
   
            index = 3;
        }
        //图片切换
        new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                fighterPlane.setIcon(new ImageIcon(planesPath[index]));
                try {
   
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
   
                    ex.printStackTrace();
                }

            }
        }).start();


    }

游戏界面背景

JAVA课程设计——飞机大战(个人)

        //标签设置图片
        txtUsername = new javax.swing.JLabel(usernameImage);
        txtPassword = new javax.swing.JLabel(passwordImage);
        userName = new javax.swing.JTextField();
        password = new javax.swing.JPasswordField();
        registered = new javax.swing.JButton(registeredImage);
        login = new javax.swing.JButton(loginImage);
        this.icon = Toolkit.getDefaultToolkit().getImage("images/背景/icon.png");
        this.background = new ImageIcon("images/背景/img_bg_logo.jpg");
        this.logo = new ImageIcon("images/背景/LOGO.png");
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("飞机大战");
        setPreferredSize(new java.awt.Dimension(512, 768));
        //底层和顶层背景设置
        JLabel label = new JLabel(this.background);
        label.setBounds(0, 0, frameWidth, frameHeight);
        JLabel label1 = new JLabel(this.logo);
        label1.setBounds((frameWidth - logo.getIconWidth()) / 2 - 10, 100, logo.getIconWidth(), logo.getIconHeight());
        imagePanel = (JPanel) this.getContentPane();
        imagePanel.setOpaque(false);
        imagePanel.setLayout(new FlowLayout());
        getLayeredPane().setLayout(null);
        getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE));
        getLayeredPane().add(label1, Integer.valueOf(Integer.MAX_VALUE));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setIconImage(this.icon);

        registered.setBorderPainted(false);
        registered.setContentAreaFilled(false);
        registered.setMargin(new java.awt.Insets(0, 0, 0, 0));
        //实现动态按钮效果
        registered.setRolloverIcon(new ImageIcon("images/背景/注册2.png"));
        registered.setPressedIcon(new ImageIcon("images/背景/注册3.png"));
        registered.addActionListener(new java.awt.event.ActionListener() {
   
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
   
                registeredActionPerformed(evt);
            }
        });

        login.setBorderPainted(false);
        login.setContentAreaFilled(false);
        login.setMargin(new java.awt.Insets(0, 0, 0, 0));
        //实现动态按钮效果
        login.setRolloverIcon(new ImageIcon("images/背景/登录提交2.png"));
        login.setPressedIcon(new ImageIcon("images/背景/登录提交3.png"));
        login.addActionListener(new java.awt.event.ActionListener() {
   
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
   
                loginActionPerformed(evt);
            }
        });

战机控制

public class FrameMouseMotionListener implements MouseMotionListener {
   
    private BaseFrame baseFrame;

    public BaseFrame getBaseFrame() {
   
        return baseFrame;
    }

    public void setBaseFrame(BaseFrame baseFrame) {
   
        this.baseFrame = baseFrame;
    }


    @Override
    public void mouseDragged(MouseEvent e) {
   
        this.baseFrame.getBackGroundPanel().getPlayer().setX(e.getX() - this.baseFrame.getBackGroundPanel().getPlayer().getWidth() / 2);
        this.baseFrame.getBackGroundPanel().getPlayer().setY(e.getY() - this.baseFrame.getBackGroundPanel().getPlayer().getHeight() / 2);
    }

    @Override
    public void mouseMoved(MouseEvent e) {
   

    }
}

游戏界面动态背景

JAVA课程设计——飞机大战(个人)

        super.paintComponent(g);
        // 绘制背景图片
        g.drawImage(this.bgImage, 0, top - bgImage.getHeight(this), this.bgImage.getWidth(this),
                this.bgImage.getHeight(this), null);
        g.drawImage(this.bgImage, 0, top, this.bgImage.getWidth(this), this.bgImage.getHeight(this), null);
        time++;
        if (time == 100000) {
   
            time = 0;
        }
        if (time % 10 == 0) {
   
            top++;
            if (top >= this.bgImage.getHeight(this)) {
   
                top = 0;
            }
        }
        //绘制云朵
        this.cloud.drawSelf(g);
        
 public void drawSelf(Graphics g) {
   
        g.drawImage(this.images[0], x + 200, top - heights[0], width, heights[0], null);
        g.drawImage(this.images[1], x - 100, top - 700, width, heights[1], null);
        g.drawImage(this.images[0], x + 150, top - 800, width, heights[0], null);
        g.drawImage(this.images[1], x - 150, top + heights[1], width, heights[1], null);
        g.drawImage(this.images[0], x + 150, top - 600, width, heights[0], null);
        g.drawImage(this.images[1], x - 150, top, width, heights[1], null);
        if (this.backGroundPanel.getTime() % 10 == 0) {
   
            top++;
            if (top >= 1500) {
   
                top = -1000;
            }
        }
    }
        

多线程实现动态效果

public class DrawableThread extends Thread {
   
    private BackGroundPanel backGroundPanel;

    public DrawableThread(BackGroundPanel backGroundPanel) {
   
        this.backGroundPanel = backGroundPanel;
    }

    @Override
    public void run() {
   
        while (true) {
   
            //重绘
            this.backGroundPanel.repaint();
            try {
   
                sleep(1);
            } catch (InterruptedException e) {
   
                e.printStackTrace();
            }
        }
    }
}


游戏暂停,游戏继续

JAVA课程设计——飞机大战(个人)

public class FrameMouseListener implements MouseListener {
   
    private BaseFrame baseFrame;

    public FrameMouseListener(BaseFrame baseFrame) {
   
        this.baseFrame = baseFrame;
    }

    public BaseFrame getBaseFrame() {
   
        return baseFrame;
    }

    public void setBaseFrame(BaseFrame baseFrame) {
   
        this.baseFrame = baseFrame;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
   
        this.baseFrame.getBackGroundPanel().drawableThread = new DrawableThread(this.baseFrame.getBackGroundPanel());
        this.baseFrame.getBackGroundPanel().drawableThread.start();
    }

    @Override
    public void mousePressed(MouseEvent e) {
   
        
    }

    @Override
    public void mouseReleased(MouseEvent e) {
   

    }

    @Override
    public void mouseEntered(MouseEvent e) {
   

    }

    @Override
    public void mouseExited(MouseEvent e) {
   
        this.baseFrame.getBackGroundPanel().drawableThread.threadStop();
    }
    
}

用户信息的读写操作

该程序的所有信息都是通过excel文档进行存储,能够方便地写入和读取信息,不需要担心像txt文档存储格式的问题,所用到的是阿里巴巴开发的EasyExcel工具,它能够实现对excel文档快速,方便地进行一系列操作。

{
   
        EasyExcel.read(fileName, User.class, new AnalysisEventListener<User>() {
   

            @Override
            public void invoke(User user, AnalysisContext analysisContext) {
   
                users.add(user);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
   

            }
        }).sheet(0).doRead();

    }

EasyExcel.write(fileName, User.class).sheet(0).doWrite(users);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114438.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 优先级队列的使用[通俗易懂]

    优先级队列的使用[通俗易懂]优先级队列(priorityqueue)中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说,无论何时调用remove方法,总会获得当前优先级队列中最小的元素.然后,优先级队列并没有对所有的元素进行排序。如果用迭代的方式处理这些元素,并不需要对它们进行排序。优先级队列使用了一个优雅且高效的数据结构,称为堆(heap)。堆事一个可以自我调整的二叉树,对树执行添加(add)和删除(

    2025年12月2日
    4
  • 基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶

    基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶文章目录写在前面器件连接部分代码运行结果小结写在前面接上一篇文章,这次是集合了语音识别+语音合成(就是语音播报实现一种反馈)+SG90舵机实现垃圾桶的开与闭,给出上篇文章链接,如果对LD3320语音识别还有问题的朋友可以看看:LD3320语音识别模块与Arduino软串口通讯实现开关灯功能发现还是有好多人都在做这个,当玩具也好,毕设也好,这个都是一个好玩又有趣的项目。因为这只是现在的一门小课…

    2022年6月26日
    71
  • 基于51单片机四路循迹小车

    基于51单片机四路循迹小车这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    2022年6月23日
    20
  • phpstorm2021 激活码破解方法[通俗易懂]

    phpstorm2021 激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    78
  • 斑马条码打印机gk888t如何使用_斑马打印机gk888cn安装驱动教程

    斑马条码打印机gk888t如何使用_斑马打印机gk888cn安装驱动教程1、样子2、下载驱动,安装,一直next,next点击安装打印机,选择GK888t下一步,选择usb点击完成,进入下面页面安装文字然后一直下一步,下一步,直到完成。完成之后,进行测试。

    2022年8月3日
    6
  • php lav,PotPlayer1.7.21129便携懒人包分享(madVR+LAV+ini设置)

    php lav,PotPlayer1.7.21129便携懒人包分享(madVR+LAV+ini设置)楼主,求助一个播放的问题,我播放这个视频会花屏,求解QQ截图20200213215751.jpg(235.51KB,下载次数:2)2020-2-1321:58上传视频信息如下:GeneralUniqueID:192839097181686327999562090253409942325(0x9113758C3C682128939D804…

    2025年11月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号