本内容包含:登录页面+注册页面+猜数字小游戏页面

登录页面:手机号+密码+校验码+随机校验码+登录按钮+注册

注册页面:手机号+密码+密码确认+注册按钮

游戏页面:标题(提示框)+输入框+猜一下+重置

包含校验:

手机号:非空+11位+首位非0整数+整数

密   码:非空+6-18位整数+英文字母组合

校验码:非空+整数+英文字母

数   字:非空+非数字+非范围

游戏界面:

登录游戏自动生成1-100的随机整数, 输入1-100的任意一个整数

输入不等于随机数,提示输入范围,直到输入整数等于随机数。

如果在输入期间输入空,非数字,非范围,则会提示正确的输入范围。

点击猜一下或者回车进行猜测,点击重置,重新开始游戏。

public class GuessNumberGame extends JFrame {private int small = 1;private int big = 100;Random r = new Random();private int num = r.nextInt(100)+1;public GuessNumberGame(){init();this.setVisible(true);}private void init() {this.setTitle("猜数字小游戏");this.setSize(600,400);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);this.setLayout(null);//标题JLabel jl = new JLabel("欢迎来到猜数字小游戏");jl.setSize(500,40);jl.setLocation(100,60);jl.setFont(new Font("华文行楷", Font.PLAIN, 40));this.add(jl);//文本框JTextField jtf = new JTextField();jtf.setSize(200,40);jtf.setLocation(200,140);jtf.setFont(new Font("华文行楷", Font.PLAIN, 40));this.add(jtf);//"猜一下"按钮JButton jb = new JButton("猜一下");jb.setSize(160, 40);jb.setLocation(130,220);jb.setFont(new Font("华文行楷", Font.PLAIN, 40));this.add(jb);//"重置哈"按钮JButton reset = new JButton("重置哈");reset.setSize(160,40);reset.setLocation(320,220);reset.setFont(new Font("华文行楷", Font.PLAIN, 40));this.add(reset);//给文本框装上doClickjtf.addActionListener(e -> jb.doClick());//给"猜一下"按钮装上监听jb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String text = jtf.getText();//校验null和空if (text.equals("") || text.equals(null)){jl.setText("无内容,请输入数字内容");}//校验只能是数字for (int i = 0; i < text.length(); i++) {char c = text.charAt(i);if (c < '0' || c > '9'){jl.setText("输入的内容包含非法内容");return;}}int a = Integer.parseInt(text);//校验范围if (a>big || a < small){jl.setText("请输入范围内数字"+"("+small+"-"+big+")");return;}//逻辑if (a>num){big=a;jl.setText("猜大了,应该在"+ small + "到" + big + "之间");jtf.setText("");}else if(a<num){small=a;jl.setText("猜大了,应该在"+ small + "到" + big + "之间");jtf.setText("");}else{jl.setText("恭喜您,猜对了!!!");}}});//给"重置哈"装上监听reset.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {small=1;big=100;num = r.nextInt(100)+1;jtf.setText("");jl.setText("欢迎来到猜数字小游戏");}});}
}

登录页面:

用户输入用户手机号,密码,校验码,点击登录,

注册,提示用户未注册, 已注册,进行,密码

和验证码校验,无误,登录到游戏界面。

package test1;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.ArrayList;/*** @author WJJ* @create 2022-05-21*/
public class LoginAndRegisterTab extends JFrame {private JLabel registLable;private JPanel loginPanle;private JTabbedPane tabContianer;public LoginAndRegisterTab(){init();this.setVisible(true);}private void init() {this.setSize(600,400);this.setTitle("欢迎来到猜数字小游戏");this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);tabContianer = new JTabbedPane();initLoginTab();tabContianer.addTab("登录", loginPanle);this.add(tabContianer);}//登录界面private void initLoginTab() {loginPanle = new JPanel();loginPanle.setLayout(null);//手机号JLabelJLabel phoneNumberLabel = new JLabel("手机号");phoneNumberLabel.setSize(70, 40);phoneNumberLabel.setLocation(100,40);phoneNumberLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));//手机号输入框JTextFieldJTextField phoneNumberTextField = new JTextField();phoneNumberTextField.setSize(300,40);phoneNumberTextField.setLocation(200,40);phoneNumberTextField.setFont(new Font("华文行楷", Font.PLAIN, 20));//密码JLabelJLabel passwordLabel= new JLabel("密   码");passwordLabel.setSize(70, 40);passwordLabel.setLocation(100,110);passwordLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));//密码输入框JTextFieldJPasswordField passwordTextField = new JPasswordField();passwordTextField.setSize(300,40);passwordTextField.setLocation(200,110);//校验码JLabelJLabel verifyCodeLabel = new JLabel("校验码");verifyCodeLabel.setSize(70, 40);verifyCodeLabel.setLocation(100,180);verifyCodeLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));//校验码输入JTextFieldJTextField verifyCodeTextField = new JTextField();verifyCodeTextField.setSize(150,40);verifyCodeTextField.setLocation(200,180);verifyCodeTextField.setFont(new Font("华文行楷", Font.PLAIN, 20));//校验码显示区JLabelJLabel verifyCodeDisplayLabel = new JLabel(StringUtils.getVerifyCode());verifyCodeDisplayLabel.setSize(150, 40);verifyCodeDisplayLabel.setLocation(400,180);verifyCodeDisplayLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));verifyCodeDisplayLabel.setForeground(Color.RED);//校验码显示监听verifyCodeDisplayLabel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {verifyCodeDisplayLabel.setText(StringUtils.getVerifyCode());}});//登录按钮 JButtonJButton loginButton = new JButton("登录");loginButton.setSize(100, 40);loginButton.setLocation(200,240);loginButton.setFont(new Font("华文行楷", Font.PLAIN, 20));loginButton.addActionListener(e -> {// 获取 手机号  密码  验证码String phoneNumber = phoneNumberTextField.getText();String password = passwordTextField.getText();String verifyCode = verifyCodeTextField.getText();//校验手机格式String[] messages = StringUtils.verifyPhoneNumber(phoneNumber);if (messages[1].equals("RED")) {JOptionPane.showMessageDialog(LoginAndRegisterTab.this, messages[0]);phoneNumberTextField.requestFocus();return;}//2: 判断手机号是否存在ArrayList<String> allUsers = IoUtils.allUser();int index = StringUtils.isExist(phoneNumber, allUsers);if (index == -1) {JOptionPane.showMessageDialog(LoginAndRegisterTab.this, "用户名不存在");phoneNumberTextField.requestFocus();return;}//3: 比对密码// passwordString phoneNumberAndPassword = allUsers.get(index);String pwd = phoneNumberAndPassword.substring(12);if (!password.equals(pwd)) {JOptionPane.showMessageDialog(LoginAndRegisterTab.this, "密码错误");passwordTextField.requestFocus();return;}//4:比对 验证码,String text = verifyCodeDisplayLabel.getText(); //验证码显示区显示的内容if (!verifyCode.equalsIgnoreCase(text)) {JOptionPane.showMessageDialog(LoginAndRegisterTab.this, "验证码错误");verifyCodeTextField.requestFocus();return;}//登录成功,关闭当前登陆窗口,跳转到猜数字窗口JOptionPane.showMessageDialog(LoginAndRegisterTab.this, "登录成功!!!");LoginAndRegisterTab.this.dispose();new GuessNumberGame();});//注册registLable = new JLabel("注册");registLable.setSize(70, 20);registLable.setLocation(303,263);registLable.setFont(new Font("华文行楷", Font.PLAIN, 13));registLable.setForeground(Color.BLUE);//给注册装监听registLable.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {initRegistTab();registLable.setVisible(false);}});//添加组件loginPanle.add(phoneNumberLabel);loginPanle.add(phoneNumberTextField);loginPanle.add(passwordLabel);loginPanle.add(passwordTextField);loginPanle.add(verifyCodeLabel);loginPanle.add(verifyCodeTextField);loginPanle.add(verifyCodeDisplayLabel);loginPanle.add(loginButton);loginPanle.add(registLable);}

注册页面:上接登录页面

用户未注册,点击注册来到注册页面

输入要注册的手机号,未注册则不能进行下一步

已注册,提示已注册,输入密码,确认密码

点击注册,无误注册界面关闭转登录页面

//注册界面private void initRegistTab() {JPanel rigistPanel = new JPanel();rigistPanel.setLayout(null);//手机号JLabelJLabel phoneNumberLabel = new JLabel("手机号");phoneNumberLabel.setSize(70, 40);phoneNumberLabel.setLocation(100,40);phoneNumberLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));//手机号输入框JTextFieldJTextField phoneNumberTextField = new JTextField();phoneNumberTextField.setSize(300,40);phoneNumberTextField.setLocation(200,40);phoneNumberTextField.setFont(new Font("华文行楷", Font.PLAIN, 20));//手机号输入提示JLabelJLabel phoneNumberTip = new JLabel();phoneNumberTip.setSize(300,10);phoneNumberTip.setLocation(200,83);phoneNumberTip.setFont(new Font("华文行楷", Font.PLAIN, 9));//对手机号输入框监听phoneNumberTextField.addFocusListener(new FocusAdapter() {@Overridepublic void focusLost(FocusEvent e) {String phoneNumber = phoneNumberTextField.getText();String[] messages = StringUtils.verifyPhoneNumber(phoneNumber);phoneNumberTip.setText(messages[0]);if (messages[1].equals("RED")){phoneNumberTip.setForeground(Color.RED);phoneNumberTextField.requestFocus();}else if(messages[1].equals("BLUE")){ArrayList<String> allUsers = IoUtils.allUser();int index = StringUtils.isExist(phoneNumber, allUsers);if (index != -1){phoneNumberTip.setText("手机号已经被注册了");phoneNumberTip.setForeground(Color.RED);phoneNumberTextField.requestFocus();return;}phoneNumberTip.setForeground(Color.BLUE);}}});//密码JLabelJLabel passwordLabel= new JLabel("密   码");passwordLabel.setSize(70, 40);passwordLabel.setLocation(100,110);passwordLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));//密码输入框JTextFieldJPasswordField passwordTextField = new JPasswordField();passwordTextField.setSize(300,40);passwordTextField.setLocation(200,110);//密码输入提示JLabelJLabel passwordTip = new JLabel();passwordTip.setSize(300,10);passwordTip.setLocation(200,153);passwordTip.setFont(new Font("华文行楷", Font.PLAIN, 9));//密码提示监听passwordTextField.addFocusListener(new FocusAdapter() {@Overridepublic void focusLost(FocusEvent e) {String password = passwordTextField.getText();String[] messages = StringUtils.verifyPassword(password);passwordTip.setText(messages[0]);if (messages[1].equals("RED")){passwordTip.setForeground(Color.RED);passwordTip.requestFocus();}else if(messages[1].equals("BLUE")){passwordTip.setForeground(Color.BLUE);}}});//确认密码LabelJLabel confirmPasswordLabel = new JLabel("确认密码");confirmPasswordLabel.setSize(80, 40);confirmPasswordLabel.setLocation(100,180);confirmPasswordLabel.setFont(new Font("华文行楷", Font.PLAIN, 20));// 确认密码输入 JTextFieldJPasswordField confirmPasswordTextField = new JPasswordField();confirmPasswordTextField.setSize(300,40);confirmPasswordTextField.setLocation(200,180);//确认密码提示JLabelJLabel confirmPasswordTip = new JLabel();confirmPasswordTip.setSize(300,10);confirmPasswordTip.setLocation(200,223);confirmPasswordTip.setFont(new Font("华文行楷", Font.PLAIN, 9));//确认密码输入监听confirmPasswordTextField.addFocusListener(new FocusAdapter() {@Overridepublic void focusLost(FocusEvent e) {String confirmPassword = confirmPasswordTextField.getText();String password = passwordTextField.getText();if (confirmPassword.equals(password)){confirmPasswordTip.setText("输入密码一致");confirmPasswordTip.setForeground(Color.BLUE);}else if (!confirmPassword.equals(password)){confirmPasswordTip.setText("输入密码不一致");confirmPasswordTip.setForeground(Color.RED);confirmPasswordTip.requestFocus();}}});//注册按钮 JButtonJButton registButton = new JButton("注册");registButton.setSize(100, 40);registButton.setLocation(200,240);registButton.setFont(new Font("华文行楷", Font.PLAIN, 20));//注册按钮校验 JOptionPane.showMessageDialog();registButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 手机号格式校验String phoneNumber = phoneNumberTextField.getText();String[] messeges = StringUtils.verifyPhoneNumber(phoneNumber);if (messeges[1].equals("RED")){JOptionPane.showMessageDialog(LoginAndRegisterTab.this,messeges[0]);return;}//手机是否注册校验ArrayList<String> allUsers = IoUtils.allUser();int index = StringUtils.isExist(phoneNumber, allUsers);if (index != -1){JOptionPane.showMessageDialog(LoginAndRegisterTab.this, "该手机号已被注册!");return;}//密码格式校验String password = passwordTextField.getText();messeges = StringUtils.verifyPassword(password);if (messeges[1].equals("RED")){JOptionPane.showMessageDialog(LoginAndRegisterTab.this,messeges[0]);return;}//密码校验String confirmPassword = confirmPasswordTextField.getText();if (!confirmPassword.equals(password)){JOptionPane.showMessageDialog(LoginAndRegisterTab.this,"密码和确认密码不一致");return;}// 保存 手机号 密码try {OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(LoginAndRegisterTab.class.getClassLoader().getResource("user.txt").getPath(),true), "UTF-8");BufferedWriter bw = new BufferedWriter(writer);bw.write(phoneNumber+"&"+password+"\n");/* bw.newLine();*/bw.flush();bw.close();} catch (IOException ioException) {ioException.printStackTrace();}//注册成功JOptionPane.showMessageDialog(LoginAndRegisterTab.this,"注册成功!");// 关闭 注册界面tabContianer.remove(1);tabContianer.setSelectedIndex(0);registLable.setVisible(true);}});//添加组件rigistPanel.add(phoneNumberLabel);rigistPanel.add(phoneNumberTextField);rigistPanel.add(phoneNumberTip);rigistPanel.add(passwordLabel);rigistPanel.add(passwordTextField);rigistPanel.add(passwordTip);rigistPanel.add(confirmPasswordLabel);rigistPanel.add(confirmPasswordTextField);rigistPanel.add(confirmPasswordTip);rigistPanel.add(registButton);tabContianer.addTab("注册", rigistPanel);tabContianer.setSelectedIndex(1);}}

Io工具类

public class IoUtils {private IoUtils(){}/***读入已保存用户*/public static ArrayList<String> allUser(){ArrayList<String> al = new ArrayList<>();InputStreamReader is = null;try {is = new InputStreamReader(IoUtils.class.getClassLoader().getResourceAsStream("user.txt"), "UTF-8");BufferedReader br = new BufferedReader(is);String s;while((s=br.readLine()) != null){if (!s.equals("")){al.add(s);}}br.close();} catch (Exception e) {e.printStackTrace();}return al;}
}

String工具类

package test1;import java.util.ArrayList;
import java.util.Random;/*** @author WJJ* @create 2022-05-20*/
public class StringUtils {private StringUtils(){}/***用户手机号校验*/public static String[] verifyPhoneNumber(String phoneNumber){//校验null和空if (phoneNumber==null || phoneNumber.equals("")){return new String[]{"手机号不能为空","RED"};}//校验手机号是11位if (phoneNumber.length() != 11){return new String[]{"非11位手机号","RED"};}//校验手机号第1位if (phoneNumber.charAt(0) != '1'){return new String[]{"手机号非1开头","RED"};}//校验手机号中非数字字符for (int i = 0; i < phoneNumber.length(); i++) {if (phoneNumber.charAt(i)<'0' || phoneNumber.charAt(i) > '9'){return new String[]{"含有非数字符号","RED"};}}return new String[]{"手机号输入正确","BLUE"};}/***密码校验*/public static String[] verifyPassword(String password){//校验密码6-18位if (password.length()<6 || password.length()>18){return new String[]{"请输入6到18位密码","RED"};}//校验密码为数字+字母组合int noNumCount = 0;for (int i = 0; i < password.length(); i++) {if (password.charAt(i)>'9' || password.charAt(i)<'0'){noNumCount++;}}if (noNumCount == password.length()){return new String[]{"密码是由数字加字母组合","RED"};}int noLetterCount = 0;for (int i = 0; i < password.length(); i++) {char c = password.charAt(i);if (c<'A' || (c>'z' && c<'a') || c>'z'){noLetterCount++;}}if (noLetterCount == password.length()){return new String[]{"密码是由数字加字母组合","RED"};}return new String[]{"密码格式正确","BLUE"};}/*** 随机生成校验码*/public static String getVerifyCode(){int index=0;int n = 0;char[] chars = new char[52];for (int i = 'A',j = 'a'; i <= 'Z'; i++,j++) {chars[index++]=(char)i;chars[index++]=(char)j;}String str = new String(chars)+"0123456789";String code = "";for (int i = 0; i < 4; i++) {char c = str.charAt(new Random().nextInt(str.length()));code += c;}return code;}public static int isExist(String phone, ArrayList<String> al){for (int i = 0; i < al.size(); i++) {if(phone.equals(al.get(i).substring(0,11))){return i;}}return -1;}
}

mian

public class Demo {public static void main(String[] args) {LoginAndRegisterTab loginAndRegisterTab = new LoginAndRegisterTab();}
}

视频原解:小贤讲Java的个人空间_哔哩哔哩_bilibili

带登录页面的猜数字小游戏相关推荐

  1. 用C语言实现“模拟用户登录情景”、“猜数字小游戏”

    for循环,这种情况,break跳出循环,直接打印0123:记录一下 2.实现左右增加字符,如下图所示,要想到用数组,左右增加变量,再加入延迟,sleep的头文件是#<windows.h> ...

  2. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面

    Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面 from tkinter import * from tkinter import messagebox 导入提示框 from ...

  3. 模拟登录,给三次机会,并提示还有几次。如果登录成功,就可以玩猜数字小游戏了。

    1.猜字谜小游戏 *随机生成一个数 *从键盘录入一个数与随机数进行比较,判断是大了还是小了 * */ package test1;import java.util.Scanner;public cla ...

  4. 【C语言】猜数字小游戏详细教程

    大家好!我是同学[森],一名计算机爱好者,今天让我们进入小游戏开发模式.若有错误,请多多指教.小主使用的是VS2019编译器. 由于小主是大一学生,知识掌握水平有限,代码可能会有写漏洞和不足,仅供借鉴 ...

  5. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  6. 微信小程序开发实例:猜数字小游戏

    这学期选修了<微信小程序设计>这门通识课,最近准备把本学期的部分小作业整理一下. 一.案例描述 设计一个微信小程序,由后台生成一个0~100的随机整数,用户猜这个整数,并在输入框中输入用户 ...

  7. Vue3和码上掘金实现猜数字小游戏

    前言 Vue3.0 是2020年09月18日正式发布的,距现在两年多了!而且Vue3是默认的Vue版本了,功能也在不断完善和扩展中,比如焕然一新的 Composition API 语法.setup语法 ...

  8. 猜数字小游戏(原创)

    简介 这款原创的猜数字小游戏可以帮你打消无聊的时间哦~你可以猜一位数.两位数.三位数或四位数,看看你能不能快速的猜中!难度有三种:简单.中等和困难.如果你有足够的信心,可以挑战困难等级!同时这款小游戏 ...

  9. Java基于GUI完成的猜数字小游戏

    猜数字小游戏 不废话想看看效果吧! 当我们答对后就会出现: 如果你实在急着想知道答案: 简要说明: 所猜测的数字为1~1000: 只能通过按确定输出答案,未设置Enter键直接输入的监控. 退出请直接 ...

最新文章

  1. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
  2. javascript 值传递与作用域
  3. mysql 同步日志文件_mysql 5.5 中对SLAVE relay-log相关日志文件同步的强化
  4. 敏捷个人课后练习四主题:我想要什么?
  5. Python编程基础:第十四节 列表Lists
  6. maven GroupId 和ArtifactId通常填什么
  7. 赛锐信息:SuccessFactors激活高效能人员战略
  8. 信息系统项目管理系列之六:项目范围管理
  9. 【缅怀妈妈系列诗歌】之十三:妈妈,我接您回家
  10. poj2112,最大流,最优挤奶方案
  11. 英国正在大举进军AI,看懂其三大投资走向
  12. 读余华《活着》,你好,我叫福贵
  13. Lonlife 1016 Change of Life
  14. 库克将为斯坦福大学2019年毕业典礼致辞:6月16日举行
  15. MySQL中的BETWEEN...AND的用法
  16. Exporter介绍与指标数据汇总(完结)
  17. css文本行高是哪个属性_css属性行高line-height的用法详解
  18. 淘淘商城---8.6
  19. MarkDown语法详解(Typora编辑器)
  20. 国信证券开源自研的微服务开发框架 Zebra

热门文章

  1. c语言中常量有何作用,正确的C语言常量是什么?
  2. 红绿蓝三色阈值,比赛
  3. 小程序+动易SF制作随手拍实例全景式操作(1)
  4. 怎样记账才能清楚、简单
  5. Linux环境下安装MySQL(源码安装)
  6. PCB设计之阻抗不连续性,如何解决?
  7. 3dsmax UVW展开,然后在 BodyPaint 3D 中进行绘制
  8. 历史上的今天——4月1日
  9. 2023年1月综合预订类APP用户洞察——旅游市场复苏明显,三年需求春节集中释放
  10. 网站引用字体兼容IE