Commit a5d68b1

mo <mo.khan@gmail.com>
2019-06-05 03:07:08
extract methods
1 parent e8771fc
Changed files (1)
src/Q2/RockPaperScissorsLizardSpock.java
@@ -27,49 +27,55 @@ public class RockPaperScissorsLizardSpock {
   }
 
   public void play(int player1, int player2) {
-    int player1Roll = random();
-    int player2Roll = random();
+    int player1Roll = 0;
+    int player2Roll = 0;
     int consecutiveWins = 0;
     int round = 0;
 
     this.puts("Staring a new game of Rock, paper, scissors, lizard, spock...");
     while (true) {
       round++;
+      player1Roll = random();
+      player2Roll = random();
       this.newline();
       this.puts("Round: %d", round);
-      this.puts("Player 1: %d", player1Roll);
-      this.puts("Player 2: %d", player2Roll);
+      this.puts("Player 1: %s", convert(player1Roll));
+      this.puts("Player 2: %s", convert(player2Roll));
 
       int winner = this.determineWinner(player1Roll, player2Roll);
-      this.puts("The winner of this round is player %d!", winner);
+      this.delcareRoundWinner(winner);
 
-      if (this.lastWinner == winner) {
-        this.consecutiveWins++;
-      } else {
-        this.lastWinner = winner;
-        this.consecutiveWins = 1;
-      }
+      this.incrementWinsFor(winner);
       this.puts("Player %d has %d consecutive wins.", this.lastWinner, this.consecutiveWins);
 
       if (this.consecutiveWins == 4) {
-        this.newline();
-        this.puts("***********************************");
-        this.puts("The winner of the game is player %d!", this.lastWinner);
-        this.puts("***********************************");
-        this.newline();
+        this.declareWinner();
         return;
       }
     }
   }
 
   public static String convert(int i) {
-    return String.format("Player %d", i);
+    switch (i) {
+      case ROCK:
+        return "rock";
+      case PAPER:
+        return "paper";
+      case SCISSORS:
+        return "scissor";
+      case LIZARD:
+        return "lizard";
+      case SPOCK:
+        return "spock";
+      default:
+        return "error";
+    }
   }
 
-  private int determineWinner(int player1Roll, int player2Roll) {
-    if (player1Roll > player2Roll) {
-      return PLAYER1;
-    }
+  public int determineWinner(int player1Roll, int player2Roll) {
+    if (player1Roll == player2Roll) return 0;
+    if (((player1Roll - player2Roll) % 5) < 3) return PLAYER1;
+
     return PLAYER2;
   }
 
@@ -81,6 +87,28 @@ public class RockPaperScissorsLizardSpock {
     System.out.println();
   }
 
+  private void declareWinner() {
+    this.newline();
+    this.puts("***********************************");
+    this.puts("The winner of the game is player %d!", this.lastWinner);
+    this.puts("***********************************");
+    this.newline();
+  }
+
+  private void incrementWinsFor(int winner) {
+    if (this.lastWinner == winner) {
+      this.consecutiveWins++;
+    } else if (winner > 0) {
+      this.lastWinner = winner;
+      this.consecutiveWins = 1;
+    }
+  }
+
+  private void delcareRoundWinner(int winner) {
+    if (winner == 0) this.puts("Player 1 and Player 2 tie!");
+    else this.puts("The winner of this round is player %d!", winner);
+  }
+
   public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
     RockPaperScissorsLizardSpock game = new RockPaperScissorsLizardSpock();