Skip to content

add start game

vsevolod Oc requested to merge game into main

import java.util.Random; import java.util.Scanner;

public class Durak { public enum Player { HUMAN("Человек"), COMPUTER("Компьютер");

    final String value;

    Player(String value) {
        this.value = value;
    }
}

public enum CardSuit {
    HEARTS("Червы"),//Червы
    DIAMONDS("Бубны"),//Бубны
    CLUBS("Трефы"),//Трефы
    SPADES("Пики");//Пики

    final String suit;

    CardSuit(String suit) {
        this.suit = suit;
    }

}

public enum CardRank {
    SIX("6"),
    SEVEN("7"),
    EIGHT("8"),
    NINE("9"),
    TEN("10"),
    JACK("Валет"),
    QUEEN("Дама"),
    KING("Король"),
    ACE("Туз");

    final String rank;

    CardRank(String rank) {
        this.rank = rank;
    }
}

public enum GameState {
    START("Начало"),//начало
    IN_PROGRESS("В процессе"),//время игры
    FINISHED("Конец");//конец

    final String state;

    GameState(String state) {
        this.state = state;
    }
}

public static void main(String[] args) {
    String greetingMessage = """
            "Дурак" — карточная игра для двоих игроков, в которой цель — избавиться от всех своих
            "карт. Игроки по очереди делают ходы, используя карты из своей руки. Игра продолжается
            "до тех пор, пока один из игроков не останется с картами.
            """;
    System.out.println(greetingMessage);

    int cardsPlayer = 6;

    GameState globalState = GameState.START;

    int allCards = CardSuit.values().length * CardRank.values().length;

    String[] totalDeck = new String[allCards];//иницилизация колоды
    int index = 0;
    for (CardRank rank : CardRank.values()) {
        for (CardSuit suit : CardSuit.values()) {
            totalDeck[index++] = rank.rank + " " + suit.suit;
        }
    }
    //перетасовка колоды
    for (int k = 0; k < allCards; k++) {
        int r = k + (int) (Math.random() * (allCards - k)); // случайная карта в колоде
        String temp = totalDeck[r];
        totalDeck[r] = totalDeck[k];
        totalDeck[k] = temp;
    }

    // раздача карт игроку и компьютеру
    String[] playerDeck = new String[cardsPlayer];
    String[] compDeck = new String[cardsPlayer];
    for (int i = 0; i < cardsPlayer; i++) {
        playerDeck[i] = totalDeck[i];
        compDeck[i] = totalDeck[cardsPlayer + i];
        totalDeck[i] = null;
        totalDeck[cardsPlayer + i] = null;
    }

    // определение того, кто ходит первый
    Random random = new Random();
    CardSuit trumpSuit = CardSuit.values()[random.nextInt(CardSuit.values().length)]; // Случайный козырь
    System.out.println("Козырь: " + trumpSuit.suit);

    boolean isPlayerFirst = random.nextBoolean();
    System.out.println("Первый ходит игрок " + (isPlayerFirst ? Player.HUMAN : Player.COMPUTER));
    System.out.println();

    // вывод карт игрока
    System.out.println("Ваши карты:");
    for (int i = 0; i < cardsPlayer; i++) {
        System.out.print(playerDeck[i] + ", ");
    }

    GameState gameStatus = GameState.IN_PROGRESS;
    while (gameStatus == GameState.IN_PROGRESS) {
        //ход игрока
        if (isPlayerFirst) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("Введите название карты из вашей колоды,чтобы сделать ход: ");
            String cardIndex = scanner.nextLine();

            boolean foundCard = false;
            for (int i = 0; i < cardsPlayer; i++) {
                if (playerDeck[i] != null && playerDeck[i].equalsIgnoreCase(cardIndex.trim())) {
                    playerDeck[i] = null;
                    foundCard = true;
                    isPlayerFirst = false;//переход
                    break;
                }
            }if (!foundCard){
                System.out.println("Нет такой карты");

            }
            // в конце проверяем, у кого колода пустая - тот и победитель
        } else {//отбив от пк
            if (lastDiscardedCard != null) {
                boolean canDefend = false;

                for (int i = 0; i < cardsPlayer; i++) {
                    if (compDeck[i] != null) {
                        String card1Rank = compDeck[i].substring(0, compDeck[i].indexOf(' '));
                        String card1Suit = compDeck[i].substring(compDeck[i].indexOf(' ') + 1);
                        String card2Rank = lastDiscardedCard.substring(0, lastDiscardedCard.indexOf(' '));
                        String card2Suit = lastDiscardedCard.substring(lastDiscardedCard.indexOf(' ') + 1);
                        if (card1Suit.equals(trumpSuit.suit) && !card2Suit.equals(trumpSuit.suit)) {
                            canDefend = true;
                        } else if (card1Suit.equals(card2Suit)) {
                            switch (card1Rank) {
                                case "6":
                                    if (card2Rank.equals("7") || card2Rank.equals("8") || card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "7":
                                    if (card2Rank.equals("8") || card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "8":
                                    if (card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "9":
                                    if (card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "10":
                                    if (card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Валет":
                                    if (card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Дама":
                                    if (card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Король":
                                    if (card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Туз":
                                    canDefend = true;
                                    break;
                                default:
                                    break;
                            }
                        } else if (card1Suit.equals(trumpSuit.suit) && card2Suit.equals(trumpSuit.suit)) {
                            switch (card1Rank) {
                                case "6":
                                    if (card2Rank.equals("7") || card2Rank.equals("8") || card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "7":
                                    if (card2Rank.equals("8") || card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "8":
                                    if (card2Rank.equals("9") || card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "9":
                                    if (card2Rank.equals("10") || card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "10":
                                    if (card2Rank.equals("Валет") || card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Валет":
                                    if (card2Rank.equals("Дама") || card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Дама":
                                    if (card2Rank.equals("Король") || card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Король":
                                    if (card2Rank.equals("Туз")) {
                                        canDefend = true;
                                    }
                                    break;
                                case "Туз":
                                    canDefend = true;
                                    break;
                                default: 
                                    break;
                            }
                        }
                    }
                }
            }
        }
    }
}

}

Edited by vsevolod Oc

Merge request reports