文章目录
- 前言
- 1 项目介绍
- 1.1 注册页面
- 1.2 登录界面
- 1.3 游戏主界面
- 1.3.1 功能模块
- 1.3.2 查看最终效果和作弊码
- 2.项目实现
- 2.1 验证码
- 2.2 作弊码
- 3 项目代码
前言
“千官望长安,万国拜含元” — 崔立之《南至隔仗望含元殿香炉》
1 项目介绍
项目包括三个部分
- 注册界面
- 登录界面
- 游戏界面
1.1 注册页面
1. 注册规则
- 用户名,密码不能为空
- 判断两次密码输入是否一致
- 判断用户名和密码的格式是否正确
- 判断用户名是否存在
2. 用户名和密码规则
- 用户名:4-16位,只能大写字母,小写字母,数字
- 密码:至少包含1个小写字母,1个数字,长度至少6位
1.2 登录界面
1. 登录规则
- 判断用户名是否为空
- 判断密码是否为空
- 判断验证码是否为空
2. 默认登录用户名和密码
- 用户名:admin
- 密码:123456
1.3 游戏主界面
1.3.1 功能模块
功能模块主要包括:更换图片,重新游戏,重新登陆,关闭游戏,存档,读档,关于我们
- 更换图片:图片有美女,动物,运动三种
- 重新游戏:点击之后回到游戏初始状态
- 重新登陆:点击后回退到登陆界面
- 关闭游戏:点击之后关闭游戏并停止代码运行
- 存档和读档:执行读档和存档操作
- 关于我们:显示博主微信二维码,愿同诸君一道,共同学习,共同进步
1.3.2 查看最终效果和作弊码
- 查看最终效果:快捷键A
- 作弊码:快捷键W
2.项目实现
由于拼图小游戏涉及知识比较多,本文仅提供验证码、作弊码功能。
2.1 验证码
1. 验证码规则
- 长度为5
- 由4位大写或者小写字母和1位数字组成,同一个字母可重复
- 数字可以出现在任意位置
- 比如:aQa1K
2. 代码演示
package com.itheima.util;import java.util.ArrayList;
import java.util.Random;/*** 生成验证码*/
public class CodeUtil {public static String getCode() {// 1.创建一个集合ArrayList<Character> list = new ArrayList<>();// 2.添加字母 a - z A - Zfor (int i = 0; i < 26; i++) {list.add((char) ('a' + i));list.add((char) ('A' + i));}// 3.生成4个随机字母String result = "";Random r = new Random();for (int i = 0; i < 4; i++) {int randomIndex = r.nextInt(list.size());char c = list.get(randomIndex);result = result + c;}// 4.在后面拼接数字 0~9int number = r.nextInt(10);result = result + number;// 5.把字符串变成字符数组char[] chars = result.toCharArray();//[A,B,C,D,5]// 6.在字符数组中生成一个随机索引int index = r.nextInt(chars.length);// 7.拿着4索引上的数字,跟随机索引上的数字进行交换char temp = chars[4];chars[4] = chars[index];chars[index] = temp;// 8.把字符数组再变回字符串String code = new String(chars);return code;}
}
2.2 作弊码
1. 作弊码的作用
按下作弊码后松开,即可一键通关
2. 实现步骤
- 给整个界面添加键盘事件
- 在GameJFrame类中的keyReleased()方法中书写松开的逻辑,当按下W的时候一键通关。
3. 代码演示
@Override
public void keyReleased(KeyEvent e) {// 1.判断游戏是否胜利,如果胜利,此方法需要直接结束,不能再执行下面的移动代码了if (victory()) {return;}// 2.对上,下,左,右进行判断(左:37 上:38 右:39 下:40)int code = e.getKeyCode();System.out.println(code);if (code == 37) {System.out.println("向左移动");if (y == 3) {return;}// 把空白方块右方的数字往左移动data[x][y] = data[x][y + 1];data[x][y + 1] = 0;y++;// 每移动一次,计数器就自增一次。step++;// 调用方法按照最新的数字加载图片initImage();} else if (code == 38) {System.out.println("向上移动");if (x == 3) {// 表示空白方块已经在最下方了,他的下面没有图片再能移动了return;}//逻辑:把空白方块下方的数字往上移动// x,y 表示空白方块// x + 1, y 表示空白方块下方的数字// 把空白方块下方的数字赋值给空白方块data[x][y] = data[x + 1][y];data[x + 1][y] = 0;x++;// 每移动一次,计数器就自增一次。step++;//调用方法按照最新的数字加载图片initImage();} else if (code == 39) {System.out.println("向右移动");if (y == 0) {return;}//逻辑:把空白方块左方的数字往右移动data[x][y] = data[x][y - 1];data[x][y - 1] = 0;y--;// 每移动一次,计数器就自增一次。step++;// 调用方法按照最新的数字加载图片initImage();} else if (code == 40) {System.out.println("向下移动");if (x == 0) {return;}// 逻辑:把空白方块上方的数字往下移动data[x][y] = data[x - 1][y];data[x - 1][y] = 0;x--;// 每移动一次,计数器就自增一次。step++;// 调用方法按照最新的数字加载图片initImage();} else if (code == 65) {initImage();} else if (code == 87) {data = new int[][]{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};initImage();}
}
3 项目代码
由于代码量比较大,所以放于gitee代码仓库,代码地址如下:
https://gitee.com/poetize/puzzlegame