Guest User

Untitled

a guest
Jan 12th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. public void phaseChange(GamePhase previousPhase, GamePhase newPhase) {
  2. Set<GameMember> activeMembers = new HashSet<GameMember>();
  3. Set<GameMember> wantingDraw = new HashSet<GameMember>();
  4. Set<GameMember> wantingDefeat = new HashSet<GameMember>();
  5. Set<GameMember> wantingVictory = new HashSet<GameMember>();
  6.  
  7. /**
  8. * Check if we have active members, book those that miss deadlines, check if they are ready for defeat or draw
  9. */
  10. for (GameMember member : getMembers()) {
  11. if (!member.eliminated) {
  12. if (GameMember.STATE_HAS_ORDERS.equals(member.state)) {
  13. activeMembers.add(member);
  14. if (GameMember.INTENT_DRAW.equals(member.intent)) {
  15. wantingDraw.add(member);
  16. } else if (GameMember.INTENT_DEFEAT.equals(member.intent)) {
  17. wantingDefeat.add(member);
  18. } else if (GameMember.INTENT_VICTORY.equals(member.intent)) {
  19. wantingVictory.add(member);
  20. } else {
  21. throw new RuntimeException("Unknown intent for " + member);
  22. }
  23. } else {
  24. Account.missedDeadline(member.email);
  25. }
  26. }
  27. }
  28.  
  29. /**
  30. * Check if we need to finish
  31. */
  32. if (getWorld().getLastTurnState().isEnded()) {
  33. /**
  34. * We have an official winner according to the adjudicator
  35. */
  36. state = Game.STATE_FINISHED;
  37. if (getWorld().getVictoryConditions().winner != null) {
  38. GameMember winner = getMemberByPower(getWorld().getVictoryConditions().winner.getName());
  39. winner.winner = true;
  40. winner.save();
  41. }
  42. } else if (activeMembers.size() == 0) {
  43. /**
  44. * We have no more active members.
  45. */
  46. state = Game.STATE_FINISHED;
  47. new GameResult(previousPhase, "Game has no more active members. Finished.").save();
  48. } else if (activeMembers.size() == 1) {
  49. /**
  50. * Only one active member left.
  51. */
  52. GameMember winner = new ArrayList<GameMember>(activeMembers).get(0);
  53. winner.winner = true;
  54. winner.save();
  55.  
  56. state = Game.STATE_FINISHED;
  57. new GameResult(previousPhase, winner.power + " is only member left and wins. Finished.").save();
  58. } else if (wantingDefeat.size() == activeMembers().size()) {
  59. /**
  60. * Everyone gave up?
  61. */
  62. state = Game.STATE_FINISHED;
  63. new GameResult(previousPhase, "All members gave up simultaneously. Finished.").save();
  64. } else if (wantingDraw.size() == activeMembers.size()) {
  65. /**
  66. * Draw
  67. */
  68. StringBuffer memberNames = new StringBuffer();
  69. ArrayList<GameMember> members = new ArrayList<GameMember>(wantingDraw);
  70. for (int i = 0; i < members.size(); i++) {
  71. GameMember member = members.get(i);
  72. member.winner = true;
  73. member.save;
  74.  
  75. memberNames.append(member.power);
  76. if (i < members.size() - 2) {
  77. memberNames.append(", ");
  78. } else {
  79. memberNames.append(" and ");
  80. }
  81. }
  82.  
  83. state = Game.STATE_FINISHED;
  84. new GameResult(previousPhase, "Game ended in draw between " + memberNames + ". Finished.").save();
  85. } else if (wantingDefeat.size() == activeMembers.size() - 1) {
  86. /**
  87. * Everyone except one gave up
  88. */
  89. GameMember winner = null;
  90. if (wantingDraw.size() == 1) {
  91. winner = new ArrayList<GameMember>(wantingDraw).get(0);
  92. } else if (wantingVictory.size() == 1) {
  93. winner = new ArrayList<GameMember>(wantingVictory).get(0);
  94. } else {
  95. throw new RuntimeException("if all but one wants defeat, how the hell can both the number of wanting draw and the number of wanting victory != 1?");
  96. }
  97. winner.winner = true;
  98. winner.save();
  99. } else if (wantingVictory.size() == 0) {
  100. /**
  101. * Nobody wants to win
  102. */
  103. state = Game.STATE_FINISHED;
  104. new GameResult(previousPhase, "All members gave up or wanted a draw. Finished:").save();
  105. }
  106.  
  107. save();
  108. }
Add Comment
Please, Sign In to add comment