Làm thế nào để các thuật toán tạo lịch sử làm việc?


19

Tôi đã nghe nói về trò chơi Pháo đài lùn, nhưng chỉ bây giờ một trong những người tôi theo dõi trên Youtube đã bình luận về nó ... Tôi đã ngạc nhiên hơn khi nhận thấy Pháo đài Lùn thực sự tạo ra một lịch sử cho thế giới như thế nào!

Bây giờ, làm thế nào để các thuật toán làm việc? Họ thường lấy gì làm đầu vào, ngoại trừ độ dài của mô phỏng? Làm thế nào cụ thể họ có thể được?

Và quan trọng hơn; chúng có thể được tạo bằng Javascript hay Javascript quá chậm? (Tôi đoán điều này phụ thuộc vào độ sâu của mô phỏng, nhưng lấy Pháo đài Lùn làm ví dụ.)


3
"Chúng có thể được tạo bằng Javascript không?" Câu trả lời rõ ràng là có, nhưng nó phụ thuộc vào mức độ bạn muốn kết quả nhanh như thế nào và mức độ phức tạp mà bạn muốn chúng đạt được. Pháo đài lùn cũng mất một thời gian - và nó chậm lại khi thế giới già đi! Vì vậy, miễn là bạn muốn có một lịch sử nông cạn, vâng, bạn có thể làm điều đó trong Javascript, vì vậy nó phụ thuộc vào mức độ phức tạp mà bạn muốn lịch sử.
doppelgreener

2
Ông có nghĩa là "ở cấp độ của Pháo đài Lùn", như trên quy mô.
MichaelHouse

2
@Bane Vâng, ý tôi là bạn có thể thay đổi bao nhiêu lịch sử sẽ có trong DF. Khi bạn bắt đầu một thế giới, đầu tiên nó tạo ra địa hình một cách ngẫu nhiên và sau đó bắt đầu lão hóa thế giới trước mắt bạn và tạo ra lịch sử khi nó đi. Bạn xem nó khi các đế chế mở rộng và thu hẹp lại, khi địa hình thay đổi, khi các khu rừng phát triển và suy thoái, khi các khu vực bị ma ám (hoặc không còn bị ám ảnh), v.v. Nó tiến triển từng năm (hoặc vài năm một lần thực sự) trước mắt bạn. Điều này tiếp tục cho đến khi bạn nói với nó dừng lại. Bạn càng đi xa thì thế hệ càng chậm (do sử dụng CPU chứ không phải cơ chế trò chơi).
doppelgreener

1
Rất rõ ràng: thế giới càng cũ, mỗi năm càng chậm để tính toán. Trong một thế giới trẻ, nó sẽ vội vã trong vài năm đầu tiên, trong một thế giới hàng trăm năm tuổi, năm tiếp theo có thể mất một giây hoặc vài giây để tạo ra.
doppelgreener

1
Ồ, điều đó, tôi biết. Theo "độ sâu", tôi không có nghĩa là số năm, tôi có nghĩa là số lượng sự kiện xảy ra và độ chính xác của mô phỏng. Bạn chỉ có thể giữ một số lượng người mà một đế chế có, hoặc bạn thực sự có thể có một lớp được gọi là Personlàm việc vặt, đi đến quân đội, v.v. Shallow sẽ để cho quy mô của đế chế quyết định kết quả của trận chiến, nhưng sâu sắc sẽ có mỗi người lính chiến đấu cho riêng mình.
jcora

Câu trả lời:


27

Trước hết, có một số gợi ý cho thế hệ lịch sử về Pháo đài Lùn. Có người đã hỏi trên các diễn đàn Bay12 một thời gian trước, và một bảng điểm đã được chia sẻ và bạn có thể tìm thấy nơi cuộc thảo luận bắt đầu bằng cách tìm kiếm: "chủ đề của chúng ta hôm nay là thế hệ và thế hệ lịch sử".


Tôi không biết chính xác Pháo đài Lùn thực hiện nó như thế nào, nhưng tôi sẽ giải thích cách tôi dự định thực hiện một dự thảo đầu tiên rất cơ bản trong trò chơi của mình. Tôi sẽ sử dụng một automata di động đơn giản . Nếu bạn xem qua các nguyên mẫu bào tử này , như nuôi cấy tế bào và quần xã.

nhập mô tả hình ảnh ở đây

Đây là những ví dụ về tự động hóa tế bào và những gì họ có thể sản xuất. Về cơ bản tôi sẽ tạo ra các quy tắc cho các chủng tộc khác nhau. Một số ví dụ về các quy tắc sẽ là:

  • Sự thù địch của họ đối với các chủng tộc khác
  • Sở thích khí hậu của họ
  • Yêu cầu tài nguyên của họ
  • Tỷ lệ sinh và tuổi thọ của họ
  • Mong muốn của họ (nghiên cứu công nghệ, thương mại, tồn tại hòa bình, thống trị thế giới)
  • Khả năng của họ (xây dựng cấu trúc, thu thập tài nguyên, gây chiến, v.v.)
  • Và cứ thế ...

Vì vậy, đầu vào quan trọng nhất cho tất cả những thứ này hoạt động là một thế giới để đưa những chủng tộc này vào. Địa hình sẽ xác định sở thích và mở rộng của họ. Vì vậy, một khi bạn đã tạo ra một thế giới, hãy chọn các địa điểm ngẫu nhiên trong thế giới nơi các chủng tộc này sẽ sống một cách phù hợp và thả lỏng chúng. Bây giờ những thứ thú vị bắt đầu xảy ra. Bây giờ bạn có đất và chủng tộc với mong muốn và khả năng, bạn có thể bắt đầu xây dựng một lịch sử. Những chủng tộc này thu thập tài nguyên, sau đó các cấu trúc được xây dựng:

  • Thị trấn trong khu vực tài nguyên cao, sinh kế cao.
  • Đường nối các thị trấn lớn hơn.
  • Cầu bắc qua sông.
  • Địa đạo xuyên núi.
  • Pháo đài gần tiền tuyến mở rộng để đối phó với các trận chiến.

Bất kỳ cấu trúc nào cũng có thể bị đột kích / chinh phục bởi các chủng tộc khác. Một cấu trúc (như một thị trấn hoặc pháo đài) tồn tại càng lâu trong lịch sử, nó càng có khả năng phòng thủ thì càng khó chiếm lấy. Và càng mong muốn hơn cho các chủng tộc muốn kiểm soát. Các trận chiến được tiến hành ở nơi các chủng tộc gặp nhau (ít nhất một là thù địch). Các trận chiến được đặt tên theo các mốc hoặc các cấu trúc gần đó, hoặc nếu trận chiến có ý nghĩa hoặc các mốc không được đặt tên, các mốc được đặt tên theo trận chiến.

Đường, cầu và đường hầm được mở rộng thông qua thương mại và vận chuyển tài nguyên. Mỗi có một thông lượng tối đa có thể tăng với chi tiêu tài nguyên. Xây một pháo đài bằng đá giữa đồng cỏ? Những con đường sẽ được sử dụng nặng để vận chuyển đá cần thiết. Họ sẽ trở nên lớn hơn và có được một cái tên.

Thiên tai xảy ra, ảnh hưởng đến dân số và tiến trình lịch sử. Động đất có thể làm giảm một thị trấn thành đống đổ nát hoặc làm sập một đường hầm. Một trận lụt có thể cuốn trôi một con đường hoặc cây cầu.


Nó không sâu như Pháo đài Lùn, nhưng đó là một khởi đầu. Bây giờ như bạn có thể tưởng tượng, (và như Johnathan Hobbs đã đề cập), các chủng tộc này càng mở rộng, càng có nhiều tế bào được mô phỏng. Không chỉ có nhiều tế bào được mô phỏng, mà các mô phỏng còn phức tạp hơn vì hiện nay có các cấu trúc để xây dựng / duy trì, chiến đấu để trả lương, thương mại cho ... thương mại, v.v. Điều này trở nên nặng nề cho bất kỳ ngôn ngữ. Javascript có thể chậm lại sớm hơn. Tuy nhiên, bạn luôn có thể hy sinh sự phức tạp để cải thiện tốc độ.

Tất cả đều là mô phỏng (mặc dù phức tạp), bạn chỉ đang ghi lại các sự kiện quan trọng trên đường đi và gọi đó là lịch sử.

Tôi cũng vừa tìm thấy một bài đăng trên diễn đàn Bay12 cho mọi người động não làm thế nào để làm cho thế giới Pháo đài Lùn nhanh hơn. Tôi chưa đọc qua nó, nhưng nó có thể cung cấp một số gợi ý nếu bạn gặp phải vấn đề với việc triển khai quá chậm.


Tuyệt vời và nhiều thông tin như mọi khi, @ Byte56. :)
jcora

1
Cảm ơn Bane. Có lẽ không phải lúc nào cũng vậy, mọi người đặt câu hỏi tôi nghĩ tôi biết điều gì đó. Cảm ơn vì đã cho tôi cơ hội để suy nghĩ về nó nhiều hơn và nhận được một cái gì đó được viết ra :)
MichaelHouse

4

Chỉ là một điểm phụ, JavaScript không chậm như bạn nghĩ .

Các nhà phát triển trình duyệt đã dành rất nhiều thời gian và năng lượng để tối ưu hóa các công cụ JavaScript của họ . Điểm chuẩn mà tôi liên kết để chỉ ra rằng, trong số các tác vụ được điểm chuẩn, ở trung vị, JavaScript chỉ chậm hơn C 5 lần , điều này không thể nói đối với một số ngôn ngữ được dịch khác. Và ràng buộc thấp hơn thậm chí còn ấn tượng hơn: ngang bằng với C .

Tất nhiên, điểm chuẩn ngôn ngữ không thực sự có ý nghĩa nhiều - bạn có thể có thể tìm thấy các mẫu đối lập bằng cách sử dụng một điểm chuẩn khác. Nhưng vấn đề là JavaScript khá nhanh . Không, đó không phải là C hay C ++ và không cố gắng. Nhưng thật tốt khi không bị mắc kẹt trong suy nghĩ "ngôn ngữ được giải thích == chậm", bởi vì đối với bất kỳ nhiệm vụ phức tạp không cần thiết nào, hiệu suất sẽ quan trọng hơn trong thiết kế thuật toán và ít lựa chọn ngôn ngữ hơn.

Tôi thực sự sẽ viết tất cả những điều này trong một bình luận, nhưng tôi đã hết chỗ.


1

Có, nó có thể được xây dựng trên javascript, kiểm tra các proyects như ASM.js, tốc độ chậm nhất gần gấp 2 lần C. Nếu bạn chăm sóc nhiều lõi (sử dụng webworkers), nó thậm chí có thể nhanh hơn DF (về tài nguyên) , đó là monocore ngay bây giờ.

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.