/army/hwh/info.erl

http://erlbattle.googlecode.com/ · Erlang · 57 lines · 45 code · 9 blank · 3 comment · 0 complexity · 89baf5331dacbdfd6679a13cd8a568e8 MD5 · raw file

  1. -module(hwh.info).
  2. -compile(export_all).
  3. -include("hwh_schema.hrl").
  4. -include("schema.hrl").
  5. start(Master, Side) ->
  6. process_flag(trap_exit, true),
  7. Tb = .ets:new(grid, [set, protected, {keypos, #grid_info.id}]),
  8. init(Tb),
  9. Master ! {grid, Tb},
  10. loop(Tb, Side, Master).
  11. %%?????3*3 ??????
  12. init(Tb) ->
  13. Grids = [{0,0}, {0,1}, {0,2},
  14. {1,0}, {1,1}, {1,2},
  15. {2,0}, {2,1}, {2,2}],
  16. .lists:foreach(fun(ID) -> .ets:insert(Tb, #grid_info{id=ID}) end,
  17. Grids).
  18. loop(Tb, Side, Master) ->
  19. reset(Tb),
  20. Enemys = .battlefield:get_soldier_by_side(util:enemy(Side)),
  21. update_grid(Tb, Enemys, #grid_info.enemy),
  22. Friends = .battlefield:get_soldier_by_side(Side),
  23. update_grid(Tb, Friends, #grid_info.friend),
  24. receive
  25. {'EXIT', Master, finish} -> ok;
  26. _ -> loop(Tb, Side, Master)
  27. after 1 -> loop(Tb, Side, Master)
  28. end.
  29. %% ????????????
  30. update_grid(Tb, Soldiers, Key) ->
  31. .lists:foreach(
  32. fun(S) ->
  33. {X, Y} = S#soldier.position,
  34. ID = {X div 5, Y div 5},
  35. [Info|_] = .ets:lookup(Tb, ID),
  36. NewSoldiers = [S#soldier.id|element(Key, Info)],
  37. .ets:update_element(Tb, ID, {Key, NewSoldiers})
  38. end,
  39. Soldiers).
  40. %% ??????
  41. reset(Tb) ->
  42. Grids = [{0,0}, {0,1}, {0,2},
  43. {1,0}, {1,1}, {1,2},
  44. {2,0}, {2,1}, {2,2}],
  45. .lists:foreach(fun(ID) -> .ets:update_element(Tb, ID, {#grid_info.friend, []}) end,
  46. Grids),
  47. .lists:foreach(fun(ID) -> .ets:update_element(Tb, ID, {#grid_info.enemy, []}) end,
  48. Grids).