Java游戏《飞机大战》

这篇博客展示了使用Java开发的《飞机大战》游戏,包括作品的页面标签交互和代码实现。主要内容涵盖游戏开始界面的设计,如敌机类和共通属性类的定义,以及游戏逻辑的实现。

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

作品展示

如有需要素材或者疑问可以关注点赞私信哦

登录页面

游戏页面

页面标签都可以进行点击操作

 代码展示

1 定义一个main方法作为游戏入口

 2 用JFrame绘制游戏面板

package Login;

import Login.IfCode;
import Login.User;
import ikun.second.beginGame.BeginGame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

public class LonginUI extends JFrame implements ActionListener, MouseListener
{
    static ArrayList<User>allUsers=new ArrayList<>();//创建一个集合,存储用户名和密码
    static{
        allUsers.add(new User("虎儿真帅","123456"));
        allUsers.add(new User("lyh123","654321"));
    }
    JButton jb=new JButton();
    JLabel jlname=new JLabel("账号");
    JLabel jlpassed=new JLabel("密码");
    JLabel jlif=new JLabel("验证码");
    JTextField jtname=new JTextField(30);
    JPasswordField jppassed=new JPasswordField(30);
    JTextField jtf  =new JTextField();//验证码文本框
    //JTextField tf =new JTextField();//随机生成的验证码文本框
    JLabel tf=new JLabel();
    JLabel explain=new JLabel("游戏介绍");
    JLabel state=new JLabel("操作说明");
    private JPanel contentPane;
    JFrame jf=new JFrame();
     public LonginUI()
     {
         setBg();
         init();
         //this.setVisible(true);
     }
    public void setBg()
    {
        ((JPanel)jf.getContentPane()).setOpaque(false);
        ImageIcon img = new ImageIcon
                ("C:\\Users\\16190\\Desktop\\log.png");
        JLabel background = new JLabel(img);
        jf.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
        background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
    }
    public void init(){
         //jf.setLayout(null);
        jf.setTitle("登录页面");
        jf.setBounds(300,150,500,800);
        jf.setLayout(null);
        jf.setResizable(false);
        jf.setBackground(Color.CYAN);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);
        //jf.setFont();
        //1按扭 登录
        jb.setIcon(new ImageIcon("C:\\Users\\16190\\Desktop\\log1.png"));
        jb.setBounds(180,540,150,60);
        jb.addMouseListener(this);
        jb.setBorderPainted(false);//去除按钮的边框
        jb.setContentAreaFilled(false);//设置按钮透明
        jf.getContentPane().add(jb);
        //标签  用户名
        jlname.setBounds(100,380,30,30);
        //jlname.setFont(new Font("微软雅黑",Font.BOLD,10));
        jf.add(jlname);
         jlname.setVisible(true);
           //密码文字
        jlpassed.setBounds(100,430,30,30);
         jf.add(jlpassed);
        jlpassed.setVisible(true);
        //验证码
        jlif.setBounds(90,480,50,30);
        jf.add(jlif);
        jlif.setVisible(true);
        //可视化在所有组件加载之后
        jf.setVisible(true);//可视化,交给系统渲染到屏幕上
        //组件设置尺寸
        // 文本框大小 用户文本框
         jtname.setBounds(150,380,200,35);
        jf.add(jtname);
        jf.setVisible(true);
        //密码文本框
         jppassed.setBounds(150,430,200,35);
        jf.add(jppassed);
        //界面窗体中增加按钮
        jf.setVisible(true);
        //验证码文本框
        jtf.setBounds(150,480,100,35);
        jf.add(jtf);
        //随机验证码文本框
        //tf.setBounds(270,483,60,30);

        //获取生成的验证码
        String codestr= IfCode.randomcode(4);
        //System.out.println(codestr);
        tf.setText(codestr);//设置内容,在标签上添加验证码
        tf.addMouseListener(this);//绑定鼠标事件
        tf.setBounds(270,483,60,30);//位置和宽高
        jf.getContentPane().add(tf);//将随机生成的验证码添加到界面
        explain.setBounds(10,0,80,80);
        explain.setFont(new Font("微软雅黑",Font.BOLD,15));
        explain.addMouseListener(this);
        jf.getContentPane().add(explain);
        state.setBounds(400,0,80,80);
        state.setFont(new Font("微软雅黑",Font.BOLD,15));
        state.addMouseListener(this);
        jf.getContentPane().add(state);


    }
    @Override
    public void actionPerformed(ActionEvent e)//点击鼠标发生的事件
    {

     }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        if(e.getSource()==jb){//就是获得你目前这个事件的事件源,说通俗点,比如有一个按钮事件,
            // 你点击一个按钮,在处理事件中你用e.getSource(),就是获得这个按钮
            System.out.println("点击登录按钮");
            //获取俩个输入文本框的内容
            String usernameInput= jtname.getText();
            char[] passwordInput= jppassed.getPassword();
            String str =new String(passwordInput);
            String codeInput=jtf.getText();//获取用户输入的验证码
            //创建一个user对象
            User userInfo=new User(usernameInput,str);//把用户名和密码放入对象中
            System.out.println("用户输入的用户名是"+usernameInput);
            System.out.println("用户输入的密码是"+str);




            if (contains(userInfo)&&codeInput.equalsIgnoreCase(tf.getText())){
                System.out.println("输入正确");
                jf.setVisible(false);//关闭当前登录界面
                BeginGame frame =new BeginGame();
            }else{
                if(usernameInput.length()==0||passwordInput.length==0||codeInput.length()==0)
                {
                System.out.println("用户名,密码或验证码为空");
                showJDialog("用户名,密码或验证码为空");
                System.out.println("随机更换一个新的验证码");
               String code=IfCode.randomcode(4);//获取一个新的验证码
               tf.setText(code);
                }else if( !codeInput.equalsIgnoreCase(tf.getText())){
                showJDialog("您输入账户或密码或验证码有误");
                String code=IfCode.randomcode(4);//获取一个新的验证码
                tf.setText(code);
                } else  {
                    showJDialog("您输入账户或密码或验证码有误");
                    String code=IfCode.randomcode(4);//获取一个新的验证码
                    tf.setText(code);
                }


            }
            if(e.getSource()== explain)
            {
                System.out.println("dianjij");
            }
        }
        if (e.getSource()==tf){//点击屏幕验证码可以更换验证码
            System.out.println("更换验证码");
            String code=IfCode.randomcode(4);
            tf.setText(code);
        }
        if (e.getSource()==explain){//利用网页进行对话框换行
            show1JDialog("<html><body><p>" +"《飞机大战》这是一款经典飞行射击类游戏,<br/>" +
                    "精美绚丽的画面,整体环境主要还是围绕太空为主,<br/>" +
                    "高保真的音效,为玩家呈现一场不一样射击体验。<br/></p></body></html>");
            
        }
        if (e.getSource()==state){
            show1JDialog(
                    "<html><body><p>" + "使用键盘方向键↑↓←→键或鼠标控制飞机移动,自动发射子弹<br/>当击中敌机时,增加1分," +
                            "被敌机打到时扣除一个生命值分数减10。<br/>吃到道具机子弹增加,最多加三颗,然后会增加生命值<br/>并且敌机的速度根据敌机大小不同速度不同," +
                            "撞上敌机时游戏结束。<br/></p></body></html>");
        }
    }

    private void show1JDialog(String s) {
        JDialog jDialog1=new JDialog();//创建一个弹窗对象
        jDialog1.setSize(400,200);  //设置弹窗大小
        jDialog1.setAlwaysOnTop(true);//让弹窗顶置
        jDialog1.setLocationRelativeTo(null);//让弹窗居中
        jDialog1.setModal(true);//模式对话框,弹框不关闭无法操作下面的界面
        //创建标签对象管理文字并添加到弹框中
        JLabel sout=new JLabel(s);//创建新的标签,内容是输出的showJDialog
        sout.setBounds(0,0,80,60);//设置标签大小
        sout.setFont(new Font("微软雅黑",Font.BOLD,15));
        jDialog1.getContentPane().add(sout);//setContentPane()/getContentPane()添加或设置组件, JFrame 有一个 Content Pane,
        // 窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:
        // getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
        jDialog1.setVisible(true);//让弹框显示出来
    }

    private boolean contains(User userInput) {//userIput为用户输入的账号,密码
        for (int i = 0; i < allUsers.size(); i++) {//size()返回类表中元素的个数
            User rightUser=allUsers.get(i);//get()返回类表中指定的元素
            //比较用户名和密码是否相同
            if (userInput.getUsername().equals(rightUser.getUsername())&&
            userInput.getPassword().equals(rightUser.getPassword()))
            {
            return true;//有相同的代表存在,返回true
            }

        }
       // showJDialog("您输入账户或密码或验证码有误");
        return false;//循环结束之后还没有找到就表示不存在

    }

    private void showJDialog(String content) {
        JDialog jDialog=new JDialog();//创建一个弹窗对象
        jDialog.setSize(200,150);  //设置弹窗大小
        jDialog.setAlwaysOnTop(true);//让弹窗顶置
        jDialog.setLocationRelativeTo(null);//让弹窗居中
        jDialog.setModal(true);//模式对话框,弹框不关闭无法操作下面的界面
        //创建标签对象管理文字并添加到弹框中
        JLabel sout=new JLabel(content);//创建新的标签,内容是输出的showJDialog
        sout.setBounds(0,0,200,150);//设置标签大小
        jDialog.getContentPane().add(sout);//setContentPane()/getContentPane()添加或设置组件, JFrame 有一个 Content Pane,
        // 窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:
        // getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
        jDialog.setVisible(true);//让弹框显示出来
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
        if (e.getSource() == jb)
        {
           jb.setIcon(new ImageIcon("C:\\Users\\16190\\Desktop\\log1.png"));
        }
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {


    }
}

3 展示验证码功能(验证码可以通过鼠标点击更换)

package Login;

import java.util.Random;

public class IfCode {

    public IfCode(){

       String code=random
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值