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++;}
		
	}	
}