2012-04-26 43 views
6

Tôi có một câu hỏi phức tạp mà tôi đã xem xét một vài lần mà không tìm ra.chức năng ngẫu nhiên: giá trị cao hơn xuất hiện ít thường xuyên hơn thấp hơn

Một số cốt truyện: Tôi đang tạo một trò chơi RPG dựa trên textbased, nơi người chơi chiến đấu chống lại động vật/quái vật, v.v. Nó hoạt động giống như bất kỳ trò chơi nào khác mà bạn đánh trúng một số điểm nhấn trên mỗi vòng khác.

Vấn đề: Tôi đang sử dụng hàm ngẫu nhiên trong php để tạo ra giá trị cuối cùng của lần truy cập, tùy thuộc vào cấp độ, áo giáp và loại đó. Nhưng tôi muốn các giá trị cao hơn (như hit tối đa) xuất hiện ít thường xuyên hơn các giá trị thấp hơn.

Đây là một ví dụ đồ thị:

Example graph

Làm thế nào tôi có thể tái tạo một cái gì đó như thế này sử dụng PHP và rand chức năng? Khi nhập rand(1,100) mọi số đều có cơ hội được chọn giống nhau.

Ý tưởng của tôi là: Tạo một mức độ 2 (hoặc hàm bậc hai) và sử dụng số ngẫu nhiên (x) để thực hiện phép tính.

Công việc này có giống như tôi muốn không?

Câu hỏi này hơi phức tạp, vui lòng cho tôi biết nếu bạn muốn biết thêm thông tin và chi tiết.

+1

Hãy xem [cách tạo thành máy tạo số ngẫu nhiên] (http://stackoverflow.com/questions/1858364/how-to-bias-a-random-number-generator). – deceze

+0

Nếu bạn muốn các giá trị cao hơn xuất hiện ít thường xuyên hơn các giá trị thấp hơn, đồ thị phải được đảo ngược không? Tôi đoán trục X là số và trục Y cơ hội xuất hiện. – pomeh

Trả lời

1

Xin vui lòng, nhìn vào bài viết xinh đẹp này: http://www.redblobgames.com/articles/probability/damage-rolls.html

Có sơ đồ tương tác xem xét xúc xắc lăn và tỷ lệ kết quả. Điều này sẽ rất hữu ích cho bạn.

Chú ý đến loại số ngẫu nhiên lăn:

roll1 = rollDice(2, 12); 
roll2 = rollDice(2, 12); 
damage = min(roll1, roll2); 

này sẽ cung cấp cho bạn những gì bạn tìm kiếm.

0

OK, đây là ý tưởng của tôi:

Hãy nói rằng bạn đã có một loạt các yếu tố (a,b,c,d) và bạn sẽ không chọn một cách ngẫu nhiên một trong số họ. Thực hiện rand(1,4) để nhận chỉ mục phần tử ngẫu nhiên, có nghĩa là tất cả các phần tử đều có cơ hội như nhau để xuất hiện. (25%)

Bây giờ, giả sử chúng ta lấy mảng này: (a,b,c,d,d).

Ở đây chúng tôi vẫn có 4 yếu tố, nhưng không phải tất cả các yếu tố đều có cơ hội như nhau để xuất hiện.

  • a, b, c: 20%
  • d: 40%

Hoặc, chúng ta hãy mảng này:

(1,2,3,...,97,97,97,98,98,98,99,99,99,100,100,100,100)

Gợi ý : Bằng cách này, bạn sẽ không chỉ thiên vị thuật toán tạo số ngẫu nhiên, nhưng bạn sẽ thực sự thiết lập xác suất mong muốn của mỗi lần xuất hiện (hoặc của một dãy số).


Vì vậy, đó là cách tôi sẽ đi về điều đó:

Nếu bạn muốn số từ 1 đến 100 (với số lượng cao hơn xuất hiện thường xuyên hơn, có được một số ngẫu nhiên 1-1000 và kết hợp nó với một phạm vi rộng hơn. Ví dụ:

rand = 800-1000 => rand/10 (80->100) 
rand = 600-800 => rand/9 (66->88) 
... 

hoặc một cái gì đó như thế. (bạn có thể sử dụng bất kỳ hoạt động toán học, bạn tưởng tượng, modulo hoặc bất cứ điều gì ... và chơi với thuật toán của bạn). tôi hy vọng bạn sẽ có được ý tưởng của tôi.

0.123.

Chúc bạn may mắn! :-)

Các vấn đề liên quan