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中选择,概率将根据难度设置向上或向下调整。实际上,为每个设置使用不同的属性应该可以很好地工作。