From 1cc3d9f3c7ae306e1701e67189fd8235343d0b9f Mon Sep 17 00:00:00 2001 From: Qeubd-Bsjso Date: Sat, 6 Mar 2021 18:40:19 +0530 Subject: [PATCH 1/2] added Awari.java and AwariGame.java --- 04 Awari/java/Awari.java | 183 +++++++++++++++++++++++++++++++++++ 04 Awari/java/AwariGame.java | 5 + 2 files changed, 188 insertions(+) create mode 100644 04 Awari/java/Awari.java create mode 100644 04 Awari/java/AwariGame.java diff --git a/04 Awari/java/Awari.java b/04 Awari/java/Awari.java new file mode 100644 index 00000000..3238d4de --- /dev/null +++ b/04 Awari/java/Awari.java @@ -0,0 +1,183 @@ +import java.util.Scanner; +import java.util.Random; + +public class Awari{ + int []board; + private final int playerPits; + private final int computerPits; + private final int playerHome; + private final int computerHome; + Scanner input; + int sumPlayer; + int sumComputer; + Awari(){ + input = new Scanner(System.in); + playerPits = 0; + computerPits = 7; + playerHome = 6; + computerHome = 13; + sumPlayer = 18; + sumComputer = 18; + board = new int [14]; + for (int i=0;i<6;i++){ + board[playerPits+i]=3; + board[computerPits+i]=3; + } + System.out.println(" AWARI"); + System.out.println("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + printBoard(); + playerMove(true); + } + + private void printBoard(){ + System.out.print("\n "); + for (int i=0;i<6;i++){ + System.out.print(String.format("%2d",board[12-i])); + System.out.print(" "); + } + System.out.println(""); + System.out.print(String.format("%2d",board[computerHome])); + System.out.print(" "); + System.out.println(String.format("%2d",board[playerHome])); + System.out.print(" "); + for(int i=0;i<6;i++){ + System.out.print(String.format("%2d",board[playerPits+i])); + System.out.print(" "); + } + System.out.println(""); + } + + private void playerMove(boolean val){ + if(val == true) + System.out.print("YOUR MOVE? "); + else + System.out.print("AGAIN? "); + int move = input.nextInt(); + while(move<1||move>6||board[move-1]==0){ + System.out.print("INVALID MOVE!!! TRY AGAIN "); + move = input.nextInt(); + } + int seeds = board[move-1]; + board[move-1] = 0; + sumPlayer -= seeds; + int last_pos = distribute(seeds,move); + if(last_pos == playerHome){ + printBoard(); + playerMove(false); + } + else if(board[last_pos] == 1&&last_pos != computerHome){ + int opp = calculateOpposite(last_pos); + board[last_pos]+=board[opp]; + board[opp] = 0; + printBoard(); + if(isGameOver()){ + System.exit(0); + } + computerMove(true); + } + else{ + printBoard(); + if(isGameOver()){ + System.exit(0); + } + computerMove(true); + } + } + + private void computerMove(boolean value){ + int val=-1; + for(int i=0;i<6;i++){ + if(6-i == board[computerPits+i]) + val = i; + } + int move ; + if(val == -1) + { + Random random = new Random(); + move = random.nextInt(6)+computerPits; + while(board[move] == 0){ + move = random.nextInt(6)+computerPits; + } + if(value == true) + System.out.println(String.format("MY MOVE IS %d ",move-computerPits+1)); + else + System.out.println(String.format(",%d",move-computerPits+1)); + int seeds = board[move]; + board[move] = 0; + sumComputer-=seeds; + int last_pos = distribute(seeds,move+1); + if(board[last_pos] == 1&&last_pos != playerHome){ + int opp = calculateOpposite(last_pos); + board[last_pos]+=board[opp]; + board[opp] = 0; + printBoard(); + if(isGameOver()){ + System.exit(0); + } + } + else{ + printBoard(); + if(isGameOver()){ + System.exit(0); + } + } + playerMove(true); + } + else { + move = val+computerPits; + if(value == true) + System.out.print(String.format("MY MOVE IS %d",move-computerPits+1)); + else + System.out.print(String.format(",%d",move-computerPits+1)); + int seeds = board[move]; + board[move] = 0; + sumComputer-=seeds; + int last_pos = distribute(seeds,move+1); + if(last_pos == computerHome){ + if(isGameOver() ){ + System.exit(0); + } + computerMove(false); + } + } + } + + + private int distribute(int seeds, int pos){ + while(seeds!=0){ + if(pos==14) + pos=0; + if(pos<6) + sumPlayer++; + else if(pos>6&&pos<13) + sumComputer++; + board[pos]++; + pos++; + seeds--; + } + return pos-1; + } + + private int calculateOpposite(int pos){ + return 12-pos; + } + + private boolean isGameOver(){ + if(sumPlayer == 0 || sumComputer == 0){ + System.out.println("GAME OVER"); + if(board[playerHome]>board[computerHome]){ + System.out.println(String.format("YOU WIN BY %d POINTS",board[playerHome]-board[computerHome])); + } + else if(board[playerHome] Date: Sat, 6 Mar 2021 19:13:11 +0530 Subject: [PATCH 2/2] Debugging in Awari.java --- 04 Awari/java/Awari.java | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/04 Awari/java/Awari.java b/04 Awari/java/Awari.java index 3238d4de..058daa11 100644 --- a/04 Awari/java/Awari.java +++ b/04 Awari/java/Awari.java @@ -48,6 +48,7 @@ public class Awari{ } private void playerMove(boolean val){ + System.out.println("\nComputerSum PlayerSum"+sumComputer+" "+sumPlayer); if(val == true) System.out.print("YOUR MOVE? "); else @@ -63,21 +64,32 @@ public class Awari{ int last_pos = distribute(seeds,move); if(last_pos == playerHome){ printBoard(); + if(isGameOver(true)){ + System.exit(0); + } playerMove(false); } else if(board[last_pos] == 1&&last_pos != computerHome){ int opp = calculateOpposite(last_pos); + if(last_pos<6){ + sumPlayer+=board[opp]; + sumComputer-=board[opp]; + } + else{ + sumComputer+=board[opp]; + sumPlayer-=board[opp]; + } board[last_pos]+=board[opp]; board[opp] = 0; printBoard(); - if(isGameOver()){ + if(isGameOver(false)){ System.exit(0); } computerMove(true); } else{ printBoard(); - if(isGameOver()){ + if(isGameOver(false)){ System.exit(0); } computerMove(true); @@ -86,6 +98,7 @@ public class Awari{ private void computerMove(boolean value){ int val=-1; + System.out.println("\nComputerSum PlayerSum"+sumComputer+" "+sumPlayer); for(int i=0;i<6;i++){ if(6-i == board[computerPits+i]) val = i; @@ -108,16 +121,24 @@ public class Awari{ int last_pos = distribute(seeds,move+1); if(board[last_pos] == 1&&last_pos != playerHome){ int opp = calculateOpposite(last_pos); + if(last_pos<6){ + sumPlayer+=board[opp]; + sumComputer-=board[opp]; + } + else{ + sumComputer+=board[opp]; + sumPlayer-=board[opp]; + } board[last_pos]+=board[opp]; board[opp] = 0; printBoard(); - if(isGameOver()){ + if(isGameOver(false)){ System.exit(0); } } else{ printBoard(); - if(isGameOver()){ + if(isGameOver(false)){ System.exit(0); } } @@ -134,7 +155,7 @@ public class Awari{ sumComputer-=seeds; int last_pos = distribute(seeds,move+1); if(last_pos == computerHome){ - if(isGameOver() ){ + if(isGameOver(true) ){ System.exit(0); } computerMove(false); @@ -162,8 +183,10 @@ public class Awari{ return 12-pos; } - private boolean isGameOver(){ + private boolean isGameOver(boolean show){ if(sumPlayer == 0 || sumComputer == 0){ + if(show) + printBoard(); System.out.println("GAME OVER"); if(board[playerHome]>board[computerHome]){ System.out.println(String.format("YOU WIN BY %d POINTS",board[playerHome]-board[computerHome]));