拼图小游戏


前言

“千官望长安,万国拜含元”   — 崔立之《南至隔仗望含元殿香炉》

在这里插入图片描述

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 - Z
        for (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~9
        int 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值