Phát triển khung trò chơi bài


7

Những kiểu mẫu và ý tưởng thiết kế nào người ta có thể sử dụng để xây dựng một khung trò chơi thẻ có mục đích chung chung?

Điều này xuất phát từ việc tôi đã cố gắng xây dựng một bản sao của trò chơi nổi tiếng Steve Jackson "Munchkin". Vì bản chất của trò chơi đó, tôi đã kết thúc việc phải mã hóa quá nhiều chức năng thẻ khiến cho sự phát triển trở nên hỗn loạn và quá sức chịu đựng. Tôi đã muốn xây dựng một cái gì đó chung chung nhưng cuối cùng chỉ có nhiều lớp với nhiều hàm bị ghi đè và chuyển đổi các câu lệnh để xác định hành vi.

Tôi tò mò không biết ai đó có nhiều kinh nghiệm hơn trong thiết kế sẽ xử lý một nhiệm vụ như vậy là xây dựng một khung trò chơi thẻ mục đích chung, hoặc ít nhất là thứ gì đó có thể được mở rộng. Hoặc tốt nhất là nếu tôi muốn tạo một mô phỏng của một trò chơi bài như Munchkin, tôi bị mắc kẹt trong việc tạo ra một khung cụ thể.

Tôi muốn sử dụng C #.

BIÊN TẬP

Tôi muốn làm rõ phần nào những gì cuối cùng tôi muốn đạt được. Tôi muốn một khung công tác về cơ bản tôi có thể thực hiện các giai đoạn với chức năng tùy chỉnh (giai đoạn 1: rút thẻ, giai đoạn 2: áp dụng quy tắc bảo trì, giai đoạn 3: chơi bài, giai đoạn 4: giải quyết, v.v.).

Tôi nghĩ sau đó xác định một quy tắc sẽ là khôn ngoan sẽ được kết hợp với cả thẻ và giai đoạn.

Sau đó, các thẻ sẽ được xác định và tôi cho rằng gắn liền với các quy tắc, ví dụ như quy tắc có thể là "Trong giai đoạn bảo trì, mất 1 mã thông báo". Tuy nhiên, thẻ mà người chơi có thể cung cấp "Không mất bất kỳ mã thông báo nào trong giai đoạn bảo trì". Vì vậy, thật tuyệt khi có thể gắn kết điều này với nhau nhưng trong ruột của khuôn khổ.

Tôi cho rằng điều này cũng có thể thoát khỏi giải đấu của tôi.


1
Vui lòng làm rõ điều gì đó cho tôi: bạn đang tìm kiếm thứ gì đó sẽ giúp bạn phát triển Munchkin không đau đớn, hoặc bạn có tham vọng tạo ra một khung trò chơi thẻ chung mà mọi người cũng có thể sử dụng trên các trò chơi bài khác không? (Ngoài ra, nếu bạn đang xem xét cái sau, tôi sẽ khuyên bạn chỉ nên tập trung vào cái trước vào thời điểm này)
doppelgreener

Tôi không thực sự quan tâm đến Munchkin nữa, nhưng tôi thực sự có một trò chơi bài khác trong tâm trí (thứ gì đó do chính tôi tạo ra) mà tôi muốn đặt ở dạng máy tính, không đau đớn. cái đó có giúp ích không?
Robb

Câu trả lời:


6

Tôi đã sử dụng một số loại ngôn ngữ kịch bản như LUA hoặc Python để xác định từng hành vi hoặc thẻ đặc biệt.

Bằng cách này, bạn có thể xác định một công cụ "chung" và giữ các đặc tính của thẻ cách xa mã chính, thành một số tập lệnh nhỏ và có thể chỉnh sửa dễ dàng.

Ưu điểm chính của ngôn ngữ tập lệnh so với XML hoặc một số dữ liệu "tĩnh" khác là ngôn ngữ tập lệnh có thể "tạo" các hành vi của chính chúng bằng các phương thức công khai được cung cấp bởi công cụ.

Ví dụ: giả sử công cụ của bạn cung cấp các phương thức "setDommage (target, dmg)" và "setVisualEffect (nameOfFxLuaScript)", v.v. Bạn có thể có một thẻ làm một cái gì đó giống như mã peuso này

------Card1 -- A simple fireball-----
// Fire ball
setDommage(target, 37);
setVisualEffect("fireBall.lua");

------Card2 -- A multitype ball (outch it hurts!)-----
// Fire ball
setDommage(target, 37);
setVisualEffect("fireBall.lua");

// Ice ball
if( player.protectionAgainstIce == false )
{
    setDommage(target, 102);
    setVisualEffect("iceBall.lua");
}

// thunderbolt
while( player.Alive )
{
    setDommage(target, 1005);
    setVisualEffect("thunderBolt.lua");
}

Cả hai thẻ sử dụng cùng một phương thức động cơ , nhưng chúng không làm những điều giống nhau. Các hành vi cũng có thể sử dụng dữ liệu được thu thập từ công cụ (như danh sách người chơi để lặp qua chúng) và các câu lệnh for, if, v.v.

Ưu điểm thứ hai nhưng không kém phần quan trọng là nó không cần phải biên dịch. Bạn có thể sửa đổi tập lệnh LUA và tải lại trực tiếp mà không cần biên dịch lại trò chơi của mình. Rất tốt để thử nghiệm và lặp lại cho đến khi bạn tìm thấy các cài đặt tốt.

Ưu điểm thứ ba là, bất kỳ ai có thể học ngôn ngữ kịch bản đều có thể tạo thẻ / hành vi mới miễn là bạn cung cấp danh sách các phương thức công khai được chia sẻ bởi công cụ (và miễn là bạn không mã hóa LUA). Và như mọi người biết, cộng đồng thật tuyệt vời khi bạn cung cấp cho họ những công cụ hay;)


Đây là một trình bao bọc LUA cho C #: http://luaforge.net/projects/luainterface/


Bạn sẽ không có một liên kết đến một dự án có thể giống với những gì bạn mô tả? Tôi chưa bao giờ sử dụng ngôn ngữ script trước đây. Tôi đã hy vọng chỉ cần xác định các thẻ trong XML, đọc chúng và về cơ bản, trò chơi sẽ chỉ áp dụng những gì thẻ làm.
Robb

XML không phải là một ý tưởng tồi, nhưng bạn sẽ rất hạn chế. Script cung cấp khả năng tạo các hành vi tùy chỉnh bằng các phương thức công khai được cung cấp bởi công cụ. Bằng cách này, động cơ có thể vẫn là "chung" nhất có thể. Tôi không biết một ví dụ áp dụng cho thẻ, nhưng có hàng tấn trò chơi sử dụng LUA như WoW (addons) hoặc Aquaria (hành vi của các thực thể).
Valkea

Hmm Tôi đang thấy một lợi thế thực sự để sử dụng ngôn ngữ kịch bản. Vì vậy, trong ví dụ, bạn có thiệt hại. Đối với một trò chơi bài, với nhiều thứ sẽ tốt hơn nếu bạn cố gắng tìm ra tất cả các hành động có thể hoặc cố gắng xây dựng một 'setActionEffect' chung chung. Trong Munchkin, bạn có thể nói áp dụng một công cụ sửa đổi cho cấp độ của bạn để tăng nó. Bạn cũng có thể làm cho quái vật biến mất. Bạn thậm chí có thể điều chỉnh một cuộn chết. Mảnh ghép đó là những gì tôi đã thách thức, làm thế nào để mô hình hóa một thứ phức tạp như thế.
Robb

Tôi không thực sự chắc chắn về việc kịch bản sẽ giúp "cỗ máy" của anh ấy phát triển thành một loạt các thuộc tính như "ProtectionAgainstX" và "CanDoY", v.v. Trên thực tế, có vẻ như kịch bản sẽ buộc bạn phá vỡ đóng gói, mà tôi tin rằng sẽ làm cho việc thêm thẻ mới và thay đổi luật chơi cơ bản trở nên khó hơn và khó hơn.
Alex Schearer

@Alex: Mục tiêu là làm cho nó trở nên "chung chung" hơn, vì vậy nó có thể được sử dụng với một vũ trụ hoàn toàn khác mà không phải thay đổi mã / lõi trò chơi. "ProtectionAgainstIce" được sử dụng trong mã giả là một ví dụ tồi được sử dụng để thể hiện câu lệnh "if", nhưng nó phải là một cái gì đó giống như isProtectedAgainst ("ice"), chung chung hơn có thể tái sử dụng với các thứ khác nhau ("lửa", " bóng "," laser ", v.v.). Cách này có một "vô hạn" các khả năng miễn là các loại (lửa, v.v.) cũng được xác định bên ngoài lõi trò chơi.
Valkea
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.