Các thuộc tính để tính toán một lần truy cập trong trò chơi theo lượt hoặc Roguelike


22

Tôi đang cố gắng tìm ra một công thức tốt để xác định một cú đánh khi người chơi tấn công kẻ thù trong Roguelike. Tôi muốn đưa ra một cái gì đó đơn giản nhưng, vẫn đúng với cách nó được thực hiện trong D & D hoặc Roguelike nổi tiếng như AngBand hoặc NetHack.

Những gì tôi có cho đến nay là thêm sự khác biệt giữa các thuộc tính người chơi và kẻ thù, cùng với một số nguyên ngẫu nhiên:

if ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + random_integer_below_6()) >= 10) {
    hit(enemy);
}

Điều này làm cho lối chơi không tự nhiên: người chơi không bao giờ bỏ lỡ kẻ thù yếu và ngược lại cho kẻ mạnh. Có ai biết hướng dẫn về chiến đấu dựa trên thuộc tính được sử dụng trong các trò chơi theo lượt không? Tôi có nên (và tôi có thể) sao chép nguyên tắc D & D không?

Câu trả lời:


18

Tôi sẽ tìm ra những gì bạn muốn cơ hội "được bảo đảm" và "bỏ lỡ được bảo đảm" (nghĩa là cơ hội cho một con mèo con đánh một con rồng và một con rồng để bỏ lỡ một con mèo con). Lưu trữ kết quả ngẫu nhiên của bạn và trước khi áp dụng chênh lệch sức mạnh, đánh dấu một lần truy cập nếu nó nằm trong giới hạn đó. Điều đó sẽ ngăn chặn vấn đề cơ hội trúng / bỏ lỡ 100% ... mặc dù có một tùy chọn khác là luôn cung cấp cơ hội đánh, chi tiết bên dưới.

D & D là một hệ thống "phẳng", trong đó xác suất được phân bổ đều trên các kết quả cuộn có thể có. Các hệ thống khác sử dụng phân phối cong hơn, thường đạt được bằng cách lăn nhiều xúc xắc và thêm chúng. Thật dễ dàng để tạo một đường cong như thế này (rand () + rand ()) / 2 xuất hiện trong tâm trí).

Một khả năng khác là "nổ xúc xắc." Trong các hệ thống như Shadowrun và Savage Worlds, việc lăn kết quả chết tối đa có thể cho phép bạn quay lại cái chết đó và thêm kết quả mới. Trong trò chơi của bạn, bạn sẽ kiểm tra xem liệu kết quả ngẫu nhiên của bạn có vượt quá ngưỡng nhất định hay không và nếu có, hãy cuộn lại. Nếu bạn để xúc xắc phát nổ vô thời hạn, thì ngay cả con yêu tinh thấp nhất cũng có cơ hội đánh một vị thần, và bạn không cần một thợ máy "được bảo đảm" rõ ràng.

Vì vậy, một cách tiếp cận khả thi với một cuộn cong, đảm bảo cơ hội bị mất và xúc xắc nổ tung sẽ là một cái gì đó như:

function getRoll():Number
{
  var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
  if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
  return result;
}

function attackHits():Boolean
{
  var roll:Number = getRoll();
  if(roll < 0.25) return false; //Guaranteed chance of miss
  else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + roll) >= 10; //Your original test.
}

Tất nhiên, đó là chưa được kiểm tra và mất cân bằng; bạn muốn điều chỉnh tất cả những con số ma thuật đó cho đến khi họ cảm thấy đúng.

Đối với các quy tắc sao chép nguyên văn, có những vấn đề pháp lý và đạo đức với điều đó. Mặc dù vậy, bạn vẫn lấy cảm hứng từ D & D và các trò chơi trên bàn khác; đó là cách tất cả chúng được thiết kế ở nơi đầu tiên. Bạn cũng không cần phải cho người chơi thấy chính xác cách thức hoạt động của các quy tắc, và bạn có thể thấy rằng việc sử dụng đường cong xúc xắc điểm nổi trơn tru sẽ dẫn đến cảm giác tốt hơn so với việc giới hạn bản thân trong các ràng buộc số nguyên của xúc xắc vật lý.


3
ngôn ngữ đó là gì, với loại buồn cười giảm? Hay chỉ là mã giả?
tenpn

2
Tôi nghĩ rằng nó có thể là Actioncript hoặc Javascript, nhưng đừng bắt tôi phải làm thế.
Vịt Cộng sản

Đó là Actioncript 3. Tôi là nhà phát triển Flash.
Gregory Avery-Weir

6

Tôi cho rằng đây là một câu hỏi cân bằng trò chơi và không phải là một câu hỏi mã hóa, và có rất nhiều cách để xử lý vấn đề này. Từ thuật toán hiện có của bạn, tôi nghi ngờ bạn đang làm cho nó phức tạp hơn mức cần thiết (ba thuộc tính VÀ một số ngẫu nhiên tạo nên một hệ thống cực kỳ lầy lội theo quan điểm của người chơi). Bản năng đầu tiên của tôi là đơn giản hóa!

Thuộc tính ưa thích làm nhiều việc, thay vì kết quả được xác định bởi nhiều thuộc tính. DEX hoạt động tốt như là yếu tố quyết định chính của cơ hội tấn công; việc bổ sung mọi thứ khác chỉ nhằm mục đích làm cho nó khó cân bằng hơn. Hãy nghĩ về nó theo cách này: sát thương dự kiến ​​của người chơi trên mỗi đòn đánh là% sát thương của họ nhân với sát thương trung bình của họ khi họ đánh. Làm thế nào để bạn có kế hoạch tính% "mong đợi" hoặc "điển hình" để đạt% với rất nhiều biến số?

Tôi thấy một vấn đề khác, đó là công thức của bạn không có quy mô, và đây có lẽ là những gì bạn đang gặp phải. Giả sử DEX, Lucks và TỐC ĐỘ có xu hướng tăng trong suốt quá trình chơi, sự khác biệt giữa người chơi và quái vật trong các chỉ số đó cũng sẽ có xu hướng tăng. Chỉ là một ví dụ, nếu DEX trò chơi đầu của người chơi nằm trong phạm vi 4 đến 6 và quái vật cũng vậy, đó là công cụ sửa đổi 10-20% để đánh. Nếu phạm vi giống như 10 đến 20 trong các giai đoạn sau của trò chơi, thì đó là công cụ sửa đổi 100%.

Một cách để khắc phục đó là giữ số liệu thống kê cố định. Phạm vi người chơi và quái vật là như nhau trong suốt trò chơi và nhận được thứ gì đó như +1 DEX là một thỏa thuận rất lớn, cực kỳ hiếm và được xử lý như vậy (nếu nó tồn tại). Sau đó, công thức của bạn sẽ hoạt động tốt cho toàn bộ trò chơi và bạn sẽ thấy một người chơi có cùng cơ hội đánh trúng.

Một cách khác là thay đổi "10" được mã hóa cứng theo tỷ lệ theo cấp độ, vì vậy có thể đó là "cấp 10 + cấp quái vật" hoặc "cấp 10 ngục tối" hoặc thứ gì đó, gây khó khăn tăng nhẹ khi trò chơi tiến lên trừ khi người chơi tăng cấp số liệu thống kê của họ phù hợp.

Cách thứ ba, như những người khác đã nói, là đặt mũ cứng ở mức% cao nhất và thấp nhất có thể chấp nhận để đạt% và chỉ cần nói "nếu giá trị tính toán nhỏ hơn X, thay vào đó hãy sử dụng X".

Để hoàn thiện, tôi sẽ chỉ ra rằng không có luật tuyệt đối nào mà bạn PHẢI bao gồm một cú đánh trúng đích ngay từ đầu. Thực hiện một hành động trong một trò chơi không hiệu quả không đặc biệt thú vị và không thực sự bổ sung vào trải nghiệm ngoại trừ trong những trường hợp hiếm hoi. Một cách khác là để người chơi LUÔN LUÔN tấn công và chỉ gây rối với phạm vi sát thương để đôi khi họ sẽ gây sát thương ít hơn nhiều so với những người khác. Hãy nhớ rằng các hệ thống phức tạp là niềm vui cho người thiết kế hơn người chơi.


Đây là một câu trả lời tuyệt vời.
seanicus

3

Bạn có thể muốn thêm các đòn chí mạng (thường không thể bỏ lỡ, sát thương cộng thêm) và bỏ lỡ quan trọng (cơ hội bằng phẳng để bỏ lỡ bất kể điều gì, có thể khiến người chơi kinh ngạc).


0

Rất nhiều trò chơi sử dụng thay đổi năm phần trăm của một lần truy cập bất kể mọi yếu tố ngoài công thức đánh bình thường.

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.