Gra tic tac toe

Gra tic tac toe
Hayyawo
  • Rejestracja:prawie 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:10
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.

Kopiuj
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();
            }




        }

    }
}
edytowany 1x, ostatnio: cerrato
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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...


Bo C to najlepszy język, każdy uczeń ci to powie
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska
  • Postów:82
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


Nieoszlifowany diament
Hayyawo
  • Rejestracja:prawie 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:10
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.