JAVA项目实战-文字格斗游戏
完整代码已上传至GItee:https://gitee.com/xiaohan-and-xiaohan/fightinggame
主游戏逻辑:
public class FightingGame { //启动游戏 public void gameStart(String username) { //1.显示游戏表题 System.out.println("╔════════════════════════════════════════╗"); System.out.println("🎮 " + username + "欢迎来到文字格斗游戏 🎮"); System.out.println("╚════════════════════════════════════════╝"); //2.创建角色,并进行属性分配 HeroCharacter player = createPlayerCharacter(username); //3.显示创建角色的信息 System.out.println("角色创建成功!"); System.out.println("🌟 初始属性为:" + player.show()); System.out.println("🌟 拥有的技能为:" + player.showSkillList()); //4.创建多个敌人列表 | ArrayList<EnemyCharacter> enemyList = new ArrayList<>(); enemyList.add(new EnemyCharacter("初级战士", 80, 15, 10, "猛击")); enemyList.add(new EnemyCharacter("敏捷刺客", 60, 20, 5, "快速攻击")); enemyList.add(new EnemyCharacter("重装坦克", 120, 10, 20, "防御姿态")); enemyList.add(new EnemyCharacter("神秘法师", 70, 25, 8, "火球术")); //5.准备战斗 int count = 1;//记录回合数 int wins = 0;//记录胜利次数 //战斗至生命值为0 while (player.isAlive()) { //进入循环,开始战斗 //重置敌人属性,敌人属性每场HP+10, ATK+3, DEF+2(敌人:越来越打)(第二场的时候) if (count > 1) { for (EnemyCharacter enemy : enemyList) { enemy.setHP(enemy.getMaxHP() + 10); enemy.setAttack(enemy.getAttack() + 3); enemy.setDefense(enemy.getDefense() + 2); enemy.defending = false; } } //随机选择敌人 Random r = new Random(); EnemyCharacter enemy = enemyList.get(r.nextInt(enemyList.size())); //System.out.println(enemy.show()); System.out.println("═══════════════════════════════════════"); System.out.println("️⚔️ 第 " + count + " 场战斗开始!对手: " + enemy.getName()); int round = 1; while (player.isAlive()) { System.out.println("---------------------------------------"); System.out.println("️⚔️ 第 " + round + " 回合开始!"); //敌我双方的血条 System.out.println(showHPBar(player.getName(), player.getHP(), player.getMaxHP()) + " " + player.getHP() + "/" + player.getMaxHP() + " HP"); System.out.println(showHPBar(enemy.getName(), enemy.getHP(), enemy.getMaxHP()) + enemy.getHP() + "/" + enemy.getMaxHP() + " HP"); //我打敌人一下,如果敌人死亡,结束战斗 playerTurn(player, enemy); if (!enemy.isAlive()) { System.out.println("🎉 恭喜你打败了敌人!"); break; } //敌人打我一下,如果我死亡,结束战斗 enemyTurn(enemy, player); if (!player.isAlive()) { System.out.println("☠️ 你被敌人打败了!"); break; } round++; //System.exit(0); } //战斗结束,玩家胜利恢复血量,玩家失败结束游戏 if (player.isAlive()) { wins++; player.heal(r.nextInt(20, 41)); System.out.println("🌟 恢复血量成功!当前生命:" + player.getHP() + " HP"); System.out.println("🌟 当前胜场:" + wins); if (wins % 3 == 0) { //属性提升 player.setHP(player.getHP() + 30); player.setAttack(player.getAttack() + 5); player.setDefense(player.getDefense() + 3); System.out.println("🌟 属性提升成功!"); } System.out.println("是否继续下一场游戏? (y/n)"); Scanner sc = new Scanner(System.in); String choice = sc.next(); if ("y".equalsIgnoreCase(choice)) { count++; continue; } else { System.out.println("游戏结束!"); break; } } else { System.out.println("游戏结束!"); break; } } //6.游戏的最终结算 System.out.println("游戏结束!"); System.out.println("总胜场:"+wins); System.out.println("总胜率:"+(wins*100/count)+"%"); System.out.println("感谢试玩!"); System.exit(0); } }登录注册文件:
public class Login { //登录方法主页面 public void start() { System.out.println("欢迎来到游戏的登录注册页面!"); ArrayList<User> list = new ArrayList<>(); while (true) { System.out.println("╔════════════════════════════════╗"); System.out.println(" 🎮 欢迎来到文字格斗游戏 🎮 "); System.out.println("╚════════════════════════════════╝"); System.out.println("请选择操作:1登录 2注册 3忘记密码 4退出"); Scanner sc = new Scanner(System.in); String choose = sc.next();//字符串用next() switch (choose) { case "1": login(list); break;//防止case穿透 case "2": register(list); break; case "3": forgetPassword(list); break; case "4": exit(); break; default: System.out.println("输入错误!请重新输入!"); break; } } } //登录 public void login(ArrayList<User> list) { //在静态方法中调用,必须添加static System.out.println("用户选择了登录操作~"); //1. 键盘录入用户名 //2. 键盘录入密码 //3. 键盘录入验证码 //4. 登录最多重试三次,三次错误账号锁定 //判断用户是否存在-》是否被锁定-》输入验证码-》输入密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username = sc.next(); //判断用户是否存在 if (!contains(list, username)) { System.out.println("用户" + username + "不存在,请先进行注册"); return;//结束登录状态 } //判断用户是否被锁定 int index = findIndex(list, username); User u = list.get(index); if (!u.isStatus()) { System.out.println("用户" + username + "已被锁定,请联系工作人员"); return; } for (int i = 0; i < 3;i++) { //验证码输入并验证 while (true) { String rightcode = getCode(); System.out.println("请输入正确验证码:" + rightcode); String code = sc.next(); if (rightcode.equalsIgnoreCase(code)) { System.out.println("验证码输入正确"); break; } else { System.out.println("验证码输入错误,请重新输入"); continue; } } //密码输入并验证 System.out.println("请输入密码:"); String password = sc.next(); if (u.getPassword().equals(password)) { System.out.println("用户" + username + "登录成功!"); FightingGame fg = new FightingGame(); fg.gameStart(username); break; }else{ System.out.println("登录失败~"); if(i == 2) { u.setStatus(false); System.out.println("密码输入错误,用户" + username + "已被锁定,请联系工作人员"); return; }else{ System.out.println("密码输入错误,还剩下"+ (2-i) +"次机会"); } } } } //注册 public void register(ArrayList<User> list) { System.out.println("用户选择了注册操作~"); //创建对象 User u = new User(); //获取用户名 Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入用户名:"); String username = sc.next(); //校验用户名:用户名唯一,长度必须在3 ~ 16位,只能由字母、数字组成,不能是纯数字 if (!checklen(3, 16, username)) { System.out.println("用户名的长度不符合要求,必须在3 ~ 16位"); continue; } if (!checkUsername(username)) { System.out.println("用户名只能由字母、数字组成,不能是纯数字"); continue; } if (contains(list, username)) { System.out.println("用户名已存在!请重新输入!"); continue; } u.setUsername(username); break; } //获取密码,长度3 ~ 8位,只能是字母加数字的组合,不能有其他字母 inputPassword(u); //获取手机号 while (true) { System.out.println("请输入手机号:"); String phonenum = sc.next(); if(checkPhoneNum(phonenum)){ u.setPhonenum(phonenum); break; }else{ System.out.println("手机号格式错误!请重新输入!"); } } //将对象添加到集合中 list.add(u); System.out.println("用户" + u.getUsername() + "注册成功!"); } //输入密码 public void inputPassword(User u) { while (true) { Scanner sc = new Scanner(System.in); System.out.println("请输入密码:"); String password1 = sc.next(); if (!checklen(3, 8, password1)) { System.out.println("密码的长度不符合要求,必须在3 ~ 8位"); continue; } if (!checkPassword(password1)) { System.out.println("密码只能由字母、数字组成"); continue; } System.out.println("请再次输入密码:"); String password2 = sc.next(); if (!password1.equals(password2)) { System.out.println("两次输入的密码不一致!请重新输入!"); continue; } u.setPassword(password1); break; } } //判断手机号格式 public boolean checkPhoneNum(String str) { if(str.length() != 11 || !str.startsWith("1")){ System.out.println("手机号长度或开头出错"); return false; } for (int i = 0; i < 11; i++) { if(!Character.isDigit(str.charAt(i))){ System.out.println("手机号出现非数字,请重新输入!"); return false; } } return true; } //退出 public void exit() { //System.out.println("用户选择了退出操作~"); System.exit(0);//虚拟机停止 } //忘记密码 public void forgetPassword(ArrayList<User> list) { System.out.println("用户选择了忘记密码操作~"); //1. 键盘录入用户名 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username = sc.next(); //2. 判断用户是否存在 if (!contains(list, username)) { System.out.println("用户" + username + "不存在,请先进行注册"); return;//结束登录状态 } //3. 输入手机号并验证 while (true) { System.out.println("请输入手机号:"); String phonenum = sc.next(); User u = list.get(findIndex(list, username)); if (!u.getPhonenum().equals(phonenum)) { System.out.println("手机号输入错误,请重新输入"); continue; } else{ System.out.println("手机号输入正确"); inputPassword(u); break; } } }