สอนสร้างเกม RPG ด้วย Spring Boot: การออกแบบระบบอาชีพ ไอเท็ม ศัตรู แผนที่ และระบบอื่นๆ
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
การสร้างเกม RPG ด้วย Spring Boot: การออกแบบระบบอาชีพ ไอเท็ม ศัตรู แผนที่ และระบบอื่นๆ
เกม RPG (Role-Playing Game) เป็นประเภทของเกมที่ได้รับความนิยมเพราะมีความยืดหยุ่นในการออกแบบระบบและเนื้อหา ในบทความนี้ เราจะมาดูวิธีการสร้างเกม RPG แบบง่าย ๆ ด้วย Spring Boot โดยมีฟีเจอร์สำคัญ เช่น ระบบอาชีพ ไอเท็ม ศัตรู แผนที่ รวมถึงระบบจัดการเวลา (schedule) และการสุ่มเจอศัตรู
1. การเตรียมโปรเจค
การสร้างโปรเจค Spring Boot
- ใช้ Spring Initializr เพื่อสร้างโปรเจค
- เลือก dependencies ที่จำเป็น เช่น:
- Spring Web (สำหรับ REST API)
- Spring Data JPA (สำหรับจัดการฐานข้อมูล)
- H2 Database (ฐานข้อมูลในตัว)
โครงสร้างโปรเจค
src/main/java
├── com.example.rpg
├── controller
├── model
├── repository
├── service
2. ระบบอาชีพ (Class System)
สร้างระบบอาชีพที่ผู้เล่นสามารถเลือก เช่น นักรบ (Warrior) นักเวทย์ (Mage) และนักธนู (Archer)
Model
@Entity
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String playerClass; // เช่น "Warrior", "Mage", "Archer"
private int health;
private int attackPower;
private int defense;
// Getters and Setters
}
Service
@Service
public class PlayerService {
public Player createPlayer(String name, String playerClass) {
Player player = new Player();
player.setName(name);
player.setPlayerClass(playerClass);
switch (playerClass.toLowerCase()) {
case "warrior":
player.setHealth(150);
player.setAttackPower(50);
player.setDefense(30);
break;
case "mage":
player.setHealth(100);
player.setAttackPower(80);
player.setDefense(10);
break;
case "archer":
player.setHealth(120);
player.setAttackPower(60);
player.setDefense(20);
break;
default:
throw new IllegalArgumentException("Invalid class");
}
return player;
}
}
3. ระบบไอเท็ม (Item System)
สร้างไอเท็มที่สามารถเพิ่มพลังโจมตีหรือป้องกันของผู้เล่น
Model
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String type; // เช่น "weapon", "armor"
private int effectValue; // เพิ่มพลังโจมตีหรือป้องกัน
// Getters and Setters
}
Service
@Service
public class ItemService {
public Item createItem(String name, String type, int effectValue) {
Item item = new Item();
item.setName(name);
item.setType(type);
item.setEffectValue(effectValue);
return item;
}
public Player equipItem(Player player, Item item) {
if ("weapon".equals(item.getType())) {
player.setAttackPower(player.getAttackPower() + item.getEffectValue());
} else if ("armor".equals(item.getType())) {
player.setDefense(player.getDefense() + item.getEffectValue());
}
return player;
}
}
4. ระบบศัตรู (Enemy System)
Model
@Entity
public class Enemy {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int health;
private int attackPower;
// Getters and Setters
}
Service
@Service
public class EnemyService {
public Enemy spawnEnemy() {
Enemy enemy = new Enemy();
enemy.setName("Goblin");
enemy.setHealth(50);
enemy.setAttackPower(20);
return enemy;
}
}
5. ระบบแผนที่ (Map System)
สร้างระบบแผนที่ที่ผู้เล่นสามารถเดินทางและสุ่มเจอศัตรู
Model
public class Map {
private int width;
private int height;
public Map(int width, int height) {
this.width = width;
this.height = height;
}
}
Service
@Service
public class MapService {
private Random random = new Random();
public boolean encounterEnemy() {
return random.nextInt(100) < 30; // โอกาส 30% ที่จะเจอศัตรู
}
}
6. ระบบจัดการเวลาและ Objective
Schedule Task
@Component
public class GameScheduler {
@Scheduled(fixedRate = 5000) // ทุก 5 วินาที
public void progressGame() {
System.out.println("Time is progressing in the game...");
}
}
Objective System
public class Objective {
private String description;
private boolean isCompleted;
public Objective(String description) {
this.description = description;
this.isCompleted = false;
}
public void completeObjective() {
this.isCompleted = true;
}
}
7. ระบบร้านค้า (Shop System)
Model
@Entity
public class Shop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private List<Item> items;
// Getters and Setters
}
Service
@Service
public class ShopService {
public Shop createShop(String name, List<Item> items) {
Shop shop = new Shop();
shop.setName(name);
shop.setItems(items);
return shop;
}
public void buyItem(Player player, Item item) {
// Logic การซื้อ เช่น ลดเงินจาก Player และเพิ่มไอเท็มใน inventory
System.out.println(player.getName() + " bought " + item.getName());
}
}
8. ระบบต่อสู้ (Battle System)
Service
@Service
public class BattleService {
public String battle(Player player, Enemy enemy) {
while (player.getHealth() > 0 && enemy.getHealth() > 0) {
enemy.setHealth(enemy.getHealth() - player.getAttackPower());
if (enemy.getHealth() <= 0) return player.getName() + " wins!";
player.setHealth(player.getHealth() - enemy.getAttackPower());
if (player.getHealth() <= 0) return enemy.getName() + " wins!";
}
return "Draw!";
}
}
9. ระบบหัวหน้า (Boss System)
Model
@Entity
public class Boss extends Enemy {
private String specialAttack;
// Getters and Setters
}
Service
@Service
public class BossService {
public Boss createBoss(String name, int health, int attackPower, String specialAttack) {
Boss boss = new Boss();
boss.setName(name);
boss.setHealth(health);
boss.setAttackPower(attackPower);
boss.setSpecialAttack(specialAttack);
return boss;
}
public String specialAttack(Player player, Boss boss) {
player.setHealth(player.getHealth() - boss.getAttackPower() * 2); // พลังโจมตีพิเศษ
return boss.getName() + " used " + boss.getSpecialAttack() + "!";
}
}
10. ระบบควบคุมเกม (Game Controller) และ WebSocket
Controller
@RestController
@RequestMapping("/game")
public class GameController {
@Autowired
private PlayerService playerService;
@Autowired
private ShopService shopService;
@Autowired
private MapService mapService;
@Autowired
private BattleService battleService;
@Autowired
private EnemyService enemyService;
@PostMapping("/move")
public String movePlayer(@RequestParam int x, @RequestParam int y) {
if (mapService.encounterEnemy()) {
Enemy enemy = enemyService.spawnEnemy();
return "Encountered an enemy: " + enemy.getName();
}
return "Player moved to position (" + x + ", " + y + ")";
}
@PostMapping("/shop")
public String visitShop(@RequestParam Long playerId, @RequestParam Long itemId) {
// Logic for visiting shop and buying items
return "Visited the shop and bought item.";
}
@PostMapping("/battle")
public String startBattle(@RequestParam Long playerId) {
Player player = playerService.findPlayerById(playerId);
Enemy enemy = enemyService.spawnEnemy();
return battleService.battle(player, enemy);
}
}
WebSocket Configuration
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/game-websocket").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
สรุป
การสร้างเกม RPG ด้วย Spring Boot เป็นโครงการที่ท้าทายและสนุกสนาน โดยการวางแผนระบบต่าง ๆ เช่น อาชีพ ไอเท็ม ศัตรู ร้านค้า ระบบต่อสู้ และหัวหน้า รวมถึงการจัดการเวลาและ Objective เป็นสิ่งที่ช่วยเพิ่มความลึกให้กับเกม การเพิ่ม WebSocket เพื่อโต้ตอบแบบเรียลไทม์ยังช่วยเพิ่มประสบการณ์การเล่นอีกด้วย!
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
ความคิดเห็น
แสดงความคิดเห็น