game_tavla_lib.erl 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. %% Author: serge
  2. %% Created: Feb 14, 2013
  3. %% Description: TODO: Add description to game_tavla_lib
  4. -module(game_tavla_lib).
  5. %%
  6. %% Include files
  7. %%
  8. %%
  9. %% Exported Functions
  10. %%
  11. -export([board_to_text1/1,
  12. board_to_text2/1,
  13. board_to_text3/1,
  14. board_to_text4/1]).
  15. -define(BLACK, black).
  16. -define(WHITE, white).
  17. -define(WHITE_OUT, wo).
  18. -define(WHITE_BAR, wb).
  19. -define(BLACK_OUT, bo).
  20. -define(BLACK_BAR, bb).
  21. %%
  22. %% API Functions
  23. %%
  24. board_to_text1(Board) ->
  25. Str1 = "13 14 15 16 17 18 BB 19 20 21 22 23 24 BO",
  26. Str4 = " || ",
  27. Str7 = "12 11 10 09 08 07 WB 06 05 04 03 02 01 WO",
  28. List1 = [13, 14, 15, 16, 17, 18, ?BLACK_BAR, 19, 20 ,21, 22, 23, 24, ?BLACK_OUT],
  29. List2 = [12, 11, 10, 09, 08, 07, ?WHITE_BAR, 06, 05 ,04, 03, 02, 01, ?WHITE_OUT],
  30. Str2 = list_to_colors(List1, Board),
  31. Str3 = list_to_checkers(List1, Board),
  32. Str5 = list_to_checkers(List2, Board),
  33. Str6 = list_to_colors(List2, Board),
  34. [Str1, Str2, Str3, Str4, Str5, Str6, Str7].
  35. board_to_text2(Board) ->
  36. Str1 = "|xoxoxo-xoxoxo| ",
  37. Str4 = "|------+------| ",
  38. Str7 = "|xoxoxo-xoxoxo| ",
  39. List1 = [13, 14, 15, 16, 17, 18, ?BLACK_BAR, 19, 20 ,21, 22, 23, 24],
  40. List2 = [12, 11, 10, 09, 08, 07, ?WHITE_BAR, 06, 05 ,04, 03, 02, 01],
  41. Str2 = "|" ++ list_to_colors2(List1, Board) ++ "|" ++ list_to_colors2([?BLACK_OUT], Board),
  42. Str3 = "|" ++ list_to_checkers2(List1, Board) ++ "|" ++ list_to_checkers2([?BLACK_OUT], Board),
  43. Str5 = "|" ++ list_to_checkers2(List2, Board) ++ "|" ++ list_to_checkers2([?WHITE_OUT], Board),
  44. Str6 = "|" ++ list_to_colors2(List2, Board) ++ "|" ++ list_to_colors2([?WHITE_OUT], Board),
  45. [Str1, Str2, Str3, Str4, Str5, Str6, Str7].
  46. board_to_text3(Board) ->
  47. ["(" ++ checker(?WHITE_OUT, Board)++ ")" ++ checker(?BLACK_BAR, Board) ++
  48. "|" ++ quater(1, 6, Board) ++ "|" ++ quater(7, 12, Board) ++ "|" ++
  49. quater(13, 18, Board) ++ "|" ++ quater(19, 24, Board) ++ "|" ++
  50. checker(?WHITE_BAR, Board) ++ "(" ++ checker(?BLACK_OUT, Board) ++ ")"].
  51. board_to_text4(Board) ->
  52. Str1 = "|xoxoxo+-+xoxoxo| ",
  53. Str4 = "|------|+|------| ",
  54. Str7 = "|xoxoxo+-+xoxoxo| ",
  55. List1 = [13, 14, 15, 16, 17, 18],
  56. List2 = [19, 20 ,21, 22, 23, 24],
  57. List3 = [12, 11, 10, 09, 08, 07],
  58. List4 = [06, 05 ,04, 03, 02, 01],
  59. Str2 = "|" ++ list_to_colors2(List1, Board) ++ "|" ++ list_to_colors2([?BLACK_BAR], Board) ++ "|" ++ list_to_colors2(List2, Board) ++ "|" ++ list_to_colors2([?BLACK_OUT], Board),
  60. Str3 = "|" ++ list_to_checkers2(List1, Board) ++ "|" ++ list_to_checkers2([?BLACK_BAR], Board) ++ "|" ++ list_to_checkers2(List2, Board) ++ "|" ++ list_to_checkers2([?BLACK_OUT], Board),
  61. Str5 = "|" ++ list_to_checkers2(List3, Board) ++ "|" ++ list_to_checkers2([?WHITE_BAR], Board) ++ "|" ++ list_to_checkers2(List4, Board)++ "|" ++ list_to_checkers2([?WHITE_OUT], Board),
  62. Str6 = "|" ++ list_to_colors2(List3, Board) ++ "|" ++ list_to_colors2([?WHITE_BAR], Board) ++ "|" ++ list_to_colors2(List4, Board)++ "|" ++ list_to_colors2([?WHITE_OUT], Board),
  63. [Str1, Str2, Str3, Str4, Str5, Str6, Str7].
  64. get_checkers(Pos, Board) ->
  65. {_, Value} = lists:keyfind(Pos, 1, Board),
  66. Value.
  67. %%
  68. %% Local Functions
  69. %%
  70. list_to_checkers(List, Board) ->
  71. F = fun(Pos) ->
  72. case get_checkers(Pos, Board) of
  73. empty -> " ";
  74. {_, Num} -> io_lib:format("~2b ", [Num])
  75. end
  76. end,
  77. lists:flatmap(F, List).
  78. list_to_colors(List, Board) ->
  79. F = fun(Pos) ->
  80. case get_checkers(Pos, Board) of
  81. empty -> " ";
  82. {?WHITE, _} -> " W ";
  83. {?BLACK, _} -> " B "
  84. end
  85. end,
  86. lists:flatmap(F, List).
  87. list_to_checkers2(List, Board) ->
  88. F = fun(Pos) ->
  89. case get_checkers(Pos, Board) of
  90. empty -> " ";
  91. {_, Num} -> io_lib:format("~.16b", [Num])
  92. end
  93. end,
  94. lists:flatmap(F, List).
  95. list_to_colors2(List, Board) ->
  96. [case get_checkers(Pos, Board) of
  97. empty -> " ";
  98. {?WHITE, _} -> "W";
  99. {?BLACK, _} -> "B"
  100. end || Pos <- List].
  101. checker(Pos, Board) ->
  102. case get_checkers(Pos, Board) of
  103. empty -> " ";
  104. {?WHITE, Num} -> "W" ++ io_lib:format("~.16b", [Num]);
  105. {?BLACK, Num} -> "B" ++ io_lib:format("~.16b", [Num])
  106. end.
  107. quater(First, Last, Board)->
  108. F = fun(Pos) -> "-" ++ checker(Pos, Board) end,
  109. lists:flatmap(F, lists:seq(First, Last)) ++ "-".