作品展示
如有需要素材或者疑问可以关注点赞私信哦
登录页面
游戏页面
页面标签都可以进行点击操作
代码展示
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