{"rsdb":{"rid":"193324","subhead":"","postdate":"0","aid":"137819","fid":"88","uid":"1","topic":"1","content":"
\n

\u4e0a\u56de\u4ecb\u7ecd\u4e86\u73a9\u6cd5\uff0c\u73b0\u5728\u7f16\u5199\u4e86\u73a9\u6cd5\u7684\u7b80\u5355\u5efa\u6a21\u3002<\/p> \n

\u505a\u5230\u73b0\u5728\u611f\u89c9\u76ee\u524d\u8fd8\u6ca1\u6709\u4f7f\u7528umbrella\u7684\u5fc5\u8981(\u4e5f\u8bb8\u4ee5\u540e\u4f1a\u53d1\u73b0\u5fc5\u8981\u5427\uff09\uff0cmodel \u5e94\u7528\u5b8c\u5168\u53ef\u4ee5\u5408\u5e76\u5230game_server\u3002<\/p> \n

\u4ee3\u7801\u8fd8\u5728https:\/\/github.com\/rubyist1982\/simple \u4e0a\u3002<\/p> \n

model \u5e94\u7528\u65b0\u589e simple_poker.ex , \u4ee3\u7801\u4e0d\u591a\uff0c\u505a\u4e86\u70b9\u7b80\u5355\u6ce8\u91ca\uff0c\u53ef\u4ee5\u8d34\u4e0b<\/p> \n

\n \"\"\n \"\" \n
\n
defmodule SimplePoker do\r\n    @cards  <\/span>for<\/span> i <- 1..4, j<- 1..13, do: {i, j}\r\n    @ten <\/span>10\r\n    @ace <\/span>1\r\n    @tian_gong [<\/span>8,9]\r\n    @ignore 0\r\n    <\/span>def<\/span> init_cards, do: @cards\r\n    <\/span>#<\/span> \u6d17\u724c<\/span>\r\n    def<\/span> shuffle(cards), do: cards |> Enum.shuffle\r\n\r\n    <\/span>#<\/span> \u521d\u59cb\u53d1\u724c<\/span>\r\n    def<\/span> init_deal(cards, seat_num) do\r\n        {cs, left} <\/span>= cards |> Enum.split(seat_num * 2)\r\n        {:ok, Enum.chunk_every(cs, <\/span>2), left}\r\n    end\r\n\r\n    <\/span>#<\/span> \u8865\u5355\u5f20<\/span>\r\n    def<\/span> deal([card| left]), do: {:ok, card, left} \r\n\r\n    <\/span>def<\/span> single_point({_, p}) when p < @ten, do: p\r\n    <\/span>def<\/span> single_point(_), do: @ten\r\n    \r\n    <\/span>def<\/span> normal_power(cards) do\r\n        sum <\/span>= cards |> Enum.map( &single_point(&1) ) |> Enum.sum \r\n        rem(sum, @ten)\r\n    end\r\n    <\/span>#<\/span> \u724c\u529b\u8ba1\u7b97, \u9700\u53c2\u8003\u662f\u5426\u5f00\u724c<\/span>\r\n    def<\/span> power([_a, _b] = cards, is_open) do\r\n        p <\/span>= normal_power(cards)\r\n        cond do\r\n            p <\/span>in<\/span> @tian_gong and<\/span> is_open -> {:tian_gong, p}\r\n            true <\/span>->{:normal, p}\r\n        end\r\n    end\r\n\r\n    <\/span>def<\/span> power(cards, false) do\r\n        cond do\r\n            is_flush_straight?(cards) <\/span>-> {:flush_straight, @ignore}\r\n            is_three?(cards) <\/span>-> {:three, @ignore}\r\n            is_flush?(cards) <\/span>-> {:flush, @ignore}\r\n            is_straight?(cards) <\/span>-> {:straight, @ignore}\r\n            true <\/span>-> {:normal, normal_power(cards)}\r\n        end    \r\n    end\r\n\r\n    <\/span>#<\/span> a \u662f\u5426\u8d62 b<\/span>\r\n    #<\/span> \u90fd\u662f\u5929\u516c\uff0c\u6bd4\u70b9\u6570<\/span>\r\n    def<\/span> win?({:tian_gong, p1}, {:tian_gong, p2}), do: p1 > p2\r\n    <\/span>#<\/span> \u5929\u516c\u6bd4\u5176\u4ed6\u90fd\u5927<\/span>\r\n    def<\/span> win?({:tian_gong, _}, _), do: true\r\n    <\/span>def<\/span> win?(_, {:tian_gong, _}), do: false\r\n\r\n    <\/span>#<\/span> \u975e\u666e\u901a\u724c\uff0c\u901a\u724c\u578b\u4e00\u6837\u5927<\/span>\r\n    def<\/span> win?({same, _}, {same, _}) when same != :normal, do: false\r\n    <\/span>#<\/span> \u540c\u82b1\u987a\u6bd4\u4f59\u4e0b\u90fd\u5927, \u4ee5\u4e0b\u7c7b\u63a8<\/span>\r\n    def<\/span> win?({:flush_straight, _}, _), do: true\r\n    <\/span>def<\/span> win?(_, {:flush_straight, _}), do: false\r\n    <\/span>def<\/span> win?({:three, _}, _), do: true\r\n    <\/span>def<\/span> win?(_, {:three, _}), do: false\r\n    <\/span>def<\/span> win?({:flush, _}, _), do: true\r\n    <\/span>def<\/span> win?(_, {:flush, _}), do: false\r\n    <\/span>def<\/span> win?({:straight, _}, _), do: true\r\n    <\/span>def<\/span> win?(_, {:straight, _}), do: false \r\n    <\/span>#<\/span> \u666e\u901a\u724c\u9700\u8981\u6bd4\u8f83\u70b9\u6570<\/span>\r\n    def<\/span> win?({:normal, p1}, {:normal, p2}), do: p1 > p2\r\n\r\n    <\/span>#<\/span> \u8d62\u591a\u5c11\u500d<\/span>\r\n    def<\/span> multiply({:tian_gong, _}), do: 1\r\n    def<\/span> multiply({:flush_straight, _}), do: 16\r\n    def<\/span> multiply({:three, _}), do: 8\r\n    def<\/span> multiply({:flush, _}), do: 4\r\n    def<\/span> multiply({:straight, _}), do: 2\r\n    def<\/span> multiply({:normal, _}), do: 1\r\n\r\n\r\n    def<\/span> is_flush?([{s, _}, {s, _}, {s, _}]), do: true\r\n    <\/span>def<\/span> is_flush?(_), do: false\r\n\r\n    <\/span>def<\/span> is_straight?([{_, p1}, {_, p2}, {_, p3}]) do\r\n        [n1, n2, n3] <\/span>= [p1, p2, p3] |> Enum.sort \r\n         cond do\r\n             n1 <\/span>+ 1 == n2 and<\/span> n2 + 1 == n3 -> true\r\n             n1 <\/span>== @ace and<\/span> n2 + 1 == n3 -> true\r\n             n1 <\/span>== @ace and<\/span> n2 + 2  == n3 -> true    \r\n             true <\/span>-> false\r\n         end    \r\n    end\r\n\r\n    <\/span>def<\/span> is_three?([{_, p}, {_, p}, {_, p}]), do: true\r\n    <\/span>def<\/span> is_three?([{_, p1}, {_, p2}, {_, p3}]) do\r\n        case [p1, p2, p3] <\/span>|> Enum.sort do\r\n            [@ace, @ace, _] <\/span>-> true\r\n            [@ace, n, n] <\/span>-> true\r\n            _other <\/span>-> false\r\n        end\r\n    end\r\n\r\n    <\/span>def<\/span> is_flush_straight?(cards), do: is_flush?(cards) and<\/span> is_straight?(cards)\r\n\r\nend\r\n\r\n<\/span>#<\/span> SimplePoker.init_cards |> SimplePoker.shuffle |> IO.inspect<\/span>\r\n#<\/span> SimplePoker.init_cards |> SimplePoker.init_deal(2) |> IO.inspect<\/span><\/pre> \n  <\/div> \n  simple_poker.ex<\/span>\n <\/div> \n 

\u6d4b\u8bd5\u4ee3\u7801 simple_poker_test.exs<\/p> \n

\n \"\"\n \"\" \n
\n
defmodule SimplePokerTest do\r\n  use ExUnit.Case\r\n  doctest SimplePoker\r\n\r\n  setup do\r\n      <\/span>%{\r\n          s_ace: {<\/span>1,1},   #<\/span> \u9ed1\u6843A<\/span>\r\n          h_ace:  {2, 1}, #<\/span> \u7ea2\u6843A,<\/span>\r\n          c_ace: {3, 1},  #<\/span> \u6885\u82b1A<\/span>\r\n          s_two: {1, 2},  #<\/span> \u9ed1\u68432<\/span>\r\n          h_two: {2, 2},  #<\/span> \u7ea2\u68432<\/span>\r\n          c_two: {3, 2},  #<\/span> \u6885\u82b12<\/span>\r\n          s_three: {1, 3},  #<\/span> \u9ed1\u68433<\/span>\r\n          h_three: {2, 3}, #<\/span> \u7ea2\u68433<\/span>\r\n          s_four: {1, 4},  #<\/span> \u9ed1\u68434<\/span>\r\n          h_four: {2, 4},  #<\/span> \u7ea2\u68434<\/span>\r\n          s_five: {1, 5}, #<\/span> \u9ed1\u68435<\/span>\r\n          s_eight: {1, 8}, #<\/span> \u9ed1\u68438<\/span>\r\n          s_nine:","orderid":"0","title":"\u7b80\u5355Elixir\u6e38\u620f\u670d\u8bbe\u8ba1-\u73a9\u6cd5simple_poker(\u4e00)","smalltitle":"","mid":"0","fname":"Erlang","special_id":"0","bak_id":"0","info":"0","hits":"9348","pages":"3","comments":"0","posttime":"2017-10-11 13:59:19","list":"1507701559","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/article\/88\/1_jyuj6__.gif","ispic":"1","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"\u7b80\u5355<\/A> Elixir<\/A> \u6e38\u620f<\/A> \u8bbe\u8ba1<\/A> \u73a9\u6cd5<\/A> simple_poker<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"113.108.110.181","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"\u7b80\u5355Elixir\u6e38\u620f\u670d\u8bbe\u8ba1-\u73a9\u6cd5simple_poker","lastview":"1713397252","digg_num":"9720","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}