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]