当前位置: 首页 > news >正文

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; } } }
http://www.jsqmd.com/news/1311613/

相关文章:

  • 2026 年新发布:丽水比较好的水下施工施工公司联系电话,水下施工不用潜水?老工人私藏的省钱技巧我不允许你不知道!-鸿腾水下打捞 - 实业推荐官【官方】
  • 新手也能上手!2026年实力出众的专业降AIGC平台
  • Elasticsearch深度分页性能优化:从原理到四种实战解决方案
  • 从音频驱动视频到图表理解:拆解跨模态AI精准对齐的核心技术
  • OpenCV鱼眼相机标定实战:从成像原理到C++代码实现
  • 常年处理长途搬家维权,盘点四类高频骗局,普通人跨省搬家照着规则选就不会上当
  • Java面向对象编程实战:封装、继承、多态核心概念与项目应用
  • 8大网盘直链下载助手:免费高速下载的终极解决方案
  • 2026成都CAAC无人机执照报考条件:年龄、学历、身体要求与报名材料
  • CP2102 USB转串口芯片:从协议转换到硬件设计的嵌入式开发指南
  • Altium Designer高效设计:从基础操作到实战技巧的进阶指南
  • 上海黄浦区卫生间漏水怎么处理_2026上海核心城区漏水维修流程教程与收费标准 - 雨婺虹房屋维修
  • Unity热更新终极方案:基于HybridCLR与TEngine的原生C#热更实践指南
  • 网盘直链下载助手:九大网盘自由下载,浏览器一键获取真实链接
  • npm常用命令
  • QT 语言家,翻译+合并多个项目
  • 纸尿裤生产线机器稳定运行的关键因素
  • 从零部署EMQX MQTT服务器:安全配置、性能调优与MQTTBox实战测试
  • 2026 年至今,台州评价高的卧式加热搅拌机销售厂家选哪家,做酱料总溢锅?换这台能恒温控料的设备试试,效率翻三倍还省料。 - 行业推荐官【官方】
  • SD面部修复节点私有化部署陷阱清单(仅限内网环境流通):NVIDIA A10/A100显存泄漏隐蔽路径与3种规避方案
  • Node.js 核心知识体系
  • RabbitMQ消息队列:发送者的可靠性
  • 2026年毕业生黑科技榜单9款一键生成论文工具横评!
  • 动画角色塑造技术:权杖象征与悲剧反派的情感构建
  • AI大模型API接入实战:从Fable 5现象看Token管理与错误排查
  • Power Automate办公自动化:变量与Excel连接器实战指南
  • 供应商寄售模式全解析:从业务逻辑到ERP系统实现与风险管控
  • 成都钢筋混凝土路沿石哪家更耐用?2026年本地水泥制品厂家综合评估 - 优质品牌商家
  • ADB有线与无线安装APK全解析:从环境配置到实战排错
  • Eclipse Temurin:企业级 Java JDK 发行版的最佳实践