ข้ามไปที่เนื้อหาหลัก

เรื่องที่แนะนำ

คู่มือ Java ฉบับทันสมัย (อัปเดตล่าสุดปี 2025)

 คู่มือ Java ฉบับทันสมัย (อัปเดตล่าสุดปี 2025) บทนำ Java ยังคงเป็นภาษายอดนิยมที่ได้รับความนิยมอย่างต่อเนื่องตั้งแต่ยุค 1990 จนถึงปัจจุบัน ในปี 2025 Java ได้ก้าวหน้าอย่างมากทั้งด้านภาษาหลักและเครื่องมือสนับสนุน ล่าสุด Java 24 ได้เปิดตัวออกมาแล้ว และ Java 21 เป็นเวอร์ชัน LTS (Long-Term Support) ที่แนะนำให้ใช้งานสำหรับระบบจริงในระยะยาว บทความนี้จะช่วยให้คุณเข้าใจภาพรวมของ Java เวอร์ชันล่าสุด รวมถึงฟีเจอร์เด่น โครงสร้างภาษาที่ควรรู้ และแนวทางการพัฒนา Java ยุคใหม่ ภาพรวมเวอร์ชัน Java ล่าสุด เวอร์ชัน สถานะ วันเปิดตัว Java 24 เวอร์ชันล่าสุด มีนาคม 2025 Java 21 เวอร์ชัน LTS ล่าสุด กันยายน 2023 Java 17 LTS รุ่นก่อนหน้า กันยายน 2021 Java 11 LTS เก่า กันยายน 2018 โครงสร้างพื้นฐานของภาษา Java คลาสและอ็อบเจกต์ : โครงสร้างหลักของโปรแกรม Java Primitive Types : int, double, char, boolean เป็นต้น Control Statements : if, switch, while, for, do-while Methods : การแยกโค้ดเป็นหน่วยที่นำกลับมาใช้ซ้ำได้ Array และ Collection : จัดเก็บและจัดการข้อมูลหลายรายการ Exception Handling : try-catch-finally OOP Co...

สอนสร้าง Text base มวยไทย Simulator ด้วย Spring Boot

 การสร้างเกมแบบ text-based "ค่ายมวยไทย Simulator" ด้วย Spring Boot สามารถใช้เทคนิคการทำงานแบบ scheduled tasks เพื่อแสดงการต่อสู้ทีละวินาทีและตัดสินผลแพ้ชนะได้ โดยใช้ Spring Scheduling (@Scheduled) และโครงสร้าง REST API สำหรับการโต้ตอบหรือแสดงผลเกม

ขั้นตอนในการออกแบบ

  1. สร้างโครงสร้าง Spring Boot Project

    • ใช้ Spring Initializer เพิ่ม dependencies:
      • Spring Web
      • Spring Boot DevTools
      • Spring Scheduler
  2. ออกแบบคลาสพื้นฐาน

    • Fighter: คลาสสำหรับนักมวยไทย (ชื่อ, พลังโจมตี, พลังป้องกัน, พลังชีวิต)
    • FightEngine: คลาสสำหรับจำลองการต่อสู้ระหว่างนักมวย
    • SchedulerService: ใช้จัดการการต่อสู้ทีละวินาทีด้วย @Scheduled
    • Controller: สำหรับรับคำสั่งเริ่มเกมและดูผลลัพธ์
  3. ตัวอย่างโค้ด นี่คือโครงสร้างตัวอย่าง:

    // Fighter.java
    public class Fighter {
        private String name;
        private int attackPower;
        private int defensePower;
        private int health;
    
        // ปัจจัยที่ส่งผล
        private int trainingLevel;         // 1 - 100
        private int dietQuality;           // 1 - 100
        private int ritualEffectiveness;   // 1 - 100
    
        public Fighter(String name, int attackPower, int defensePower, int health, int trainingLevel, int dietQuality, int ritualEffectiveness) {
            this.name = name;
            this.attackPower = attackPower;
            this.defensePower = defensePower;
            this.health = health;
            this.trainingLevel = trainingLevel;
            this.dietQuality = dietQuality;
            this.ritualEffectiveness = ritualEffectiveness;
        }
    
        public int calculateEffectiveAttack() {
            return attackPower + (trainingLevel / 10) + (dietQuality / 20);
        }
    
        public int calculateEffectiveDefense() {
            return defensePower + (trainingLevel / 15) + (ritualEffectiveness / 25);
        }
    
        public void takeDamage(int damage) {
            this.health -= damage;
            if (this.health < 0) this.health = 0;
        }
    
        public boolean isAlive() {
            return this.health > 0;
        }
    
        public String getName() {
            return name;
        }
    
        public int getHealth() {
            return health;
        }
    }
    
    // FightEngine.java
    import java.util.Random;
    
    public class FightEngine {
        private Fighter fighter1;
        private Fighter fighter2;
        private Random random = new Random();
    
        public FightEngine(Fighter fighter1, Fighter fighter2) {
            this.fighter1 = fighter1;
            this.fighter2 = fighter2;
        }
    
        public String simulateRound() {
            // Fighter 1 attacks Fighter 2
            int damage1 = Math.max(0, fighter1.calculateEffectiveAttack() - fighter2.calculateEffectiveDefense() + random.nextInt(5));
            fighter2.takeDamage(damage1);
    
            // Fighter 2 attacks Fighter 1
            int damage2 = Math.max(0, fighter2.calculateEffectiveAttack() - fighter1.calculateEffectiveDefense() + random.nextInt(5));
            fighter1.takeDamage(damage2);
    
            return String.format(
                    "%s attacks %s for %d damage! %s attacks %s for %d damage! Remaining health - %s: %d, %s: %d",
                    fighter1.getName(), fighter2.getName(), damage1,
                    fighter2.getName(), fighter1.getName(), damage2,
                    fighter1.getName(), fighter1.getHealth(),
                    fighter2.getName(), fighter2.getHealth()
            );
        }
    
        public boolean isFightOver() {
            return !fighter1.isAlive() || !fighter2.isAlive();
        }
    
        public String getWinner() {
            if (!fighter1.isAlive()) return fighter2.getName();
            if (!fighter2.isAlive()) return fighter1.getName();
            return "No winner yet!";
        }
    }
    
    // SchedulerService.java
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    
    @Service
    public class SchedulerService {
        private FightEngine fightEngine;
    
        public SchedulerService() {
            Fighter fighter1 = new Fighter("Muay A", 15, 10, 100, 80, 90, 85); // Training, Diet, Ritual
            Fighter fighter2 = new Fighter("Muay B", 14, 12, 100, 75, 88, 80);
            this.fightEngine = new FightEngine(fighter1, fighter2);
        }
    
        @Scheduled(fixedRate = 1000)
        public void simulateFight() {
            if (fightEngine.isFightOver()) {
                System.out.println("Fight is over! Winner: " + fightEngine.getWinner());
            } else {
                String roundResult = fightEngine.simulateRound();
                System.out.println(roundResult);
            }
        }
    }
    
    // MuayThaiSimulatorApplication.java
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MuayThaiSimulatorApplication {
        public static void main(String[] args) {
            SpringApplication.run(MuayThaiSimulatorApplication.class, args);
        }
    }

ความคิดเห็น

บทความที่ได้รับความนิยม