From 2b1f252229dc13089757f4e27a89e09ade0e3274 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Sat, 8 Mar 2025 16:26:56 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 32 +++++++++++++++++++++----------- src/ai_player.erl | 4 ++-- src/game_core.erl | 27 ++++++++++++++------------- src/game_manager.erl | 2 +- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index f1c4554..0ad44f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,29 @@ -.rebar3 -_* .eunit *.o *.beam *.plt -*.swp -*.swo -.erlang.cookie -ebin -log erl_crash.dump +.concrete/DEV_MODE + +# rebar 2.x .rebar -logs -_build +rel/example_project +ebin/* +deps + +# rebar 3 +.rebar3 +_build/ +_checkouts/ +rebar.lock + +# idea .idea *.iml -rebar3.crashdump -*~ +cmake-build* +CMakeLists.txt + +# nif compile temp file +*.pdb +*.d +compile_commands.json \ No newline at end of file diff --git a/src/ai_player.erl b/src/ai_player.erl index e2928b0..b39c048 100644 --- a/src/ai_player.erl +++ b/src/ai_player.erl @@ -2,7 +2,7 @@ -behaviour(gen_server). -export([start_link/1, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --export([create_ai_player/1, play_turn/1, init/1]). +-export([create_ai_player/1, play_turn/1, new/1]). -record(state, { name, @@ -32,7 +32,7 @@ play_turn(AiPid) -> gen_server:cast(AiPid, play_turn). %% 初始化AI玩家 -init(Type) -> +new(Type) -> Name = generate_ai_name(), {ok, Pid} = start_link(Name), Difficulty = case Type of diff --git a/src/game_core.erl b/src/game_core.erl index f6c58b2..88b6750 100644 --- a/src/game_core.erl +++ b/src/game_core.erl @@ -1,5 +1,5 @@ -module(game_core). --export([start_game/3, play_cards/3, get_game_state/1, is_valid_play/2]). +-export([start_game/3, init_game_state/0, play_cards/3, get_game_state/1, is_valid_play/2]). -export([init_deck/0, deal_cards/1, get_card_type/1, compare_cards/2]). -record(game_state, { @@ -23,9 +23,9 @@ init_deck() -> deal_cards(Deck) -> {Players, Landlord} = lists:split(51, Deck), {lists:sublist(Players, 1, 17), - lists:sublist(Players, 18, 17), - lists:sublist(Players, 35, 17), - Landlord}. + lists:sublist(Players, 18, 17), + lists:sublist(Players, 35, 17), + Landlord}. %% 开始游戏 start_game(Player1, Player2, Player3) -> @@ -55,7 +55,7 @@ validate_play(GameState, PlayerPid, Cards) -> case get_player_cards(GameState, PlayerPid) of {ok, PlayerCards} -> has_cards(PlayerCards, Cards) andalso - is_valid_play(Cards, GameState#game_state.last_play); + is_valid_play(Cards, GameState#game_state.last_play); _ -> false end. @@ -104,8 +104,9 @@ analyze_complex_pattern(Cards) -> get_game_state(GameId) -> % 简单实现,实际应该从某种存储中获取 {ok, #game_state{}}. - %% 初始化游戏状态 - init_game_state() -> + +%% 初始化游戏状态 +init_game_state() -> % 创建一个空的游戏状态 #game_state{ players = [], @@ -126,7 +127,7 @@ is_valid_play(Cards, LastPlay) -> {ok, Type1, Value1} = get_card_type(Cards), {ok, Type2, Value2} = get_card_type(LastCards), (Type1 =:= Type2 andalso Value1 > Value2) orelse - (Type1 =:= bomb andalso Type2 =/= bomb) + (Type1 =:= bomb andalso Type2 =/= bomb) end. %% 判断牌型是否合法 @@ -153,9 +154,9 @@ assign_roles(PlayerCards, LandlordIdx) -> lists:map( fun({Idx, {Pid, Cards}}) -> Role = case Idx of - LandlordIdx -> landlord; - _ -> farmer - end, + LandlordIdx -> landlord; + _ -> farmer + end, {Pid, Cards, Role} end, lists:zip(lists:seq(1, length(PlayerCards)), PlayerCards) @@ -167,7 +168,7 @@ update_game_state(GameState, PlayerPid, Cards) -> UpdatedPlayers = lists:map( fun({Pid, PlayerCards, Role}) when Pid =:= PlayerPid -> {Pid, PlayerCards -- Cards, Role}; - (Player) -> Player + (Player) -> Player end, GameState#game_state.players ), @@ -287,7 +288,7 @@ is_straight(Cards) -> Values = [card_value(Card) || Card <- Cards], SortedValues = lists:sort(Values), length(SortedValues) >= 5 andalso - lists:max(SortedValues) =< 14 andalso % A以下的牌才能组成顺子 + lists:max(SortedValues) =< 14 andalso % A以下的牌才能组成顺子 SortedValues =:= lists:seq(hd(SortedValues), lists:last(SortedValues)). %% 分析其他牌型 diff --git a/src/game_manager.erl b/src/game_manager.erl index 4ff197a..777ecb6 100644 --- a/src/game_manager.erl +++ b/src/game_manager.erl @@ -73,7 +73,7 @@ end_game(GameManagerState) -> %% 初始化AI玩家 initialize_ai_players() -> % 创建不同类型的AI玩家 - BasicAI = ai_player:init(basic), + BasicAI = ai_player:new(basic), AdvancedAI = advanced_ai_player:init(advanced), % 返回AI玩家列表