Untitled
unknown
java
2 years ago
9.4 kB
7
Indexable
import java.util.Random; import java.util.Scanner; public class Main { Player[] players; Field[] fields; public static void main(String[] args) { Main newRound = new Main(); newRound.start(); } public void initializeBoard() { char[][] board = new char[13][13]; // Inicjalizacja planszy całkowicie for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { board[i][j] = '-'; } } // Inicjalizacja pól do ruchu pionków int[][] movePositions = { {1,7}, {2,7},{3,7},{4,7},{5,7}, {5,8}, {5,9},{5,10}, {5,11}, {6,11}, {7,11}, {7,10}, {7,9}, {7,8},{7,7}, {8,7}, {9,7}, {10,7}, {11,7}, {11,6}, {11,5}, {10,5}, {9,5}, {8,5}, {7,5}, {7,4}, {7,3}, {7,2}, {7,1}, {6,1}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {4,5}, {3,5}, {2,5}, {1,5}, {1,6} }; fields = new Field[movePositions.length]; for (int i = 0; i < movePositions.length; i++) { int x = movePositions[i][0]; int y = movePositions[i][1]; fields[i] = new Field(x, y, i + 1); board[x][y] = 'X'; } // Dodawanie pionków do schowka dla każdego gracza for (Player player : players) { Pawn[] pawns = player.getPawns(); int[][] hidingPositions = getHidingPositions(player.getSymbol()); for (int[] position : hidingPositions) { int row = position[0]; int col = position[1]; board[row][col] = player.getSymbol(); } } // Wyświetlanie planszy for (int i = 0; i < 13; i++) { for (int j = 0; j < 13; j++) { System.out.print(board[i][j] + " "); } System.out.println(); } } private int[][] getHidingPositions(char playerSymbol) { switch (playerSymbol) { case 'a': return new int[][]{{1, 10}, {1, 11}, {2, 10}, {2, 11}}; case 'b': return new int[][]{{10, 10}, {10, 11}, {11, 10}, {11, 11}}; case 'c': return new int[][]{{10, 1}, {10, 2}, {11, 1}, {11, 2}}; case 'd': return new int[][]{{1, 1}, {1, 2}, {2, 1}, {2, 2}}; default: return new int[0][0]; } } public Field getFieldByNumber(int fieldNumber) { for (Field field : fields) { if (field.getFieldNumber() == fieldNumber) { return field; } } return null; // zwracamy null jeżeli nie znajdziemy pola o danym numerze } public void start() { Scanner scanner = new Scanner(System.in); System.out.println("Wprowadź liczbę graczy: "); int numberOfPlayers = scanner.nextInt(); players = new Player[numberOfPlayers]; for (int i = 0; i < numberOfPlayers; i++) { char playerSymbol = (char) ('a' + i); int startPoint = i * 10; players[i] = new Player(playerSymbol, startPoint); } initializeBoard(); playGame(); } public void playGame() { Random random = new Random(); Scanner scanner = new Scanner(System.in); //losowanie gracza ktory rozpocznie jako pierwszy System.out.println("Trwa losowanie kto zaczyna ..."); int firstPlayerIndex = random.nextInt(players.length); System.out.println("Rozpoczyna gracz " + players[firstPlayerIndex].getSymbol()); int currentPlayerIndex = firstPlayerIndex; boolean isGameFinished = false; // zmienna logiczna ktora wykorzystam w petli rozgrywki while (!isGameFinished) { Player currentPlayer = players[currentPlayerIndex]; int diceRoll = random.nextInt(6)+1; int moves = 0; // Jezeli obecny gracz ma wszystkie pionki w domku rzuca kostka do 3 rzutow while(currentPlayer.allPawnsAtHome() && diceRoll !=6 && moves < 3 ) { diceRoll = diceRoll(currentPlayer); moves++; } if (diceRoll == 6 && currentPlayer.allPawnsAtHome()) { currentPlayer.getOutFromHome(); } else { if (!(currentPlayer.allPawnsAtHome())) { System.out.println("Wybierz pole pionka, ktorym chcesz wykonac ruch: "); int pawnField = scanner.nextInt(); Pawn[] pawns = currentPlayer.getPawns(); Pawn selectedPawn = pawns[pawnField-1]; int newPosition = (selectedPawn.getPosition() + diceRoll) % 40; selectedPawn.incrementSteps(diceRoll); for (Player player : players) { for (Pawn pawn : player.getPawns()) { if (pawn.getPosition() == newPosition && pawn != selectedPawn) { pawn.setAtHome(true); pawn.setPosition(-1); break; } } } selectedPawn.setPosition(newPosition); } } if (currentPlayer.allPawnsFinished()) { isGameFinished = true; System.out.println("Gracz " + currentPlayer.getSymbol() + " wygrywa."); } currentPlayerIndex = (currentPlayerIndex + 1) % players.length; // Przełącz do następnego gracza } } public int diceRoll(Player player) { int roll = 0; Random random = new Random(); roll = random.nextInt(6)+1; System.out.println("Gracz " + player.getSymbol() + " rzucił " + roll); return roll; } } class Player { private char symbol; private int startPoint; private Pawn[] pawns; public Player(char playerSymbol, int playerStartPoint) { this.symbol = playerSymbol; this.startPoint = playerStartPoint; this.pawns = new Pawn[4]; createPawns(); } private void createPawns() { for (int i = 0; i < pawns.length; i++) { pawns[i] = new Pawn(symbol); } } public char getSymbol() { return symbol; } public int getStartPoint() { return startPoint; } public Pawn[] getPawns() { return pawns; } public boolean allPawnsAtHome() { for (Pawn pawn : pawns) { if (!pawn.isAtHome()) return false; } return true; } public void getOutFromHome() { for (Pawn pawn : pawns) { if (!pawn.isAtHome()) { pawn.setAtHome(false); pawn.setPosition(startPoint); break; } } } public boolean allPawnsFinished() { for (Pawn pawn : pawns) { if (!pawn.isInSafeZone()) // sprawdzamy, czy pionek jest w "domku" return false; } return true; } } class Pawn { private char symbol; private int position; private boolean isAtHome; private int stepsTaken; private boolean isFinished; private boolean isInSafeZone; public Pawn(char symbol) { this.symbol = symbol; this.position = -1; // pionek jest poza planszą na początku gry this.isAtHome = true; // pionek jest w domku na początku gry this.isInSafeZone = false; this.stepsTaken = 0; } public char getSymbol() { return symbol; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } public boolean isAtHome() { return isAtHome; } public void setAtHome(boolean isAtHome) { this.isAtHome = isAtHome; } public int getStepsTaken() { return stepsTaken; } public void incrementSteps(int steps) { stepsTaken += steps; if(stepsTaken == 40) { // jeśli pionek ma wejść do "domku" isInSafeZone = true; } } public boolean isInSafeZone() { return isInSafeZone; } } class Field { private int x; private int y; private int fieldNumber; public Field(int x, int y, int fieldNumber) { this.x = x; this.y = y; this.fieldNumber = fieldNumber; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getFieldNumber() { return fieldNumber; } public void setFieldNumber(int fieldNumber) { this.fieldNumber = fieldNumber; } }
Editor is loading...