package org.project; import org.project.entity.players.Knight; import org.project.entity.enemies.Enemy; import org.project.entity.enemies.Skeleton; import org.project.location.Location; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Random random = new Random(); System.out.println("================================================"); System.out.println("⚔️ به بازی شوالیه جاوا (Java Knight) خوش آمدید! ⚔️"); System.out.println("================================================"); System.out.print("نام شوالیه خود را وارد کنید: "); String knightName = scanner.nextLine(); // ساخت شوالیه (به همراه شمشیر و زره پیش‌فرض که قبلاً ست کردیم) Knight knight = new Knight(knightName); // ساخت لوکیشن‌ها بر اساس ساختار جدید Location startLocation = new Location("کمپ پادشاهی (نقطه شروع)"); Location road = new Location("جاده تاریک مخروبه"); Location castle = new Location("قلعه اژدهای جادوگر (مرحله نهایی)"); // اتصال لوکیشن‌ها به یکدیگر startLocation.addConnectedLocation(road); road.addConnectedLocation(startLocation); road.addConnectedLocation(castle); castle.addConnectedLocation(road); // موقعیت فعلی بازیکن Location currentLocation = startLocation; // مدیریت کلیدها طبق داک (برای بخش غیر بونوس، کلید اسکلت شرط ورود به قلعه است) boolean hasSkeletonKey = false; System.out.println("\n📜 داستان: اژدها قلمرو جاوای پاک را تسخیر کرده است."); System.out.println("شما باید در جاده با اسکلت‌ها بجنگید، 'کلید اسکلت' را بگیرید و اژدها را در قلعه نابود کنید!"); boolean gameRunning = true; while (gameRunning && knight.isAlive()) { System.out.println("\n------------------------------------------------"); System.out.println("📍 مکان فعلی: " + currentLocation.getName()); System.out.println("❤️ خون: " + knight.getHp() + "/" + knight.getMaxHP() + " | 🪄 مانا: " + knight.getMp() + "/" + knight.getMaxMP() + " | 🎖️ لول: " + knight.getLevel()); System.out.println("🔑 کلید اسکلت: " + (hasSkeletonKey ? "✅ موجود" : "❌ ناموجود")); System.out.println("------------------------------------------------"); // ۱. مکانیزم تصادفی اسپان شدن دشمن در جاده if (currentLocation == road && random.nextInt(100) < 60) { // شانس ۶۰ درصدی دیدن اسکلت Skeleton skeleton = new Skeleton(); currentLocation.addEnemy(skeleton); System.out.println("\n⚠️ ناگهان یک اسکلت از زمین بیرون آمد و راه شما را بست!"); // لوپ مبارزه نوبتی while (skeleton.isAlive() && knight.isAlive()) { System.out.println("\n--- [وضعیت دشمن -> HP: " + skeleton.getHp() + "/" + skeleton.getMaxHP() + "]"); System.out.println("نوبت شماست! حرکت خود را انتخاب کنید (قانون ۵ حرکت):"); System.out.println("1. حمله معمولی (Light Attack) -> دمیج اسلحه | مانا: 0"); System.out.println("2. حمله سنگین (Heavy Attack) -> دمیج 1.5 برابر | مانا: 15"); System.out.println("3. گارد دفاعی (Defend) -> کاهش دمیج بعدی | مانا: 10"); System.out.println("4. جادوی درمان (Heal Magic) -> بازیابی 30 واحد HP | مانا: 20"); System.out.println("5. ضربه با سپر (Shield Bash) -> دمیج 20 + گیج کردن دشمن | مانا: 30"); System.out.print("👉 انتخاب شما: "); String move = scanner.nextLine(); // اجرای حرکت انتخاب شده بازیکن switch (move) { case "1": knight.attack(skeleton); System.out.println("⚔️ شما با شمشیر یک ضربه معمولی زدید."); break; case "2": knight.heavyAttack(skeleton); break; case "3": knight.defend(); break; case "4": knight.castHeal(); break; case "5": knight.shieldBash(skeleton); break; default: System.out.println("❌ حرکت نامعتبر! نوبت شما هدر رفت."); break; } // نوبت دشمن (اگر اسکلت هنوز زنده باشد و Stun نشده باشد) if (skeleton.isAlive()) { if (knight.isEnemyStunnedNextTurn()) { System.out.println("🌀 اسکلت به خاطر ضربه سپر شما گیج (Stun) شده و این نوبت نمی‌تواند حرکت کند!"); knight.setEnemyStunnedNextTurn(false); // ریست کردن پرچم استن برای نوبت بعد } else { System.out.println("\n--- نوبت دشمن ---"); skeleton.attack(knight); } } } // بررسی نتایج پس از پایان نبرد if (!knight.isAlive()) { System.out.println("\n💀 شوالیه قهرمان سقوط کرد... بازی تمام شد!"); break; } else { System.out.println("\n🎉 شما اسکلت را با موفقیت شکست دادید!"); currentLocation.getEnemies().clear(); // پاکسازی لوکیشن // پاداش ۱: کسب امتیاز تجربه و سیستم لول‌آپ خودکار knight.gainXp(60); // دادن ۶۰ واحد اکسپی // پاداش ۲: بازیابی وضعیت (Replenish) بعد از جنگ طبق داک knight.replenishAfterCombat(); // پاداش ۳: شانس دراپ شدن کلید (RNG Gatekeeping) if (!hasSkeletonKey) { if (random.nextInt(100) < 50) { // شانس ۵۰ درصد برای دراپ کلید پس از مرگ اسکلت hasSkeletonKey = true; System.out.println("🔑 واو! اسکلت هنگام نابودی یک کلید درخشان انداخت. 'کلید اسکلت' دریافت شد!"); } else { System.out.println("🔍 بدن اسکلت را جستجو کردید اما کلیدی پیدا نشد. باید با اسکلت‌های بیشتری در جاده بجنگید!"); } } } } // ۲. منوی حرکت و جابجایی بین جاده‌ها System.out.println("\nنقشه مسیرها: کارهای قابل انجام چیست؟"); ArrayList choices = currentLocation.getLocations(); int i; for (i = 0; i < choices.size(); i++) { System.out.println((i + 1) + ". سفر به: " + choices.get(i).getName()); } System.out.println((i + 1) + ". استراحت و چک کردن وضعیت کامل"); System.out.println((i + 2) + ". خروج از بازی"); System.out.print("👉 انتخاب شما: "); String navigationChoice = scanner.nextLine(); try { int navInt = Integer.parseInt(navigationChoice); if (navInt > 0 && navInt <= choices.size()) { Location nextLocation = choices.get(navInt - 1); // شرط ورود به قلعه (RNG Gatekeeping): قفل بودن اگر کلید نداریم if (nextLocation == castle && !hasSkeletonKey) { System.out.println("🔒 درب قلعه اژدها به شدت قفل است! شما به 'کلید اسکلت' نیاز دارید. به جاده برگردید."); } else { currentLocation = nextLocation; } } else if (navInt == choices.size() + 1) { System.out.println("\n🛡️ شما کمی در کمپ استراحت کردید، اما جاده‌ها همچنان ناامن هستند."); } else if (navInt == choices.size() + 2) { System.out.println("👋 به امید دیدار، شوالیه بزرگ!"); gameRunning = false; } else { System.out.println("❌ گزینه اشتباه است!"); } } catch (NumberFormatException e) { System.out.println("❌ لطفا یک عدد وارد کنید!"); } // ۳. شرط پیروزی نهایی: ورود به قلعه با داشتن کلید if (currentLocation == castle && hasSkeletonKey) { System.out.println("\n🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆"); System.out.println("شما با استفاده از کلید، وارد قلعه تاریک شدید!"); System.out.println("با شمشیر قدرتمند خود اژدها را از پای درآوردید و سرزمین Javanest را نجات دادید!"); System.out.println("تبریک شوالیه بزرگ " + knight.getName() + "، شما پیروز نهایی بازی شدید!"); System.out.println("🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆🏆"); gameRunning = false; } } scanner.close(); } }