Gra tic tac toe

0

Cześć, robię prostą grę w kółko i krzyżyk. Wiem, że jest wiele niedociągnięć ale jedyne czego mi brakuje na ten moment aby zadanie było skończone to jakiś mechanizm inteligentnego komputera. Czyli jeśli my jako gracz postawimy dwa X w ciągu to komputer nam odpowie i postawi O.

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

public class Main {

    public static void main(String[] args) {
        // kolko krzyzyk
        //
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        int wyborYKomputer = 0;
        int wyborXKomputer = 0;
        int wyborY = 0;
        int wyborX = 0;
        int iloscX = 0;

        char[][] plansza = new char[3][3];
        for (int i = 0; i < plansza.length; i++) {
            for (int x = 0; x < plansza.length; x++) {
                plansza[i][x] = '_';
            }
        }

        for (int z = 0; z <= 9; z++) {
            wyborYKomputer = random.nextInt(3);
            wyborXKomputer = random.nextInt(3);


            if (plansza[wyborYKomputer][wyborXKomputer] != 'o' && plansza[wyborYKomputer][wyborXKomputer] != 'x') {
                plansza[wyborYKomputer][wyborXKomputer] = 'o';
            }


            System.out.print("Wybierz wspolrzedne dla swojego krzyzyka Y ");
            wyborY = scanner.nextInt();
            System.out.print("Wybierz wspolrzedne dla swojego krzyzyka X ");
            wyborX = scanner.nextInt();
            if (plansza[wyborY][wyborX] != 'o' && plansza[wyborY][wyborX] != 'x')
                plansza[wyborY][wyborX] = 'x';

            for (int i = 0; i < 3; i++) {
                if (plansza[i][0] == plansza[i][1] && plansza[i][1] == plansza[i][2] && plansza[i][0] != '_') {
                    System.out.println("Wygral gracz " + plansza[i][0]);
                }
            }
            for (int j = 0; j < 3; j++) {
                if (plansza[0][j] == plansza[1][j] && plansza[1][j] == plansza[2][j] && plansza[0][j] != '_') {
                    System.out.println("Wygral gracz " + plansza[0][j]);
                }
            }
            if (plansza[0][0] == plansza[1][1] && plansza[1][1] == plansza[2][2] && plansza[0][0] != '_') {
                System.out.println("Wygral gracz " + plansza[0][0]);

            }
            if (plansza[2][0] == plansza[1][1] && plansza[1][1] == plansza[0][2] && plansza[2][0] != '_') {
                System.out.println("Wygral gracz " + plansza[2][0]);
            }





            for (int i = 0; i < 3; i++) {
                if (plansza[i][0] == plansza[i][1] && plansza[i][1] == plansza[i][2] && plansza[i][0] != '_') {
                    System.out.println("Wygral gracz " + plansza[i][0]);
                }
            }
            for (int j = 0; j < 3; j++) {
                if (plansza[0][j] == plansza[1][j] && plansza[1][j] == plansza[2][j] && plansza[0][j] != '_') {
                    System.out.println("Wygral gracz " + plansza[0][j]);
                }
            }
            if (plansza[0][0] == plansza[1][1] && plansza[1][1] == plansza[2][2] && plansza[0][0] != '_') {
                System.out.println("Wygral gracz " + plansza[0][0]);

            }
            if (plansza[2][0] == plansza[1][1] && plansza[1][1] == plansza[0][2] && plansza[2][0] != '_') {
                System.out.println("Wygral gracz " + plansza[2][0]);
            }

       

            for (int i = 0; i < plansza.length; i++) {
                for (int x = 0; x < plansza[i].length; x++) {
                    System.out.print(plansza[i][x] + " ");
                }
                System.out.println();
            }




        }

    }
}
2

Jaki brzydki main()

Cokolwiek będziesz chciał zrobić, w/w styl ci utrudni

Np GDYBYŚ miał wydzieloną metodę ruch(pozycja, figura) to by już było w pół drogi do "inteligentnego komputera"

Dodatkowo:

  • powtarzające się stałe np 'o' wydzielić do zadeklarowanych (ja bym użył enum, ale to krok w stronę 'pro')
  • metoda oceniająca wygraną

A pełnia szczęścia to klasa, która ma stan gry w sobie itd...

1

jedyne czego mi brakuje

Oj nie jedyne. Tak to napisałeś że ciężko będzie sensownie coś użytecznego tam dodać. Ja np. podszedłbym do tego na takiej zasadzie ze robisz metodę findBestMove która wyszukuje najlepszą pozycje do postawienia X albo O (czyli np. jeśli są już dwa obok siebie to zajdzie tą sytuacje). I teraz jako komputer puszczasz tą funkcje 2 razy -> raz szukasz czy przeciwnik ma wygrywający ruch w następnej kolejce i wtedy sam wykonujesz ten ruch żeby blokować, a drugi raz puszczasz tą funkcje zeby sprawdzić najlepszy ruch dla siebie (czyli postawienie 3 obok jednego albo dwóch istniejących)

0

"jakiś mechanizm inteligentnego komputera" to nic innego jak algorytm MiniMax. Ja już takie kółko i krzyżyk napisałem jak coś to mogę pomóc. Na youtube mam filmik demonstracyjny prezentujący działanie gry zobacz sam https://youtu.be/aFcXP4k7s40

0

@Shalom: Dzięki za podpowiedź zrobiłem według Twojej podpowiedzi i działa :)

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