Elixir:可选概率结构属性
给定一个结构列表,有没有一种方法可以根据预先确定的指标(比如游戏难度)改变概率属性?此概率属性是随机选择房间的概率 我当前的概率属性已经设置好,需要不断更新。现在我想引入一个外部设置来调整这些值,我需要完全重新设计这个概率的设置方式。有关我的当前设置,请参见以下内容:Elixir:可选概率结构属性,elixir,Elixir,给定一个结构列表,有没有一种方法可以根据预先确定的指标(比如游戏难度)改变概率属性?此概率属性是随机选择房间的概率 我当前的概率属性已经设置好,需要不断更新。现在我想引入一个外部设置来调整这些值,我需要完全重新设计这个概率的设置方式。有关我的当前设置,请参见以下内容: defmodule Sandbox do defstruct description: nil, chance: nil def all, do: [ %Sandbox{ description: "
defmodule Sandbox do
defstruct description: nil, chance: nil
def all, do: [
%Sandbox{
description: "Description 1",
chance: 1..40
},
%Sandbox{
description: "Description 2",
chance: 41..60
},
%Sandbox{
description: "Description 3",
chance: 61..100
},
]
def random do
rand = Enum.random(1..100)
Enum.find(all(), fn %{chance: chance} -> rand in chance end)
end
end
问题:
我会在每个结构中存储每个难度的概率,然后使
随机接受难度等级:
defmodule Sandbox do
defstruct description: nil, easy: nil, medium: nil, hard: nil
def all, do: [
%Sandbox{
description: "Description 1",
easy: 1..40,
medium: 1..50,
hard: 1..60,
},
%Sandbox{
description: "Description 2",
easy: 41..60,
medium: 51..80,
hard: 61..90,
},
%Sandbox{
description: "Description 3",
easy: 61..100,
medium: 81..100,
hard: 91..100,
},
]
def random(difficulty) do
rand = Enum.random(1..100)
Enum.find(all(), fn s -> rand in Map.get(s, difficulty) end)
end
end
IO.inspect Sandbox.random(:easy)
IO.inspect Sandbox.random(:medium)
IO.inspect Sandbox.random(:hard)
我会根据难度利用百分比机会选择房间:
defmodule Sandbox do
defstruct description: nil, chance: nil
def all, do: [
%Sandbox{
description: "Description 1",
chance: %{easy: 75, medium: 40, hard: 10}
},
%Sandbox{
description: "Description 2",
chance: %{easy: 100, medium: 100, hard: 100}
},
%Sandbox{
description: "Description 3",
chance: %{easy: 100, medium: 50, hard: 10}
},
]
def random_by_difficulty(rooms, difficulty) do
mark = Enum.random(1..100)
rooms
|> Enum.filter(fn room -> room.chance[difficulty] >= mark end)
|> Enum.random()
end
end
对于不同的困难,您希望概率如何变化?我猜你可以在每个结构中存储3个概率,分别为easy、medium和hard,然后在random
@Dogbert中选择,概率将根据难度设置向上或向下调整。实际上,为每个设置使用不同的属性应该可以很好地工作。