Dwa warunki w pętli "while".

0

Witam,

Mam problem, chciałem napisać grę w Kamień, papier, nożyce.
Udało mi się częściowo zrobić ale gra nie kończy się w momencie w którym bym tego oczekiwał.
Założenie było takie że gra kończy się kiedy gracz wygrywa 3 razy lub przegrywa 3 razy, niestety gra kończy się dopiero w momencie kiedy gracz przegra i wygra 3 razy.
Myślałem żeby zrobić dwa warunki w pętli "while" po których gra miała by się zakończyć ale niestety chyba coś poszło nie tak.

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

public class PKN {

    public static void main(String[] args) {

        System.out.println("**************************");
        System.out.println("* PAPIER, KAMIEN, NOŻYCE *");
        System.out.println("**************************");
        System.out.println();

        int wygrana =0;
        int przegrana = 0;
        int remis = 0;

        Random pc = new Random();
        Scanner scanner = new Scanner(System.in);

        System.out.println("Opcje:");
        System.out.println("1 - Kamień");
        System.out.println("2 - Papier");
        System.out.println("3 - Nożyce");
        System.out.println();
        System.out.println("Twój wybór:");

        while (wygrana < 3 || przegrana <3 ){
            int gracz = scanner.nextInt();

            System.out.println(pc.nextInt(2) + 1);
            int komputer = pc.nextInt(2) + 1;

            switch (gracz) {
                case 1:
                    if (komputer == 1) {
                        System.out.println("Gracz: Kamień");
                        System.out.println("Komputer: Kamień");
                        System.out.println("Wynik: Remis!");
                        remis++;
                    } else if (komputer == 2) {
                        System.out.println("Gracz: Kamień");
                        System.out.println("Komputer: Papier");
                        System.out.println("Wynik: Wygrywa komputer!");
                        przegrana++;
                    } else {
                        System.out.println("Gracz: Kamień");
                        System.out.println("Komputer: Nożyce");
                        System.out.println("Wynik: Wygrywa gracz!");
                        wygrana++;
                    }
                    break;
                case 2:
                    if (komputer == 1) {
                        System.out.println("Gracz: Papier");
                        System.out.println("Komputer: Kamień");
                        System.out.println("Wynik: Wygrywa gracz!");
                        wygrana++;
                    } else if (komputer == 2) {
                        System.out.println("Gracz: Papier");
                        System.out.println("Komputer: Papier");
                        System.out.println("Wynik: Remis!");
                        remis++;
                    } else {
                        System.out.println("Gracz: Papier");
                        System.out.println("Komputer: Nożyce");
                        System.out.println("Wynik: Wygrywa komputer!");
                        przegrana++;
                    }
                    break;
                case 3:
                    if (komputer == 1) {
                        System.out.println("Gracz: Nożyce");
                        System.out.println("Komputer: Kamień");
                        System.out.println("Wynik: Wygrywa komputer!");
                        przegrana++;
                    } else if (komputer == 2) {
                        System.out.println("Gracz: Nożyce");
                        System.out.println("Komputer: Papier");
                        System.out.println("Wynik: Wygrywa gracz!");
                        wygrana++;
                    } else {
                        System.out.println("Gracz: Nożyce");
                        System.out.println("Komputer: Nożyce");
                        System.out.println("Wynik: Remis!");
                        remis++;
                    }
                    break;

            }
            System.out.println();
            System.out.println("Wygrana: " + wygrana);
            System.out.println("Przegrana: " + przegrana);
            System.out.println("Remis: " + remis);
            if (wygrana == 3) {
                System.out.println("WYGRAŁEŚ!");
            }
                else if (przegrana >= 3) {
                System.out.println("PRZEGRAŁEŚ!");
            }
                else {
                    System.out.println("Graj dalej");
            }


        }

    }
    }



Jestem początkujący i zapewne mnóstwo rzeczy zrobiłem na około. Nie chciałem szukać gotowców bo wolałbym jednak zrozumieć co robię.

1

Pomyśl o logice. Twoja pętla while działa podczas gdy wygrana jest mniejsza niż 3 lub przegrana jest mniejsza niż 3. Oznacza to, że nawet jeśli wygrana będzie miała wartość 3, to dalej jest drugi warunek spełniony tj. przegrana jest wciąż mniejsza niż 3.

screenshot-20210414130644.png

0

Dzięki wielkie za pomoc. Zrozumiałem i poprawiłem błąd w pętli. Wszystko działa już tak jak powinno.
Muszę teraz popracować żeby wyglądało to jakoś estetycznie i biorę się za pisanie kolejnego programiku. ;)

2

Moja rada: zacznij od przerobienia tego programu tak zeby dało się grać N tur a nie tylko 3. A potem zastanów się czy tak samo być pisał gdyby opcji było więcej niż 3 (np. papier kamień nożyce jaszczurka spock), bo teraz masz tam kupę duplikacji. Nie lepiej zdefiniować gdzieś co wygrywa z czym zamiast robić te dramatyczne case?

1 użytkowników online, w tym zalogowanych: 0, gości: 1