Stworzyłem grę kółko i krzyżyk ale mam problem i główkuje nad nim i nie mam pojęcia jak to poprawić otóż:

  1. Gra pyta tylko o położenie 1 znaku na planszy i dalej się zacina.
  2. Nie pokazuje planszy z dotychczasowymi wstawionymi znakami.

Proszę o pomoc mój kod:

////////// Ruch

public class Ruch {
    private char znak;
    private Punkt punkt;
    public Ruch (char znak, Punkt punkt){
        this.znak=znak;
        this.punkt=punkt;
    }
 
    char getZnak(){
        return this.znak;
    }
 
    public String toString() {
        return ("Znak: " +znak+" Punkt: "+punkt);
    }
 
    Punkt getPunkt(){
        return this.punkt;
    }
}

/////////////// punkt

public class Punkt {
    private int x;
    private int y;
 
    public Punkt(int x, int y) {
        this.x = x;
        this.y = y;
    }
 
    // toString, getX, getY
 
    public int getX() {
        return this.x;
    }
 
    public int getY() {
        return this.y;
    }
 
    public String toString(){
        return("Wspolrzedne punktu to:"+this.x+"oraz"+this.y);
    }
    // wyzeruj, przesuń
 
    void wyzeruj(){
        this.x=0;
        this.y=0;
    }
 
    void przesun(int m){
        this.x=this.x+m;
        this.y=this.y+m;
    }
    //wyzszy, na prawo
    boolean czyWyzszy(Punkt punkt){
        if (this.x>punkt.x){
        return false; } else {
            return true;
        }
    }
 
    boolean naPrawo(Punkt punkt){
        if (this.y>punkt.y){
        return false; } else {
            return true;
        }
    }
 
}

klasa plansza ////////////////

public class Plansza {
    int[][] pola = { { '-', 'O', 'X' }, { 'O', 'X', '-' }, { 'X', '-', 'O' } };
    int liczbaWolnychPol;
 
    public Plansza(int[][] pola) {
        this.pola = new int[3][3];
        for (int i = 0; i < pola.length; i++) {
            for (int j = 0; j < pola.length; j++) {
                this.pola[i][j] = '-';
            }
        }
    }
 
    public String toString() {
        return ("Aktualny stan gry:" +pola);
    }
 
    boolean koniec() {
        if (pola[0][0] == 'O' && pola[0][1] == 'O' && pola[0][2] == 'O'
                || pola[0][0] == 'X' && pola[0][1] == 'X' && pola[0][2] == 'X'
                || pola[1][0] == 'O' && pola[1][1] == 'O' && pola[1][2] == 'O'
                || pola[1][0] == 'X' && pola[1][1] == 'X' && pola[1][2] == 'X'
                || pola[2][0] == 'O' && pola[2][1] == 'O' && pola[2][2] == 'O'
                || pola[2][0] == 'X' && pola[2][1] == 'X' && pola[2][2] == 'X'
                || pola[0][0] == 'O' && pola[1][0] == 'O' && pola[2][0] == 'O'
                || pola[0][0] == 'X' && pola[1][0] == 'X' && pola[2][0] == 'X'
                || pola[0][1] == 'O' && pola[1][1] == 'O' && pola[2][1] == 'O'
                || pola[0][1] == 'X' && pola[1][1] == 'X' && pola[2][1] == 'X'
                || pola[0][2] == 'O' && pola[1][2] == 'O' && pola[2][2] == 'O'
                || pola[0][2] == 'X' && pola[1][2] == 'X' && pola[2][2] == 'X'
                || pola[2][0] == 'O' && pola[1][1] == 'O' && pola[0][2] == 'O'
                || pola[2][0] == 'X' && pola[1][1] == 'X' && pola[0][2] == 'X'
                || pola[0][0] == 'O' && pola[1][1] == 'O' && pola[2][2] == 'O'
                || pola[0][0] == 'X' && pola[1][1] == 'X' && pola[2][2] == 'X') {
            return true;
        }
        return false;
    }
    boolean remis() {
        if (koniec()==false && this.pola[3][3]!='-'){
            return true;
        } else {
        return false;
    }}
 
    boolean remis2(){
        if(koniec()==false && this.pola[3][3]>8)
            return true;
        else return false;
    }
 
    boolean mozliwyRuch(Ruch ruch) {
        if (ruch.getPunkt()!=null){ //&& wygrana()==false){
            return true;    
        } else {
            return false;
        }
    }
 
    char wykonaj(Ruch ruch){
        ruch.getPunkt();
        return ruch.getZnak();
    }
}

///////////////// klasa gra

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;

public class Gra {
    Plansza plansza;
    char ostatniZnak;
    public Gra (Plansza plansza){
        this.plansza=plansza;
        int[][] pl=new int[3][3];
        plansza=new Plansza(pl);
        int i=0;
    }
 
    public String toString() {
        return ("Aktualny stan gry:" +plansza);
    }
 
    static char losujZnak(int i){
        if (i==1){
            return 'X';
        } else if (i==2){
            return 'O';
        } else {
            return 'E';
        }
    }
 
    public static void main(String[] args){
        //Punkt pkt = new Punkt(1,1);
        Punkt pkt=new Punkt (1, 1);
        Ruch r = new Ruch('A', pkt);
        int[][] pl=new int[3][3];
        Plansza plansza=new Plansza(pl);
        Gra g = new Gra(plansza);
        g.losujZnak(2);
        int i=0;
        try
        {
            char c;
            BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
 
            int m=0;
            do 
                  {
 
            m++;
            System.out.println("Zaczyna znak -- " +g.losujZnak(2)); 
                //plansza.wygrana();
                plansza.mozliwyRuch(r);
                g.toString();
                plansza.remis();
                plansza.koniec();
              g.ktoryZnak();
              System.out.println("Podaj x.");
              c = (char) br1.read();
              int p1 = Integer.parseInt(String.valueOf(c));
              System.out.println("Podaj y.");
              c = (char) br2.read();
              int p2 = Integer.parseInt(String.valueOf(c));
              g.toString();
            System.out.println("Punkt : (" + p1+","+p2+")");
            g.toString();
                   } while(plansza.koniec()==true || plansza.remis()==true );
        }catch(Exception e)
        {}
 
}
 
    void ktoryZnak() {
        int i=0;
    while (i<10){
        if(i % 2 == 0){
            System.out.println ("Teraz:" );
            Gra.losujZnak(2);
        } else {
            System.out.println ("Teraz:" );
            Gra.losujZnak(1);
        }
        i++;}
 
    }   
}