文章目录
main方法
登录界面
游戏主界面
User类
图片素材获取方式
基于Java实现的拼图小游戏,代码与图片素材来自b站up主黑马程序员的Java教学视频。
main方法
import ui.LoginJframe;
public class App {
? ? public static void main(String[] args) {
? ? ? ? new LoginJframe(); //创建登陆界面
? ? }
}
登录界面
package ui;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
//游戏登录界面
public class LoginJframe extends JFrame implements MouseListener {
? ? //创建全集一个用户集合用于登录判断
? ? static ArrayList<User> list=new ArrayList<>();
? ? static String userName;
? ? //添加用户集合成员,用于登录操作判断
? ? static{
? ? ? ? list.add(new User("wuhu","yahu"));
? ? }
? ? //切换验证码按键
? ? JButton Switch_Captcha=new JButton();
? ? //设置注册按钮
? ? JButton enrollJButton=new JButton();
? ? //设置登录按钮
? ? JButton loginJButton = new JButton();
? ? //getCaptcha为验证码获取方法,传递的数据为需要返回的验证码的长度
? ? String str_Captcha=getCaptcha(5);
? ? /*登录与注册按钮的图片文件位置*/
? ? String Image_enroll="untitled/image/login/注册按钮.png";
? ? String Image_login="untitled/image/login/登录按钮.png";
? ? //显示用户名输入框
? ? JTextField NameFrame=new JTextField();
? ? //添加验证码文本框
? ? JTextField FrameCaptcha=new JTextField();
? ? //密码输入显示框
? ? JTextField PasswordFrame=new JTextField();
? ? //创建一个弹框对象
? ? JDialog Error;
? ? //登录界面的空参构造
? ? public LoginJframe(){
? ? ? ? initJFrame(); //界面初始化项目
? ? ? ? initView(); //界面元素添加
? ? ? ? //绑定监听
? ? ? ? enrollJButton.addMouseListener(this);
? ? ? ? loginJButton.addMouseListener(this);
? ? ? ? Switch_Captcha.addMouseListener(this);
? ? ? ? //将界面状态设置为显示
? ? ? ? this.setVisible(true);
? ? }
? ? //界面初始化类
? ? public void initView(){
? ? ? ? //清空界面
? ? ? ? this.getContentPane().removeAll();
? ? ? ? //显示用户名
? ? ? ? JLabel UsrtName = new JLabel(new ImageIcon("untitled/image/login/用户名.png"));
? ? ? ? UsrtName.setBounds(100,105,47,17);
? ? ? ? this.getContentPane().add(UsrtName);
? ? ? ? //配置用户名输入框
? ? ? ? NameFrame.setBounds(160,100,200,30);
? ? ? ? this.getContentPane().add(NameFrame);
? ? ? ? //显示密码
? ? ? ? JLabel UsrtPassword=new JLabel(new ImageIcon("untitled/image/login/密码.png"));
? ? ? ? UsrtPassword.setBounds(100,155,47,17);
? ? ? ? this.getContentPane().add(UsrtPassword);
? ? ? ? //配置密码框参数
? ? ? ? PasswordFrame.setBounds(160,150,200,30);
? ? ? ? this.getContentPane().add(PasswordFrame);
? ? ? ? //添加验证码
? ? ? ? JLabel CaptchaTxT=new JLabel(new ImageIcon("untitled/image/login/验证码.png"));
? ? ? ? CaptchaTxT.setBounds(100,215,47,17);
? ? ? ? this.getContentPane().add(CaptchaTxT);
? ? ? ? //配置验证码文本框参数
? ? ? ? FrameCaptcha.setBounds(160,210,100,30);
? ? ? ? this.getContentPane().add(FrameCaptcha);
? ? ? ? //验证码显示
? ? ? ? System.out.println(str_Captcha);
? ? ? ? JLabel Captcha=new JLabel(str_Captcha);
? ? ? ? Captcha.setBounds(280,215,50,20);
? ? ? ? this.getContentPane().add(Captcha);
? ? ? ? //设置验证码按钮
? ? ? ? Switch_Captcha.setBounds(275,215,50,20);
? ? ? ? Switch_Captcha.setBorderPainted(false);
? ? ? ? Switch_Captcha.setContentAreaFilled(false);
? ? ? ? this.getContentPane().add(Switch_Captcha);
? ? ? ? //配置登录按钮
? ? ? ? loginJButton.setIcon(new ImageIcon(Image_login));
? ? ? ? loginJButton.setBorderPainted(false); //去除按钮的默认边框
? ? ? ? loginJButton.setContentAreaFilled(false); //去除按钮的默认背景
? ? ? ? loginJButton.setBounds(123,310,128,47); //设置位置与大小
? ? ? ? this.getContentPane().add(loginJButton);
? ? ? ? //配置注册按钮
? ? ? ? enrollJButton.setIcon(new ImageIcon(Image_enroll));
? ? ? ? enrollJButton.setBorderPainted(false); //去除按钮的默认边框
? ? ? ? enrollJButton.setContentAreaFilled(false); //去除按钮的默认背景
? ? ? ? enrollJButton.setBounds(270,310,128,47); //设置位置与大小
? ? ? ? this.getContentPane().add(enrollJButton);
? ? ? ? // 添加背景图片
? ? ? ? //设置一个JLabel对象进行管理图片
? ? ? ? JLabel background_JLabel=new JLabel(new ImageIcon("untitled/image/register/background.png"));
? ? ? ? //设置图片的位置与宽高
? ? ? ? background_JLabel.setBounds(0,0,470,390);
? ? ? ? //将容器添加到界面当中
? ? ? ? this.getContentPane().add(background_JLabel);
? ? ? ? //刷新界面
? ? ? ? this.getContentPane().repaint();
? ? }
? ? //获取验证码方法 n 为需要返回的验证码长度
? ? public static String getCaptcha(int len){
? ? ? ? Random r=new Random(); //设置随机方法种子
? ? ? ? StringBuilder str=new StringBuilder();
? ? ? ? for (int i = 0; i < len-1; i++) {
? ? ? ? ? ? int num=r.nextInt(58)+65; //字母范围的数值
? ? ? ? ? ? //跳过ascii表中的其他字符
? ? ? ? ? ? if(num > 90 && num < 97){
? ? ? ? ? ? ? ? num+=7;
? ? ? ? ? ? }
? ? ? ? ? ? str.append((char)num); //将数值强制转换为字母并添加到字符串中
? ? ? ? }
? ? ? ? //将数字添加到字符串中
? ? ? ? int number=r.nextInt(10);
? ? ? ? str.append(number);
? ? ? ? //转换为字符数组更好进行乱序的操作
? ? ? ? char []arr= str.toString().toCharArray();
? ? ? ? //将其数组元素顺序打乱
? ? ? ? for (int i = 0; i < arr.length; i++) {
? ? ? ? ? ? int index=r.nextInt(arr.length);
? ? ? ? ? ? char temp=arr[i];
? ? ? ? ? ? arr[i]=arr[index];
? ? ? ? ? ? arr[index]=temp;
? ? ? ? }
? ? ? ? //将完成的验证码转换为字符串将其返回
? ? ? ? return new String(arr);
? ? }
? ? //注册界面初始化方法
? ? public void initJFrame(){
?