Làm thế nào để thực hiện công cụ trò chơi theo lượt?


17

Hãy tưởng tượng trò chơi như Heroes of Might and Magic, hoặc Master of Orion, hoặc trò chơi theo lượt của bạn. Logic trò chơi đằng sau việc thực hiện lượt tiếp theo là gì? Có bất kỳ tài liệu hoặc sách để đọc về chủ đề này? Để cụ thể, hãy tưởng tượng vòng lặp trò chơi:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Tất cả những người đang được gọi nói 60 lần một giây. Nhưng làm thế nào theo lượt vào đây? Tôi có thể tưởng tượng rằng trong gameLogic () có một chức năng như endTurn () xảy ra khi người chơi nhấp vào nút đó, nhưng làm cách nào để xử lý tất cả? Cần hiểu biết sâu sắc.

Câu trả lời:


21

Một trò chơi theo lượt sẽ được điều khiển bởi một bộ máy nhà nước . Về cơ bản, bạn sẽ đưa ra một loạt các trạng thái có thể xảy ra theo thứ tự hợp lý.

Ở cấp độ cao, lượt của người chơi có thể là khởi đầu của trạng thái mới, theo sau là tất cả các hành động có thể được cho phép trong lượt đó.

Ví dụ

  • Nhà nước - thay đổi người chơi
    • giờ đến lượt người chơi 1
  • Hành động được phép
    • tấn công
      • chọn kẻ thù để tấn công
    • phòng thủ
      • chọn đơn vị để bảo vệ
    • di chuyển đơn vị
      • chọn đơn vị để di chuyển
      • kiểm tra để đảm bảo di chuyển được cho phép
    • Vân vân

Rõ ràng điều này sẽ khinh khí cầu khá nhanh, vì tôi chỉ phác thảo ra một kế hoạch cực kỳ hạn chế. Nắm bắt tốt các trạng thái có thể sớm có nghĩa là bạn nên ở một vị trí tốt để thực hiện. Tôi rất căng thẳng khi phác thảo chính xác cách bạn muốn trò chơi chạy .... một trò chơi theo lượt tốt đòi hỏi rất nhiều kế hoạch IMO.


Một dự án trường học khá cũ của tôi là nỗ lực phát triển 3 tháng tại Final Fantasy Tactics :) Sử dụng một cỗ máy trạng thái (một vài trong số chúng thực sự) như mô tả ở trên. sourceforge.net/projects/bpfat
James

Này, còn Game Engine cho chiến lược theo lượt thì sao? Bạn có thể tư vấn gì không? Có thể động cơ Unreal có thể phù hợp?
Rantiev

Để mỗi mình. Nếu bạn cảm thấy thoải mái với công cụ Unreal thì không có gì sai với điều đó. Chỉ phụ thuộc vào cơ chế mà bạn muốn tận dụng. Một tìm kiếm nhanh chỉ ra rằng một bộ công cụ hiện có cho công cụ Unreal để giúp tạo các trò chơi chiến lược theo lượt, mặc dù nó không miễn phí.
the_e

3

Gần đây tôi đã xây dựng một trò chơi chiến lược theo lượt tương tự như Master of Orion (hiện tại chỉ có một người chơi, nhiều người chơi sẽ phức tạp hơn một chút, nhưng một ý tưởng tương tự), đây là logic logic chức năng endTurn của tôi Lớp điều khiển trò chơi chính):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

Chức năng quay đầu người chơi của tôi sẽ thực hiện các chức năng dành riêng cho người chơi đó không bị ảnh hưởng bởi thứ tự diễn ra giữa những người chơi:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

Khi thích hợp, các chức năng này trả về các thông báo trạng thái và / hoặc kích hoạt các sự kiện để GUI có thể hiển thị những gì đã xảy ra trong lượt chơi hoặc cho người chơi biết một máy tính đã bị phá hủy, v.v ...


bạn có thể vui lòng cung cấp mã nguồn chỉ để kiểm tra? Sẽ giúp đỡ rất nhiều. Chỉ nhằm mục đích giáo dục.
DVole

@Dvole Tôi hiện đang làm việc để chuyển đổi mã từ Silverlight / C # sang JavaScript bằng thẻ canvas HTML5. Khi tôi hoàn thành, tôi có kế hoạch tìm nguồn mở mã và tại thời điểm đó, bạn được chào đón để xem chính xác cách tôi đã triển khai chức năng này. Nếu nó giúp lấy bối cảnh, bạn có thể chơi trò chơi Chiến lược không gian của tôi ở đây: Astriarch - Ruler of the Stars
Matt Palmerlee

2
@Dvole Tôi mất khá nhiều thời gian, nhưng tôi mới mở phiên bản Silverlight của Astriarch. Nếu bạn vẫn quan tâm, bạn có thể tải xuống mã nguồn từ github tại đây: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.