经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Erlang » 查看文章
简单Elixir游戏服设计-桌子和座位
来源:cnblogs  作者:damnit  时间:2018/9/25 20:32:19  对本文有异议

建模桌子和座位

代码比较短小,直接贴吧。

model 里新建simple_table.ex 和 seat.ex, 项目里新增对应的test.

座位部分

  1. defmodule Seat do
  2. def init(player) do
  3. %{
  4. id: player |> Player.get_id,
  5. player: player,
  6. score: 0,
  7. }
  8. end
  9. def get_id(seat), do: seat.id
  10. def update_player(seat, player), do: put_in(seat.player, player)
  11. def get_player(seat), do: seat.player
  12. def get_player_id(seat), do: seat.player |> Player.get_id
  13. def add_score(seat, num) when num >=0 , do: update_in(seat.score, &(&1 + num))
  14. def sub_score(seat, num) when num >= 0 , do: update_in(seat.score, &(&1 - num))
  15. def get_score(seat), do: seat.score
  16. end
seat.ex
  1. defmodule SeatTest do
  2. use ExUnit.Case
  3. doctest Seat
  4. setup do
  5. %{seat: Seat.init(Player.init)}
  6. end
  7. test "init", %{seat: seat} do
  8. assert 0 == seat |> Seat.get_score
  9. end
  10. test "add_and_remove_score", %{seat: seat} do
  11. num = 10
  12. old_score = seat |> Seat.get_score
  13. add_score_seat = seat |> Seat.add_score(num)
  14. assert old_score + num == add_score_seat |> Seat.get_score
  15. sub_score_seat = seat |> Seat.sub_score(num)
  16. assert old_score - num == sub_score_seat |> Seat.get_score
  17. end
  18. end
seat_test.exs

桌子部分

  1. defmodule SimpleTable do
  2. def init() do
  3. %{
  4. cards: SimplePoker.init_cards,
  5. creator: nil,
  6. seat_map: %{},
  7. seat_order: []
  8. }
  9. end
  10. def seat_count(table), do: table.seat_order |> Enum.count
  11. def seat_order(table), do: table.seat_order
  12. def find_seat(table, %{} = player), do: find_seat(table, player |> Player.get_id)
  13. def find_seat(table, player_id), do: table.seat_map[player_id]
  14. def add_seat(table, player) do
  15. seat = Seat.init(player)
  16. seat_id = seat |> Seat.get_id
  17. table = put_in(table.seat_map[seat_id], seat)
  18. add_to_order(table, seat_id)
  19. end
  20. def add_to_order(table, seat_id), do: update_in(table.seat_order, &(&1 ++ [seat_id]))
  21. def remove_seat(table, %{} = player), do: remove_seat(table, player |> Player.get_id)
  22. def remove_seat(table, player_id) do
  23. table = update_in(table.seat_map, fn m -> Map.delete(m, player_id) end)
  24. update_in(table.seat_order, fn o -> List.delete(o, player_id) end)
  25. end
  26. end
simple_table.ex
  1. defmodule SimpleTableTest do
  2. use ExUnit.Case
  3. doctest SimpleTable
  4. def create_player(id), do: Player.init |> Player.set_id(id)
  5. setup do
  6. %{
  7. table: SimpleTable.init,
  8. player1: create_player(1),
  9. player2: create_player(2),
  10. player3: create_player(3),
  11. player4: create_player(4)
  12. }
  13. end
  14. test "init", %{table: table} do
  15. assert 0 = table |> SimpleTable.seat_count
  16. end
  17. test "add_and_remove_seat", %{table: table, player1: player1, player2: player2, player3: player3, player4: player4} do
  18. table = table |> SimpleTable.add_seat(player1)
  19. |> SimpleTable.add_seat(player2)
  20. |> SimpleTable.add_seat(player3)
  21. |> SimpleTable.add_seat(player4)
  22. assert 4 == SimpleTable.seat_count(table)
  23. expect_seat_order = [player1 |> Player.get_id,
  24. player2 |> Player.get_id,
  25. player3 |> Player.get_id,
  26. player4 |> Player.get_id]
  27. assert ^expect_seat_order = SimpleTable.seat_order(table)
  28. new_expect_seat_order = [
  29. player2 |> Player.get_id,
  30. player3 |> Player.get_id,
  31. player4 |> Player.get_id
  32. ]
  33. table = table |> SimpleTable.remove_seat(player1)
  34. assert 3 == SimpleTable.seat_count(table)
  35. assert ^new_expect_seat_order = SimpleTable.seat_order(table)
  36. end
  37. end
simple_table_test.exs

暂时是随便编写了,后续需要再调整。

下回该起游戏进程了。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号