เรื่องที่แนะนำ
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
สอนสร้างเกมส์แนว FarmVille ด้วย Spring Boot
การออกแบบเกมแนว Farmville อย่างง่ายด้วย Spring Boot
เกมแนว Farmville มีความนิยมอย่างแพร่หลายเนื่องจากกลไกที่เรียบง่ายแต่ดึงดูดใจผู้เล่น เช่น การหว่านเมล็ด การเติบโตของพืชผล และการเก็บเกี่ยวเพื่อทำกำไร ในบทความนี้ เราจะสำรวจวิธีการสร้างเกมแนว Farmville อย่างง่ายโดยใช้ Spring Boot ซึ่งเป็น Framework สำหรับการพัฒนา Backend ที่มีความยืดหยุ่นและทรงพลัง
1. โครงสร้างโปรเจกต์
เริ่มต้นด้วยการสร้างโครงสร้างโปรเจกต์พื้นฐาน:
- Spring Boot Application: ใช้ Spring Initializr เพื่อสร้างโปรเจกต์
- Dependencies ที่จำเป็น:
- Spring Web (สำหรับ REST APIs)
- Spring Data JPA (สำหรับการจัดการฐานข้อมูล)
- H2 Database (ฐานข้อมูลในหน่วยความจำสำหรับการทดสอบ)
2. การจัดการเวลา
ในเกมแนวนี้ ระบบเวลามีบทบาทสำคัญ เช่น การกำหนดเวลาให้พืชเติบโตหรือการรอคอยสำหรับการเก็บเกี่ยว เราสามารถใช้ ScheduledExecutorService
ของ Java หรือ @Scheduled
ของ Spring Boot เพื่อจัดการงานตามเวลาที่กำหนด
@Component
public class TimeManager {
@Autowired
private CropService cropService;
@Scheduled(fixedRate = 60000) // เรียกทุก 1 นาที
public void updateCropStatus() {
cropService.updateGrowthStatus();
}
}
ใน CropService
จะมีเมธอด updateGrowthStatus()
ที่ตรวจสอบและปรับปรุงสถานะของพืช:
@Service
public class CropService {
@Autowired
private CropRepository cropRepository;
public void updateGrowthStatus() {
List crops = cropRepository.findAll();
for (Crop crop : crops) {
if (!crop.isHarvested() && crop.getPlantedAt().plusMinutes(crop.getGrowthTimeInMinutes()).isBefore(LocalDateTime.now())) {
crop.setReadyToHarvest(true);
cropRepository.save(crop);
}
}
}
}
3. การออกแบบ Entity
สร้าง Entity ที่เกี่ยวข้อง เช่น Farm, Crop, และ Player
@Entity
public class Crop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private LocalDateTime plantedAt;
private int growthTimeInMinutes; // ระยะเวลาที่ใช้ในการเติบโต
private boolean isHarvested;
// Getters และ Setters
}
4. ระบบหว่านเมล็ด
เมื่อผู้เล่นหว่านเมล็ด ระบบจะบันทึกข้อมูล เช่น เวลาเริ่มต้นการปลูก (plantedAt
) และระยะเวลาที่พืชต้องเติบโต (growthTimeInMinutes
)
@RestController
@RequestMapping("/api/farm")
public class FarmController {
@Autowired
private CropRepository cropRepository;
@PostMapping("/plant")
public ResponseEntity<String> plantCrop(@RequestBody Crop crop) {
crop.setPlantedAt(LocalDateTime.now());
crop.setHarvested(false);
cropRepository.save(crop);
return ResponseEntity.ok("Planted " + crop.getName() + " successfully!");
}
}
5. การเติบโตและการเก็บเกี่ยว
ตรวจสอบว่าพืชพร้อมสำหรับการเก็บเกี่ยวโดยคำนวณจากเวลาเริ่มต้นการปลูกและระยะเวลาที่กำหนด
@Service
public class CropService {
@Autowired
private CropRepository cropRepository;
public List<Crop> getReadyToHarvest() {
return cropRepository.findAll().stream()
.filter(crop -> !crop.isHarvested() &&
crop.getPlantedAt().plusMinutes(crop.getGrowthTimeInMinutes()).isBefore(LocalDateTime.now()))
.collect(Collectors.toList());
}
public String harvestCrop(Long cropId) {
Crop crop = cropRepository.findById(cropId)
.orElseThrow(() -> new RuntimeException("Crop not found"));
if (!crop.isHarvested() && crop.getPlantedAt().plusMinutes(crop.getGrowthTimeInMinutes()).isBefore(LocalDateTime.now())) {
crop.setHarvested(true);
cropRepository.save(crop);
return "Successfully harvested " + crop.getName();
}
return "Crop is not ready for harvesting!";
}
}
6. ระบบการขาย
เมื่อเก็บเกี่ยวพืช ผู้เล่นสามารถขายผลผลิตเพื่อรับเงินหรือทรัพยากรเพิ่มเติม
@RestController
@RequestMapping("/api/farm")
public class MarketController {
@Autowired
private CropRepository cropRepository;
@PostMapping("/sell")
public ResponseEntity<String> sellCrop(@RequestParam Long cropId) {
Crop crop = cropRepository.findById(cropId)
.orElseThrow(() -> new RuntimeException("Crop not found"));
if (crop.isHarvested()) {
cropRepository.delete(crop); // ขายแล้วลบออกจากฐานข้อมูล
return ResponseEntity.ok("Sold " + crop.getName() + " successfully!");
}
return ResponseEntity.badRequest().body("Crop is not ready for sale!");
}
}
สรุป
การออกแบบเกมแนว Farmville ด้วย Spring Boot นั้นสามารถเริ่มต้นได้ง่ายด้วยโครงสร้างพื้นฐานที่ชัดเจน เช่น การจัดการเวลา การออกแบบ Entity และ API สำหรับการหว่านเมล็ด เก็บเกี่ยว และขาย การเพิ่มฟีเจอร์เพิ่มเติม เช่น ระบบเงินหรือการปรับแต่งฟาร์ม จะช่วยเพิ่มความสนุกให้กับเกมของคุณ!
บทความที่ได้รับความนิยม
สอนสร้างเกมส์บริหารเหตุการณ์ต่างๆในร้านนวด
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
การใช้งาน RPC (Remote Procedure Call) ด้วย Java พร้อมตัวอย่างเกมออนไลน์ (ต่อ)
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
ความคิดเห็น
แสดงความคิดเห็น