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 就可以测试了。

  • 相关阅读:
    浅拷贝与深拷贝的实现
    Java批量下载生成zip文件
    jsp页面内容导出到Excel中
    Table动态增加删除行
    JavaScript校验日期格式
    java实现算术表达式求值
    XCode 4 编译错误大全整理
    VMWare安装黑苹果Mac OS
    ODA(Open Design Alliance)介绍
    AutoCAD 2010 开发与之前版本的区别
  • 原文地址:https://www.cnblogs.com/rubyist/p/7611066.html
Copyright © 2011-2022 走看看