zoukankan      html  css  js  c++  java
  • 简单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 就可以测试了。

  • 相关阅读:
    APP之百度地图SDK的AK值获取(android)
    横向滚动菜单-选中标题居中显示
    函数按引用传参问题
    js验证提交
    Java servlet ajax
    数据库3种读
    mybatis插件
    mybatis 缓存
    从前端对象中获取的文本变为字符串,并替换其中一些指定的字符
    多个窗口开启后,切换到指定title的窗口
  • 原文地址:https://www.cnblogs.com/rubyist/p/7611066.html
Copyright © 2011-2022 走看看