• 简单Elixir游戏服设计-创建玩家模型


    删除model.ex

    创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了。

    选择 map 代表数据,是为了扩展数据结构,方便增加功能。struct也是可以的。

    add_num 和 cost_num 存粹是为了简化代码

    一系列的get/set 是为了操作玩家数据用的(也可以减少代码吧)

    defmodule Player do
        def init do
            %{
                id: 0,     # 唯一标识
                name: "",   # 昵称
                gold: 0,     # 金币
            }
        end
    
        def get_id(player), do: player.id
        def set_id(player, new_id), do: put_in(player.id, new_id)
    
        def set_name(player, new_name), do: put_in(player.name, new_name)
        def get_name(player), do: player.name
    
    
        def add(num) when num >=0 , do: &(&1 + num)
        def cost(num) when num >=0 , do: &(&1 - num)
    
        def get_gold(player), do: player.gold
        def add_gold(player, num) , do: update_in(player.gold, add(num))
        def cost_gold(player, num), do: update_in(player.gold, cost(num))
    end

    增加player 的测试  player_test.ex

    defmodule PlayerTest do
      use ExUnit.Case
      doctest Player
      
      setup do
    
        %{player: Player.init}
      end
    
      test "设置ID", %{player: player} do
          set_id = "test"
          new_id = player |> Player.set_id(set_id) |> Player.get_id
          assert new_id == set_id
      end
    
      test "设置昵称", %{player: player} do
          set_name = "新名字"
          new_name= player |> Player.set_name(set_name) |> Player.get_name
          assert new_name == set_name
      end
    
      test "增加金币", %{player: player} do
          num = 10
        new_gold =  player |> Player.add_gold(num) |> Player.get_gold
        old_gold = player |> Player.get_gold
        assert new_gold == old_gold + num
      end
    
      test "减少金币", %{player: player} do
          num = 10
          new_gold = player |> Player.cost_gold(num) |> Player.get_gold
          old_gold = player |> Player.get_gold
          assert new_gold == old_gold - num
      end
    end

    我用的sublime,安装elixr包,然后tools ==》 build system ==》 elixr mix test

    ctrl + B 就可以测试了。

  • 相关阅读:
    BZOJ 3531[Sdoi2014]旅行
    BZOJ4998 星球联盟
    BZOJ2959 长跑
    【北京集训D2T3】tvt
    [Bzoj]5343: [Ctsc2018]混合果汁
    HGOI20190810 省常中互测3
    HGOI20190809 省常中互测2
    HGOI20190808 省常中互测1
    组合排列和组合数 学习笔记
    2-SAT (two-statisfiability) 算法 学习笔记
  • 原文地址:https://www.cnblogs.com/rubyist/p/7611066.html
Copyright © 2020-2023  润新知