拼图小游戏
java的图像的图形化操作界面
主界面分析
练习一:创建主界面1
public class Test {
public static void main(String[] args) {
//游戏主界面
//界面默认为隐藏状态
JFrame GaneJFrame = new JFrame();
GaneJFrame.setSize(603,680);
//设置界面状态为显示
GaneJFrame.setVisible(true);
//登录界面
JFrame LoginJFrame = new JFrame();
LoginJFrame.setSize(488,430);
LoginJFrame.setVisible(true);
//注册界面
JFrame RegisterJFrame = new JFrame();
RegisterJFrame.setSize(488,500);
RegisterJFrame.setVisible(true);
}
}
将这三个个界面分别设置为三个类,有一个app类调用,界面的逻辑写在三个类中,三个类继承JFrame类并用无参构造来进行初始化。
public class GameJFrame extends JFrame {
public GameJFrame() {
this.setSize(603,680);
this.setVisible(true);
}
}
package com.czk.ui;
import javax.swing.*;
public class LoginJFrame extends JFrame {
public LoginJFrame() {
this.setSize(488,430);
this.setVisible(true);
}
}
package com.czk.ui;
import javax.swing.*;
public class RegisterJFrame extends JFrame {
public RegisterJFrame() {
this.setSize(488,500);
this.setVisible(true);
}
}
import com.czk.ui.GameJFrame;
import com.czk.ui.LoginJFrame;
import com.czk.ui.RegisterJFrame;
public class app {
public static void main(String[] args) {
new GameJFrame();
new LoginJFrame();
new RegisterJFrame();
}
}
练习二:创建主界面二
各个画面修改相同
//设置界面的标题
this.setTitle("拼图单机版 v1.0 注册");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置显示效果,一般放在最后
this.setVisible(true);
菜单制作
练习
只修改了游戏主界面:将各个过程抽取为了方法。
package com.czk.ui;
import javax.swing.*;
import java.awt.*;
public class GameJFrame extends JFrame {
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//设置显示效果,一般放在最后
this.setVisible(true);
}
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
}
添加图片
写在初始化菜单的下面,在无参构造中
//初始化图片
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\13.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//将JLabel对象交给页面
this.add(jLabel);
设立坐标确定图片的位置。
修改的代码:
22-25行:修改了jLabel交给的容器
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
20-21行:使用坐标轴指定图片的位置
//指定图片位置
jLabel.setBounds(0,0,105,105);
43-44行:将默认布局置为空,即关闭默认的居中布局。
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
package com.czk.ui;
import javax.swing.*;
import java.awt.*;
public class GameJFrame extends JFrame {
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化图片
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(0,0,105,105);
//将JLabel对象交给页面
this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//设置显示效果,一般放在最后
this.setVisible(true);
}
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
}
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
}
图片添加全部
提取为一个方法,使用for循环进行遍历,并在String字符串中插入数字来修改获取哪个图片
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
游戏主页面添加组件小结
练习:打乱一维数组中的数据
public class Test {
public static void main(String[] args) {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
//定义一个4*4的二维数组
int[][] arr = new int[4][4];
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
arr[i][i1] = tempArr[count];
count++;
}
}
//将得到的二维数组遍历
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
System.out.print(arr[i][i1] + " ");
}
System.out.println();
}
}
}
打乱图片
在初始化数据中设置二维数组存储每个图片应该耳的位置,在初始化图片是将各个图片按照位置放置
package com.czk.ui;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class GameJFrame extends JFrame {
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
arr[i][i1] = tempArr[count];
count++;
}
}
}
//初始化图片
private void startImage() {
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
JLabel jLabel1 = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\animal\\animal3\\"+number+".jpg"));
jLabel1.setBounds(j*105,i*105,105,105);
this.getContentPane().add(jLabel1);
}
}
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
}
事件
事件就是可以被组件识别的操作。
练习一:使用匿名内部类来设置事件
package com.czk.Test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test3 {
public static void main(String[] args) {
JFrame jFrame= new JFrame();
//设置长宽
jFrame.setSize(603,680);
//设置界面的标题
jFrame.setTitle("拼图单机版 v1.0");
//设置画面置顶
jFrame.setAlwaysOnTop(true);
//设置画面居中
jFrame.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
jFrame.setLayout(null);
//创建按钮对象
JButton jb = new JButton("点我啊");
//设置按钮位置
jb.setBounds(0,0,100,100);
//绑定事件监听
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("不要在点了");
}
});
//将按钮添加到界面中
jFrame.getContentPane().add(jb);
jFrame.setVisible(true);
}
}
练习二:使用类实现接口来设置事件
package com.czk.Test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class MyAction extends JFrame implements ActionListener{
//将两个按钮对象放在成员位置,两个方法都要用到。
//创建按钮对象
JButton jb = new JButton("点我啊");
//创建第二个按钮对象
JButton jbt = new JButton("点不到把");
public void show() {
JFrame jFrame= new JFrame();
//设置长宽
jFrame.setSize(603,680);
//设置界面的标题
jFrame.setTitle("拼图单机版 v1.0");
//设置画面置顶
jFrame.setAlwaysOnTop(true);
//设置画面居中
jFrame.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
jFrame.setLayout(null);
//设置按钮位置
jb.setBounds(0,0,100,100);
jbt.setBounds(200,200,100,100);
//绑定事件监听
jb.addActionListener(this);
jbt.addActionListener(this);
//将按钮添加到界面中
jFrame.getContentPane().add(jb);
jFrame.getContentPane().add(jbt);
jFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//对当前按钮进行判断
//获取被操作的按钮对象
Object source = e.getSource();
if (source == jb){
System.out.println("别点了");
} else if (source == jbt) {
//随机jbt的位置
Random r=new Random();
jbt.setBounds(r.nextInt(500),r.nextInt(500),100,100);
}
}
}
package com.czk.Test;
public class Test4 {
public static void main(String[] args) {
MyAction a = new MyAction();
a.show();
}
}
鼠标监听机制
package com.czk.Test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
public class MyJfram2 implements MouseListener {
public void show() {
JFrame jFrame= new JFrame();
//设置长宽
jFrame.setSize(603,680);
//设置界面的标题
jFrame.setTitle("拼图单机版 v1.0");
//设置画面置顶
jFrame.setAlwaysOnTop(true);
//设置画面居中
jFrame.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
jFrame.setLayout(null);
//创建按钮对象
JButton jb = new JButton("点我啊");
//设置按钮位置
jb.setBounds(0,0,100,100);
//绑定鼠标监听
jb.addMouseListener(this);
//将按钮添加到界面中
jFrame.getContentPane().add(jb);
jFrame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("单击");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("按下不松");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("松开");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("划入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("划出");
}
}
键盘监听
第三个方法通常不用,部分键位无法使用
package com.czk.Test;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
public class MyJfram3 implements KeyListener {
public void show() {
JFrame jFrame= new JFrame();
//设置长宽
jFrame.setSize(603,680);
//设置界面的标题
jFrame.setTitle("拼图单机版 v1.0");
//设置画面置顶
jFrame.setAlwaysOnTop(true);
//设置画面居中
jFrame.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
jFrame.setLayout(null);
//绑定键盘监听
//jFrame,界面对象,将键盘监听交个界面
//addKeyListener 表示给本界面添加键盘监听
//this 表示调用本类中的方法
jFrame.addKeyListener(this);
jFrame.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下不松");
}
@Override
//keyCode与ASCII码无关
public void keyReleased(KeyEvent e) {
System.out.println("松开按键");
int keyCode = e.getKeyCode();
System.out.println(keyCode);
if (keyCode == 65){
System.out.println("按下的是A键");
} else if (keyCode == 66) {
System.out.println("按下的是B键");
}
}
}
美化界面
package com.czk.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.util.Random;
public class GameJFrame extends JFrame {
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
arr[i][i1] = tempArr[count];
count++;
}
}
}
//初始化图片
private void startImage() {
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
JLabel jLabel1 = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\"+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
}
上下左右移动
上移动
package com.czk.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener {
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
//记录空白块的位置
int x =0;
int y = 0;
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
if (tempArr[count]==0){
x=i;
y=i1;
System.out.println(x);
System.out.println(y);
}else {
arr[i][i1] = tempArr[count];
}
count++;
}
}
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
JLabel jLabel1 = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\"+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//刷新界面
this.getContentPane().repaint();
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
//将界面和键盘监视器绑定
this.addKeyListener(this);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
//当按键抬起来时才执行
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
System.out.println(code);
if (code==37){
System.out.println("向左移动");
//添加校验防止数组越界
if (y==3){
return;
}
//逻辑:空白块右方的向左移动
arr[x][y] = arr[x][y+1];
arr[x][y+1] = 0;
y++;
//更新图片位置
startImage();
} else if (code == 38) {
System.out.println("向上移动");
//添加校验防止数组越界
if (x==3){
return;
}
//逻辑:空白块下方的向上移动
//获取下方数组值与空格互换
arr[x][y] = arr[x+1][y];
arr[x+1][y] = 0;
x++;
//更新图片位置
startImage();
} else if (code == 39) {
System.out.println("向右移动");
//添加校验防止数组越界
if (y==0){
return;
}
//逻辑:空白块左方的向右移动
arr[x][y] = arr[x][y-1];
arr[x][y-1] = 0;
y--;
//更新图片位置
startImage();
} else if (code == 40) {
System.out.println("向下移动");
//添加校验防止数组越界
if (x==0){
return;
}
//逻辑:空白块上方的向下移动
arr[x][y] = arr[x-1][y];
arr[x-1][y] = 0;
x--;
//更新图片位置
startImage();
}
}
}
查看完整图片功能
package com.czk.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener {
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
//记录空白块的位置
int x =0;
int y = 0;
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
if (tempArr[count]==0){
x=i;
y=i1;
System.out.println(x);
System.out.println(y);
}else {
arr[i][i1] = tempArr[count];
}
count++;
}
}
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
JLabel jLabel1 = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\"+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//刷新界面
this.getContentPane().repaint();
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
//将界面和键盘监视器绑定
this.addKeyListener(this);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
@Override
public void keyTyped(KeyEvent e) {}
//按下是显示图片
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == 65){
//显示完整图片
//删除所有图片
this.getContentPane().removeAll();
//写入完整图片
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\all.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(83,134,420,420);
//将JLabel对象交给页面
this.getContentPane().add(jLabel);
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon1 = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel1 = new JLabel(imageIcon1);
//指定图片位置
jLabel1.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel1);
//刷新页面
//刷新界面
this.getContentPane().repaint();
}
}
//当按键抬起来时才执行
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
System.out.println(code);
if (code==37){
System.out.println("向左移动");
//添加校验防止数组越界
if (y==3){
return;
}
//逻辑:空白块右方的向左移动
arr[x][y] = arr[x][y+1];
arr[x][y+1] = 0;
y++;
//更新图片位置
startImage();
} else if (code == 38) {
System.out.println("向上移动");
//添加校验防止数组越界
if (x==3){
return;
}
//逻辑:空白块下方的向上移动
//获取下方数组值与空格互换
arr[x][y] = arr[x+1][y];
arr[x+1][y] = 0;
x++;
//更新图片位置
startImage();
} else if (code == 39) {
System.out.println("向右移动");
//添加校验防止数组越界
if (y==0){
return;
}
//逻辑:空白块左方的向右移动
arr[x][y] = arr[x][y-1];
arr[x][y-1] = 0;
y--;
//更新图片位置
startImage();
} else if (code == 40) {
System.out.println("向下移动");
//添加校验防止数组越界
if (x==0){
return;
}
//逻辑:空白块上方的向下移动
arr[x][y] = arr[x-1][y];
arr[x-1][y] = 0;
x--;
//更新图片位置
startImage();
} else if (code == 65) {
//抬起按键后显示本来的图片
startImage();
}
}
}
作弊码
判断胜利
package com.czk.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener {
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
//记录正确的条件
int[][] win = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
// int[4][4] win = {
// {1,2,3,4},
// {5,6,7,8},
// {9,10,11,12},
// {13,14,15,16}
// }
//记录空白块的位置
int x =0;
int y = 0;
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
if (tempArr[count]==0){
x=i;
y=i1;
System.out.println(x);
System.out.println(y);
}else {
arr[i][i1] = tempArr[count];
}
count++;
}
}
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//显示图片之前先判断游戏是否结束
if (winer()){
//游戏结束
//将结束图标引入
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\win.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(203,280,197,73);
//将JLabel对象交给页面
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
}
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
JLabel jLabel1 = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\"+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//刷新界面
this.getContentPane().repaint();
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
//将界面和键盘监视器绑定
this.addKeyListener(this);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//将这些组件联系起来
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
@Override
public void keyTyped(KeyEvent e) {}
//按下是显示图片
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == 65){
//显示完整图片
//删除所有图片
this.getContentPane().removeAll();
//写入完整图片
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\animal\\animal3\\all.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(83,134,420,420);
//将JLabel对象交给页面
this.getContentPane().add(jLabel);
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon1 = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel1 = new JLabel(imageIcon1);
//指定图片位置
jLabel1.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel1);
//刷新页面
//刷新界面
this.getContentPane().repaint();
}
}
//当按键抬起来时才执行
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
System.out.println(code);
//如果游戏结束则不可以移动
if (winer()){
//结束方法
return;
}
if (code==37){
System.out.println("向左移动");
//添加校验防止数组越界
if (y==3){
return;
}
//逻辑:空白块右方的向左移动
arr[x][y] = arr[x][y+1];
arr[x][y+1] = 0;
y++;
//更新图片位置
startImage();
} else if (code == 38) {
System.out.println("向上移动");
//添加校验防止数组越界
if (x==3){
return;
}
//逻辑:空白块下方的向上移动
//获取下方数组值与空格互换
arr[x][y] = arr[x+1][y];
arr[x+1][y] = 0;
x++;
//更新图片位置
startImage();
} else if (code == 39) {
System.out.println("向右移动");
//添加校验防止数组越界
if (y==0){
return;
}
//逻辑:空白块左方的向右移动
arr[x][y] = arr[x][y-1];
arr[x][y-1] = 0;
y--;
//更新图片位置
startImage();
} else if (code == 40) {
System.out.println("向下移动");
//添加校验防止数组越界
if (x==0){
return;
}
//逻辑:空白块上方的向下移动
arr[x][y] = arr[x-1][y];
arr[x-1][y] = 0;
x--;
//更新图片位置
startImage();
} else if (code == 65) {
//抬起按键后显示本来的图片
startImage();
} else if (code == 66) {
//作弊码按下后将数组修改
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = win[i][j];
}
}
//更新图片位置
startImage();
}
}
//用于判断游戏是否成功
public Boolean winer(){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != win[i][j]){
return false;
}
}
}
return true;
}
}
计步功能
完善游戏主页面的其他功能
课后作业
练习一:
自行完成切换美女图片的功能。
需求如下:
需求详解:
1,在功能选项中添加更换图片,在更换图片里面再添加美女,动物,运动。
代码中功能是JMenu,更换图片也是JMenu,美女,动物,运动是三个JMenuItem
代码如下:
//创建菜单并添加到界面当中 //1.创建菜单JMenuBar的对象 JMenuBar jMenuBar = new JMenuBar(); //2.创建菜单上面的两个选项JMenu JMenu functionJMenu = new JMenu("功能"); JMenu aboutJMenu = new JMenu("关于我们"); //创建更换图片 JMenu changeImage = new JMenu("更换图片"); //3.创建JMenuItem的对象 JMenuItem girl = new JMenuItem("美女"); JMenuItem animal = new JMenuItem("动物"); JMenuItem sport = new JMenuItem("运动"); JMenuItem repalyItem = new JMenuItem("重新游戏"); JMenuItem reLoginItem = new JMenuItem("重新登录"); JMenuItem closeItem = new JMenuItem("关闭游戏"); JMenuItem accountItem = new JMenuItem("公众号"); //4.把美女,动物,运动添加到更换图片当中 changeImage.add(girl); changeImage.add(animal); changeImage.add(sport); //5.把更换图片,重新游戏,重新登录,关闭游戏添加到功能当中 functionJMenu.add(changeImage); functionJMenu.add(repalyItem); functionJMenu.add(reLoginItem); functionJMenu.add(closeItem); //6.把公众号添加到关于我们当中 aboutJMenu.add(accountItem); //5.把功能,关于我们添加到JMenuBar当中 jMenuBar.add(functionJMenu); jMenuBar.add(aboutJMenu); //6.把整个菜单JMenuBar添加到整个界面当中 this.setJMenuBar(jMenuBar);
2,当我们点击了美女之后,就会从13组美女图片中随机选择一组。
3,当我们点击了动物之后,就会从8组动物图片中随机选择一组。
4,当我们点击了运动之后,就会从10组运动图片中随机选择一组。
5,细节1:选择完毕之后,游戏界面中需要加载所有的小图片并且打乱顺序
6,细节2:按A的时候显示的是选择之后的图片
答案
将图片的地址值看做String字符串,不同的图片只有个别位置不同且有规律,按照规律进行拼接
package com.czk.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener, ActionListener {
Random r = new Random();
//存出地址
String bf = "\\animal\\animal3\\";
//菜单中的条目
JMenu xuanze = new JMenu("选择类型");
JMenuItem meinv = new JMenuItem("美女");
JMenuItem fengjing = new JMenuItem("风景");
JMenuItem dongwu = new JMenuItem("动物");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
//记录正确的条件
int[][] win = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
//定义一个变量记录步数
int count = 0;
//记录空白块的位置
int x =0;
int y = 0;
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
if (tempArr[count]==0){
x=i;
y=i1;
System.out.println(x);
System.out.println(y);
}
arr[i][i1] = tempArr[count];
count++;
}
}
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//显示图片之前先判断游戏是否结束
if (winer()){
//游戏结束
//将结束图标引入
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\win.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(203,280,197,73);
//将JLabel对象交给页面
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
}
//将步数写入
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel2 = new JLabel("步数: "+ count);
//指定图片位置
jLabel2.setBounds(30,30,200,50);
//将JLabel对象交给页面
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel2);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
String imgaddress = "javaseday16\\素材\\素材\\image"+bf;
System.out.println(imgaddress);
System.out.println(imgaddress+""+number+".jpg");
JLabel jLabel1 = new JLabel(new ImageIcon(imgaddress+""+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//刷新界面
this.getContentPane().repaint();
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
//将界面和键盘监视器绑定
this.addKeyListener(this);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
// JMenu xuanze = new JMenu("选择类型");
// JMenuItem meinv = new JMenuItem("美女");
// JMenuItem fengjing = new JMenuItem("风景");
// JMenuItem dongwu = new JMenuItem("动物");
//将这些组件联系起来
functionjMenuBar.add(xuanze);
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
xuanze.add(meinv);
xuanze.add(fengjing);
xuanze.add(dongwu);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将几个菜单绑定单击事件
RestartjMenuItem.addActionListener(this);
SignjMenuItem.addActionListener(this);
ColosjMenuItem.addActionListener(this);
AccountjMenuItem.addActionListener(this);
meinv.addActionListener(this);
fengjing.addActionListener(this);
dongwu.addActionListener(this);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
@Override
public void keyTyped(KeyEvent e) {}
//按下是显示图片
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == 65){
//显示完整图片
//删除所有图片
this.getContentPane().removeAll();
//写入完整图片
//将图片交给ImageIcon
String imgaddress = "javaseday16\\素材\\素材\\image"+bf;
ImageIcon imageIcon = new ImageIcon(imgaddress+"all.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(83,134,420,420);
//将JLabel对象交给页面
this.getContentPane().add(jLabel);
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon1 = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel1 = new JLabel(imageIcon1);
//指定图片位置
jLabel1.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel1);
//刷新页面
//刷新界面
this.getContentPane().repaint();
}
}
//当按键抬起来时才执行
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
System.out.println(code);
//如果游戏结束则不可以移动
if (winer()){
//结束方法
return;
}
if (code==37){
System.out.println("向左移动");
//添加校验防止数组越界
if (y==3){
return;
}
//逻辑:空白块右方的向左移动
arr[x][y] = arr[x][y+1];
arr[x][y+1] = 0;
y++;
count++;
//更新图片位置
startImage();
} else if (code == 38) {
System.out.println("向上移动");
//添加校验防止数组越界
if (x==3){
return;
}
//逻辑:空白块下方的向上移动
//获取下方数组值与空格互换
arr[x][y] = arr[x+1][y];
arr[x+1][y] = 0;
x++;
count++;
//更新图片位置
startImage();
} else if (code == 39) {
System.out.println("向右移动");
//添加校验防止数组越界
if (y==0){
return;
}
//逻辑:空白块左方的向右移动
arr[x][y] = arr[x][y-1];
arr[x][y-1] = 0;
y--;
count++;
//更新图片位置
startImage();
} else if (code == 40) {
System.out.println("向下移动");
//添加校验防止数组越界
if (x==0){
return;
}
//逻辑:空白块上方的向下移动
arr[x][y] = arr[x-1][y];
arr[x-1][y] = 0;
x--;
count++;
//更新图片位置
startImage();
} else if (code == 65) {
//抬起按键后显示本来的图片
startImage();
} else if (code == 66) {
//作弊码按下后将数组修改
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = win[i][j];
}
}
//更新图片位置
startImage();
}
}
//用于判断游戏是否成功
public Boolean winer(){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != win[i][j]){
return false;
}
}
}
return true;
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == RestartjMenuItem){
System.out.println("重新开始");
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
} else if (source==SignjMenuItem) {
System.out.println("重新登录");
//隐藏游戏界面
this.setVisible(false);
//开启登录界面
new LoginJFrame();
}else if (source==ColosjMenuItem) {
System.out.println("关闭游戏");
//只需要关闭虚拟机
System.exit(0);
}else if (source==AccountjMenuItem) {
System.out.println("公众号");
//创建一个弹窗对象
JDialog jDialog = new JDialog();
//创建一个对象管理容器
JLabel jLabel = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\about.png"));
// JLabel jLabel = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl2\\all.jpg"));
//设置位置
jLabel.setBounds(0,0,258,258);
jDialog.getContentPane().add(jLabel);
//设置弹窗的大小
jDialog.setSize(344,344);
//弹窗置顶
jDialog.setAlwaysOnTop(true);
//弹窗居中
jDialog.setLocationRelativeTo(null);
//弹窗不关闭则无法操作
jDialog.setModal(true);
//弹窗显示
jDialog.setVisible(true);
} else if (source == meinv) {
System.out.println("美女");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\girl\\girl"+i+"\\";
System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}else if (source == fengjing) {
System.out.println("风景");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\sport\\sport"+i+"\\";
// System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}else if (source == dongwu) {
System.out.println("动物");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\animal\\animal"+i+"\\";
// System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}
}
}
练习二:
练习二(扩展题):
独立完成登录界面,此题为附加扩展题。
![]()
需求详解:
public class LoginJFrame extends JFrame { //创建一个集合存储正确的用户名和密码 static ArrayList<User> list = new ArrayList<>(); static { list.add(new User("zhangsan","123")); list.add(new User("lisi","1234")); } public LoginJFrame() { //初始化界面 initJFrame(); //在这个界面中添加内容 initView(); //让当前界面显示出来 this.setVisible(true); } public void initView() { //1. 添加用户名文字 JLabel usernameText = new JLabel(new ImageIcon("puzzlegame\\image\\login\\用户名.png")); usernameText.setBounds(116, 135, 47, 17); this.getContentPane().add(usernameText); //2.添加用户名输入框 JTextField username = new JTextField(); username.setBounds(195, 134, 200, 30); this.getContentPane().add(username); //3.添加密码文字 JLabel passwordText = new JLabel(new ImageIcon("puzzlegame\\image\\login\\密码.png")); passwordText.setBounds(130, 195, 32, 16); this.getContentPane().add(passwordText); //4.密码输入框 JTextField password = new JTextField(); password.setBounds(195, 195, 200, 30); this.getContentPane().add(password); //验证码提示 JLabel codeText = new JLabel(new ImageIcon("puzzlegame\\image\\login\\验证码.png")); codeText.setBounds(133, 256, 50, 30); this.getContentPane().add(codeText); //验证码的输入框 JTextField code = new JTextField(); code.setBounds(195, 256, 100, 30); this.getContentPane().add(code); String codeStr = CodeUtil.getCode(); JLabel rightCode = new JLabel(); //设置内容 rightCode.setText(codeStr); //位置和宽高 rightCode.setBounds(300, 256, 50, 30); //添加到界面 this.getContentPane().add(rightCode); //5.添加登录按钮 JButton login = new JButton(); login.setBounds(123, 310, 128, 47); login.setIcon(new ImageIcon("puzzlegame\\image\\login\\登录按钮.png")); //去除按钮的默认边框 login.setBorderPainted(false); //去除按钮的默认背景 login.setContentAreaFilled(false); this.getContentPane().add(login); //6.添加注册按钮 JButton register = new JButton(); register.setBounds(256, 310, 128, 47); register.setIcon(new ImageIcon("puzzlegame\\image\\login\\注册按钮.png")); //去除按钮的默认边框 register.setBorderPainted(false); //去除按钮的默认背景 register.setContentAreaFilled(false); this.getContentPane().add(register); //7.添加背景图片 JLabel background = new JLabel(new ImageIcon("puzzlegame\\image\\login\\background.png")); background.setBounds(0, 0, 470, 390); this.getContentPane().add(background); } public void initJFrame() { this.setSize(488, 430);//设置宽高 this.setTitle("拼图游戏 V1.0登录");//设置标题 this.setDefaultCloseOperation(3);//设置关闭模式 this.setLocationRelativeTo(null);//居中 this.setAlwaysOnTop(true);//置顶 this.setLayout(null);//取消内部默认布局 } //要展示用户名或密码错误 public void showJDialog(String content) { //创建一个弹框对象 JDialog jDialog = new JDialog(); //给弹框设置大小 jDialog.setSize(200, 150); //让弹框置顶 jDialog.setAlwaysOnTop(true); //让弹框居中 jDialog.setLocationRelativeTo(null); //弹框不关闭永远无法操作下面的界面 jDialog.setModal(true); //创建Jlabel对象管理文字并添加到弹框当中 JLabel warning = new JLabel(content); warning.setBounds(0, 0, 200, 150); jDialog.getContentPane().add(warning); //让弹框展示出来 jDialog.setVisible(true); } }
JTextField用到的方法解释:
//设置位置和宽高 setBounds(x,y,宽,高); //返回输入框中用户输入的数据 //细节:如果用户没有输入,返回的是一个长度为0的字符串 getText(); //修改数据 setText(要修改的内容);
JButton用到的方法解释:
//给按钮设置背景图片,方法中传递ImageIcon的对象即可 setIcon();
答案
package com.czk.ui;
import com.czk.Pojo.User;
import com.czk.Utile.Code;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class LoginJFrame extends JFrame implements ActionListener {
//5.添加登录按钮
JButton login = new JButton();
//6.添加注册按钮
JButton register = new JButton();
//验证码的输入框
JTextField code = new JTextField();
//4.密码输入框
JTextField password = new JTextField();
//2.添加用户名输入框
JTextField username = new JTextField();
//定义验证码
String code1 = "";
//定义一个集合用以存储用户信息
ArrayList<User> users = new ArrayList<>();
public LoginJFrame() {
//界面初始化
initialize_interface();
//初始化数据
initeDate();
//初始化图片
startImage();
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//1. 添加用户名文字
JLabel usernameText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\用户名.png"));
usernameText.setBounds(116, 135, 47, 17);
this.getContentPane().add(usernameText);
username.setBounds(195, 134, 200, 30);
this.getContentPane().add(username);
System.out.println(username.getText());
//3.添加密码文字
JLabel passwordText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\密码.png"));
passwordText.setBounds(130, 195, 32, 16);
this.getContentPane().add(passwordText);
password.setBounds(195, 195, 200, 30);
this.getContentPane().add(password);
//验证码提示
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel codeText = new JLabel("验证码");
// JLabel codeText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\验证码.png"));
codeText.setBounds(133, 256, 50, 30);
this.getContentPane().add(codeText);
code.setBounds(195, 256, 100, 30);
this.getContentPane().add(code);
String codeStr = code1;
JLabel rightCode = new JLabel();
//设置内容
rightCode.setText(codeStr);
//位置和宽高
rightCode.setBounds(300, 256, 50, 30);
//添加到界面
this.getContentPane().add(rightCode);
login.setBounds(123, 310, 128, 47);
login.setIcon(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\登录按钮.png"));
//去除按钮的默认边框
login.setBorderPainted(false);
//去除按钮的默认背景
login.setContentAreaFilled(false);
this.getContentPane().add(login);
//将登录和注册按钮绑定单击事件、
login.addActionListener(this);
register.setBounds(256, 310, 128, 47);
register.setIcon(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\注册按钮.png"));
//去除按钮的默认边框
register.setBorderPainted(false);
//去除按钮的默认背景
register.setContentAreaFilled(false);
this.getContentPane().add(register);
//
register.addActionListener(this);
//7.添加背景图片
JLabel background = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
//初始化数据
private void initeDate() {
//获取验证码
code1 = Code.code();
//给用户集合赋初值
User user = new User("小李","123456");
users.add(user);
}
private void initialize_interface() {
this.setSize(488,430);
//设置界面的标题
this.setTitle("拼图单机版 v1.0 登录");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置显示效果,一般放在最后
this.setVisible(true);
}
//要展示用户名或密码错误
public void showJDialog(String content) {
//创建一个弹框对象
JDialog jDialog = new JDialog();
//给弹框设置大小
jDialog.setSize(200, 150);
//让弹框置顶
jDialog.setAlwaysOnTop(true);
//让弹框居中
jDialog.setLocationRelativeTo(null);
//弹框不关闭永远无法操作下面的界面
jDialog.setModal(true);
//创建Jlabel对象管理文字并添加到弹框当中
JLabel warning = new JLabel(content);
warning.setBounds(0, 0, 200, 150);
jDialog.getContentPane().add(warning);
//让弹框展示出来
jDialog.setVisible(true);
}
//事件监听
@Override
public void actionPerformed(ActionEvent e) {
//判断是点击的哪个按钮
Object source = e.getSource();
if (source == login){
System.out.println("点击了登录按钮");
//获取各个数据并比对
//获取验证码数据
String codeText = code.getText();
//获取用户名
String usernameText = username.getText();
//获取密码
String passwordText = password.getText();
//判断密码是否正确
if (codeText.equalsIgnoreCase(code1)){
//遍历判断是否有这个用户
for (int i = 0; i < users.size(); i++) {
User getuser = users.get(i);
if (getuser.getUsername().equals(usernameText)){
//判断密码
if (getuser.getPassword().equals(passwordText)){
//对应成功
//开始登录
//隐藏游戏界面
this.setVisible(false);
//开启注册界面
new GameJFrame();
return;
}
}
}
showJDialog("账号密码错误,请确认后登录");
}else{
showJDialog("验证码错误,请重新输入");
}
} else if (source == register) {
System.out.println("点击了注册按钮");
//隐藏游戏界面
this.setVisible(false);
//开启注册界面
new RegisterJFrame();
}
}
}
小游戏的全部代码(基本功能都实现了)
实体类(用于存储数据)
package com.czk.Pojo;
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "User{username = " + username + ", password = " + password + "}";
}
}
工具类(生成验证码)csdn上复制的
package com.czk.Utile;
import java.util.Random;
public class Code {
public static String code(){
Random yzm = new Random(); //定义一个随机生成数技术,用来生成随机数
//2,用String常用API-charAit生成验证码
String yzm1 = "1234567890abcdefghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ";//定义一个String变量存放需要的数据,一共58位
String yzm3 = "";//定义一个空的Atring变量用来接收生成的验证码
for (int i = 0; i < 5; i++) {
int a = yzm.nextInt(58);//随机生成0-57之间的数,提供索引位置
yzm3+=yzm1.charAt(a);//用get 和提供的索引找到相应位置的数据给变量
}
System.out.println("用String常用API-charAit生成的验证码为:"+yzm3);
return yzm3;
}
}
三个ui组件
游戏主界面
package com.czk.ui;
import com.czk.Pojo.User;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener, ActionListener {
//定义一个集合用以存储用户信息
ArrayList<User> users = new ArrayList<>();
Random r = new Random();
//存出地址
String bf = "\\animal\\animal3\\";
//菜单中的条目
JMenu xuanze = new JMenu("选择类型");
JMenuItem meinv = new JMenuItem("美女");
JMenuItem fengjing = new JMenuItem("风景");
JMenuItem dongwu = new JMenuItem("动物");
JMenuItem RestartjMenuItem = new JMenuItem("重新开始");
JMenuItem SignjMenuItem = new JMenuItem("重新登录");
JMenuItem ColosjMenuItem = new JMenuItem("关闭游戏");
JMenuItem AccountjMenuItem = new JMenuItem("公众号");
//定义一个4*4的二维数组
//用来管理数据
int[][] arr = new int[4][4];
//记录正确的条件
int[][] win = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
//定义一个变量记录步数
int count = 0;
//记录空白块的位置
int x =0;
int y = 0;
public GameJFrame() {
//初始化界面
initialize_interface();
//初始化菜单
initialize();
//初始化数据
initeDate();
//初始化图片
startImage();
//设置显示效果,一般放在最后
this.setVisible(true);
}
//初始化数据
private void initeDate() {
//定义一个一维数组
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//使用随机数与数组索引互换
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[index];
tempArr[index] = tempArr[i];
tempArr[i] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
System.out.print(tempArr[i] +", ");
}
System.out.println();
//四个一组添加到二维数组中
//解法一:
// int[][] date = new int[4][4];
// for (int i = 0; i < tempArr.length; i++) {
// date[i/4][i%4] = tempArr[i];
// }
//定义count用于记录tempArr数字的角标
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr[i].length; i1++) {
if (tempArr[count]==0){
x=i;
y=i1;
System.out.println(x);
System.out.println(y);
}
arr[i][i1] = tempArr[count];
count++;
}
}
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//样板:方便理解
// //初始化图片
// //将图片交给ImageIcon
// ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl1\\1.jpg");
// //将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
// JLabel jLabel = new JLabel(imageIcon);
//
// //指定图片位置
// jLabel.setBounds(0,0,105,105);
// //将JLabel对象交给页面
this.add(jLabel);
// //将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
// this.getContentPane().add(jLabel);
//显示图片之前先判断游戏是否结束
if (winer()){
//游戏结束
//将结束图标引入
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\win.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(203,280,197,73);
//将JLabel对象交给页面
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
}
//将步数写入
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel2 = new JLabel("步数: "+ count);
//指定图片位置
jLabel2.setBounds(30,30,200,50);
//将JLabel对象交给页面
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel2);
//一共方四行
for (int i = 0;i<4;i++) {
//表示在一行方四个图片
for (int j = 0; j < 4; j++) {
int number =arr[i][j];
String imgaddress = "javaseday16\\素材\\素材\\image"+bf;
System.out.println(imgaddress);
System.out.println(imgaddress+""+number+".jpg");
JLabel jLabel1 = new JLabel(new ImageIcon(imgaddress+""+number+".jpg"));
jLabel1.setBounds(j*105+83,i*105+134,105,105);
//添加边框
//BevelBorder.LOWERED,1表示图片下陷
//0 表示图片上凸
jLabel1.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel1);
}
}
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel);
//刷新界面
this.getContentPane().repaint();
}
//初始化界面
private void initialize_interface() {
//设置长宽
this.setSize(603,680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// //关闭默认的布局,将布局设置为空
this.setLayout(null);
//将界面和键盘监视器绑定
this.addKeyListener(this);
}
//初始化菜单
private void initialize() {
JMenuBar jMenuBar = new JMenuBar();
JMenu functionjMenuBar = new JMenu("功能");
JMenu aboutjMenuBar = new JMenu("关于我们");
// JMenu xuanze = new JMenu("选择类型");
// JMenuItem meinv = new JMenuItem("美女");
// JMenuItem fengjing = new JMenuItem("风景");
// JMenuItem dongwu = new JMenuItem("动物");
//将这些组件联系起来
functionjMenuBar.add(xuanze);
functionjMenuBar.add(RestartjMenuItem);
functionjMenuBar.add(SignjMenuItem);
functionjMenuBar.add(ColosjMenuItem);
aboutjMenuBar.add(AccountjMenuItem);
xuanze.add(meinv);
xuanze.add(fengjing);
xuanze.add(dongwu);
jMenuBar.add(functionjMenuBar);
jMenuBar.add(aboutjMenuBar);
//将几个菜单绑定单击事件
RestartjMenuItem.addActionListener(this);
SignjMenuItem.addActionListener(this);
ColosjMenuItem.addActionListener(this);
AccountjMenuItem.addActionListener(this);
meinv.addActionListener(this);
fengjing.addActionListener(this);
dongwu.addActionListener(this);
//将菜单组件交给界面
this.setJMenuBar(jMenuBar);
}
@Override
public void keyTyped(KeyEvent e) {}
//按下是显示图片
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == 65){
//显示完整图片
//删除所有图片
this.getContentPane().removeAll();
//写入完整图片
//将图片交给ImageIcon
String imgaddress = "javaseday16\\素材\\素材\\image"+bf;
ImageIcon imageIcon = new ImageIcon(imgaddress+"all.jpg");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel = new JLabel(imageIcon);
//指定图片位置
jLabel.setBounds(83,134,420,420);
//将JLabel对象交给页面
this.getContentPane().add(jLabel);
//添加背景图,先添加的在上面
//将图片交给ImageIcon
ImageIcon imageIcon1 = new ImageIcon("javaseday16\\素材\\素材\\image\\background.png");
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel jLabel1 = new JLabel(imageIcon1);
//指定图片位置
jLabel1.setBounds(40,40,508,560);
//将JLabel对象交给页面
// this.add(jLabel);
//将JLabel对象交给ContentPane即菜单条下面的界面空间的操作
this.getContentPane().add(jLabel1);
//刷新页面
//刷新界面
this.getContentPane().repaint();
}
}
//当按键抬起来时才执行
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
System.out.println(code);
//如果游戏结束则不可以移动
if (winer()){
//结束方法
return;
}
if (code==37){
System.out.println("向左移动");
//添加校验防止数组越界
if (y==3){
return;
}
//逻辑:空白块右方的向左移动
arr[x][y] = arr[x][y+1];
arr[x][y+1] = 0;
y++;
count++;
//更新图片位置
startImage();
} else if (code == 38) {
System.out.println("向上移动");
//添加校验防止数组越界
if (x==3){
return;
}
//逻辑:空白块下方的向上移动
//获取下方数组值与空格互换
arr[x][y] = arr[x+1][y];
arr[x+1][y] = 0;
x++;
count++;
//更新图片位置
startImage();
} else if (code == 39) {
System.out.println("向右移动");
//添加校验防止数组越界
if (y==0){
return;
}
//逻辑:空白块左方的向右移动
arr[x][y] = arr[x][y-1];
arr[x][y-1] = 0;
y--;
count++;
//更新图片位置
startImage();
} else if (code == 40) {
System.out.println("向下移动");
//添加校验防止数组越界
if (x==0){
return;
}
//逻辑:空白块上方的向下移动
arr[x][y] = arr[x-1][y];
arr[x-1][y] = 0;
x--;
count++;
//更新图片位置
startImage();
} else if (code == 65) {
//抬起按键后显示本来的图片
startImage();
} else if (code == 66) {
//作弊码按下后将数组修改
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = win[i][j];
}
}
//更新图片位置
startImage();
}
}
//用于判断游戏是否成功
public Boolean winer(){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != win[i][j]){
return false;
}
}
}
return true;
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == RestartjMenuItem){
System.out.println("重新开始");
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
} else if (source==SignjMenuItem) {
System.out.println("重新登录");
//隐藏游戏界面
this.setVisible(false);
//开启登录界面
new LoginJFrame(users);
}else if (source==ColosjMenuItem) {
System.out.println("关闭游戏");
//只需要关闭虚拟机
System.exit(0);
}else if (source==AccountjMenuItem) {
System.out.println("公众号");
//创建一个弹窗对象
JDialog jDialog = new JDialog();
//创建一个对象管理容器
JLabel jLabel = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\about.png"));
// JLabel jLabel = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\girl\\girl2\\all.jpg"));
//设置位置
jLabel.setBounds(0,0,258,258);
jDialog.getContentPane().add(jLabel);
//设置弹窗的大小
jDialog.setSize(344,344);
//弹窗置顶
jDialog.setAlwaysOnTop(true);
//弹窗居中
jDialog.setLocationRelativeTo(null);
//弹窗不关闭则无法操作
jDialog.setModal(true);
//弹窗显示
jDialog.setVisible(true);
} else if (source == meinv) {
System.out.println("美女");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\girl\\girl"+i+"\\";
System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}else if (source == fengjing) {
System.out.println("风景");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\sport\\sport"+i+"\\";
// System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}else if (source == dongwu) {
System.out.println("动物");
//随机数据显示的位置
int i = r.nextInt(11)+1;
//将地址值的位置修改
bf = "\\animal\\animal"+i+"\\";
// System.out.println("改后的bf"+bf);
//归零计数
count = 0;
//随机数据
initeDate();
//输入图片
startImage();
}
}
}
注册界面
package com.czk.ui;
import com.czk.Pojo.User;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class RegisterJFrame extends JFrame implements ActionListener {
//5.添加重置按钮
JButton reset = new JButton();
//6.添加注册按钮
JButton register = new JButton();
//4.密码输入框
JTextField password = new JTextField();
//4.密码输入框
JTextField passwordRe = new JTextField();
//2.添加用户名输入框
JTextField username = new JTextField();
//定义验证码
String code1 = "";
//定义一个集合用以存储用户信息
ArrayList<User> users = new ArrayList<>();
public RegisterJFrame(ArrayList<User> users) {
this.users = users;
extracted();
//初始化界面
startImage();
}
private void extracted() {
this.setSize(488,500);
//设置界面的标题
this.setTitle("拼图单机版 v1.0 注册");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置显示效果,一般放在最后
this.setVisible(true);
}
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//1. 添加用户名文字
JLabel usernameText = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\register\\注册用户名.png"));
usernameText.setBounds(100, 135, 80, 17);
this.getContentPane().add(usernameText);
//用户名的输入框
username.setBounds(195, 134, 200, 30);
this.getContentPane().add(username);
System.out.println(username.getText());
//3.添加密码文字
JLabel passwordText = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\register\\注册密码.png"));
passwordText.setBounds(100, 195, 64, 16);
this.getContentPane().add(passwordText);
password.setBounds(195, 195, 200, 30);
this.getContentPane().add(password);
//3.确认密码文字
JLabel passwordTextRest = new JLabel(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\register\\再次输入密码.png"));
passwordTextRest.setBounds(80, 256, 100, 16);
this.getContentPane().add(passwordTextRest);
passwordRe.setBounds(195, 256, 200, 30);
this.getContentPane().add(passwordRe);
//重置按钮
reset.setBounds(123, 310, 128, 47);
reset.setIcon(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\register\\重置按钮.png"));
//去除按钮的默认边框
reset.setBorderPainted(false);
//去除按钮的默认背景
reset.setContentAreaFilled(false);
this.getContentPane().add(reset);
//将登录和注册按钮绑定单击事件、
reset.addActionListener(this);
register.setBounds(256, 310, 128, 47);
register.setIcon(new ImageIcon("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday16\\素材\\素材\\image\\register\\注册按钮.png"));
//去除按钮的默认边框
register.setBorderPainted(false);
//去除按钮的默认背景
register.setContentAreaFilled(false);
this.getContentPane().add(register);
//
register.addActionListener(this);
//7.添加背景图片
JLabel background = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
//要展示出现的问题
public void showJDialog(String content) {
//创建一个弹框对象
JDialog jDialog = new JDialog();
//给弹框设置大小
jDialog.setSize(200, 150);
//让弹框置顶
jDialog.setAlwaysOnTop(true);
//让弹框居中
jDialog.setLocationRelativeTo(null);
//弹框不关闭永远无法操作下面的界面
jDialog.setModal(true);
//创建Jlabel对象管理文字并添加到弹框当中
JLabel warning = new JLabel(content);
warning.setBounds(0, 0, 200, 150);
jDialog.getContentPane().add(warning);
//让弹框展示出来
jDialog.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == reset){
reset();
} else if (source == register) {
//开始注册
//判断两次密码是否一致
String passwordReText = passwordRe.getText();
String passwordText = password.getText();
String usernameText = username.getText();
if (passwordText.equals(passwordReText)){
boolean flag = true;
//判断用户名是否存在
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
if (user.getUsername().equals(usernameText)){
showJDialog("账户已存在,请重新输入");
reset();
flag = false;
}
}
if (flag){
//进行注册
User user = new User();
user.setUsername(usernameText);
user.setPassword(passwordText);
users.add(user);
//跳转登录界面
//隐藏游戏界面
this.setVisible(false);
//开启注册界面
new LoginJFrame(users);
}
}else {
showJDialog("两次密码输入不一致,请重新输入");
//将两个密码重置
password.setText("");
passwordRe.setText("");
}
}
}
private void reset() {
//开始重置
System.out.println("开始重置");
password.setText("");
passwordRe.setText("");
username.setText("");
}
}
登录界面
package com.czk.ui;
import com.czk.Pojo.User;
import com.czk.Utile.Code;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class LoginJFrame extends JFrame implements ActionListener {
//5.添加登录按钮
JButton login = new JButton();
//6.添加注册按钮
JButton register = new JButton();
//验证码的输入框
JTextField code = new JTextField();
//4.密码输入框
JTextField password = new JTextField();
//2.添加用户名输入框
JTextField username = new JTextField();
//定义验证码
String code1 = "";
//定义一个集合用以存储用户信息
ArrayList<User> users = new ArrayList<>();
public LoginJFrame(ArrayList<User> users) {
this.users = users;
//界面初始化
initialize_interface();
//初始化数据
initeDate();
//初始化图片
startImage();
}
//初始化图片
private void startImage() {
//先将界面内的图片清除,用以更新新的图片位置
this.getContentPane().removeAll();
//1. 添加用户名文字
JLabel usernameText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\用户名.png"));
usernameText.setBounds(116, 135, 47, 17);
this.getContentPane().add(usernameText);
username.setBounds(195, 134, 200, 30);
this.getContentPane().add(username);
System.out.println(username.getText());
//3.添加密码文字
JLabel passwordText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\密码.png"));
passwordText.setBounds(130, 195, 32, 16);
this.getContentPane().add(passwordText);
password.setBounds(195, 195, 200, 30);
this.getContentPane().add(password);
//验证码提示
//将ImageIcon交给JLabel对象(管理容器,默认出现在界面的正中央)
JLabel codeText = new JLabel("验证码");
// JLabel codeText = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\验证码.png"));
codeText.setBounds(133, 256, 50, 30);
this.getContentPane().add(codeText);
code.setBounds(195, 256, 100, 30);
this.getContentPane().add(code);
String codeStr = code1;
JLabel rightCode = new JLabel();
//设置内容
rightCode.setText(codeStr);
//位置和宽高
rightCode.setBounds(300, 256, 50, 30);
//添加到界面
this.getContentPane().add(rightCode);
login.setBounds(123, 310, 128, 47);
login.setIcon(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\登录按钮.png"));
//去除按钮的默认边框
login.setBorderPainted(false);
//去除按钮的默认背景
login.setContentAreaFilled(false);
this.getContentPane().add(login);
//将登录和注册按钮绑定单击事件、
login.addActionListener(this);
register.setBounds(256, 310, 128, 47);
register.setIcon(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\注册按钮.png"));
//去除按钮的默认边框
register.setBorderPainted(false);
//去除按钮的默认背景
register.setContentAreaFilled(false);
this.getContentPane().add(register);
//
register.addActionListener(this);
//7.添加背景图片
JLabel background = new JLabel(new ImageIcon("javaseday16\\素材\\素材\\image\\login\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
//初始化数据
private void initeDate() {
//获取验证码
code1 = Code.code();
//给用户集合赋初值
User user = new User("小李","123456");
users.add(user);
}
private void initialize_interface() {
this.setSize(488,430);
//设置界面的标题
this.setTitle("拼图单机版 v1.0 登录");
//设置画面置顶
this.setAlwaysOnTop(true);
//设置画面居中
this.setLocationRelativeTo(null);
//设置关闭模式,任意个界面关闭则关闭虚拟机
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置显示效果,一般放在最后
this.setVisible(true);
}
//要展示用户名或密码错误
public void showJDialog(String content) {
//创建一个弹框对象
JDialog jDialog = new JDialog();
//给弹框设置大小
jDialog.setSize(200, 150);
//让弹框置顶
jDialog.setAlwaysOnTop(true);
//让弹框居中
jDialog.setLocationRelativeTo(null);
//弹框不关闭永远无法操作下面的界面
jDialog.setModal(true);
//创建Jlabel对象管理文字并添加到弹框当中
JLabel warning = new JLabel(content);
warning.setBounds(0, 0, 200, 150);
jDialog.getContentPane().add(warning);
//让弹框展示出来
jDialog.setVisible(true);
}
//事件监听
@Override
public void actionPerformed(ActionEvent e) {
//判断是点击的哪个按钮
Object source = e.getSource();
if (source == login){
System.out.println("点击了登录按钮");
//获取各个数据并比对
//获取验证码数据
String codeText = code.getText();
//获取用户名
String usernameText = username.getText();
//获取密码
String passwordText = password.getText();
//判断密码是否正确
if (codeText.equalsIgnoreCase(code1)){
boolean flag = true;
//遍历判断是否有这个用户
for (int i = 0; i < users.size(); i++) {
User getuser = users.get(i);
if (getuser.getUsername().equals(usernameText)){
//判断密码
if (getuser.getPassword().equals(passwordText)){
//对应成功
//开始登录
//隐藏游戏界面
flag = false;
this.setVisible(false);
//开启登录界面
new GameJFrame();
}
}
}
if (flag){
showJDialog("账号密码错误,请确认后登录");
}
}else{
showJDialog("验证码错误,请重新输入");
}
} else if (source == register) {
System.out.println("点击了注册按钮");
//隐藏游戏界面
this.setVisible(false);
//开启注册界面
new RegisterJFrame(users);
}
}
}