Witam, mam do zrobienia grę opartą na trzech wierszach Stringów. Aktualnie mój problem odnosi się do GameValidatora (nie sprawdza czy gracz wygrał w mainie) oraz do metody GetPoint (nie wprowadza znaków do Planszy w mainie). Czy mógłby ktoś rzucić okiem na kod i podpowiedzieć gdzie leży błąd ?
Plansza:
public class Plansza {
String wiersz1;
String wiersz2;
String wiersz3;
public Plansza(String w1, String w2, String w3) {
wiersz1 = w1;
wiersz2 = w2;
wiersz3 = w3;
}
private void put(int x, int y, char znak) {
if (x< 0 || y < 0 || x > 2 || y > 2)
{
throw new WspolrzednePozaPlanszaException(x,y);
}
else
if (isFull())
{
throw new PlanszaJestPelnaException ();
}
else
if (!isEmptyField(x,y)) {
throw new ToPoleJestZajeteException(x, y);
}
else
{
String row = getRow( y);
String newRow = setCharAt(row, x, znak);
setRow( newRow, y);
}
}
private boolean isEmptyField( int x, int y) {
return get(x,y) == '-';
}
private String setCharAt(String s, int index, char c) {
String result = "";
int i = 0;
while (i < s.length()) {
char cfs = s.charAt(i);
if (i == index) cfs = c;
result = result +cfs ;
i = i+1;
}
return result;
}
private void setRow(String newRow, int y){
if (y == 0) wiersz1= newRow;
else
if ( y == 1) wiersz2 = newRow;
else
wiersz3 = newRow;
}
public void putX(int x, int y) {
put(x, y, 'X');
}
public void putO(int x, int y) {
put(x, y, 'O');
}
public boolean isFull() {
String r = wiersz1 + wiersz2 + wiersz3;
return !r.contains("-");
}
public boolean isRowWith(int y, char c) {
return isStringWith ( getRow( y ), c);
}
private boolean isStringWith( String s , char c )
{
for( int i = 0 ; i < s.length() ; i++ )
{
if( s.charAt( i ) != c ) return false;
}
return true;
}
public boolean isColWith(int x, char c) {
return isStringWith( getCol( x ) , c );
}
public boolean isSlashRowWith(char c) {
return isStringWith( getSlashRow(), c);
}
public boolean isBackSlashRowWith(char c) {
return isStringWith( getBackslashRow(), c);
}
public char get(int x, int y) {
return getRow(y).charAt(x);
}
public String getRow(int y) {
String wiersz = "";
if (y == 0)
wiersz = wiersz1;
else
if (y == 1)
wiersz = wiersz2;
else
wiersz = wiersz3;
return wiersz;
}
public String getCol(int x){
return "" + get(x, 0) + get(x,1) + get(x,2);
}
public String getSlashRow() {
return "" + get(0, 2) + get(1,1) + get(2,0);
}
public String getBackslashRow(){
return "" + get(0, 0) + get(1,1) + get(2,2);
}
public String toString() {
return ("wiersz1: " + wiersz1 + "\n" + "wiersz2: " + wiersz2 + "\n"
+ "wiersz3: " + wiersz3);
}
}
Metoda GetPoint:
import java.awt.Point;
import java.util.*;
public class KeyboardKolkoKrzyzykPlayer extends KolkoKrzyzykPlayer{
public KeyboardKolkoKrzyzykPlayer (String name) {
super (name);
}
public java.awt.Point getPoint() {
Scanner scanner = new Scanner(System.in);
System.out.println( "wprowadz X: ");
int x = scanner.nextInt();
System.out.println( "wprowadz Y: ");
int y = scanner.nextInt();
return new Point (x,y);
}
}
Game Validator:
public class KolkoKrzyzykGameValidator extends GameValidator{
Plansza p = new Plansza("---", "---", "---");
public KolkoKrzyzykGameValidator(Plansza p1) {
p =p1;
}
public boolean isPlayerAWinner(){
int y=0;
int x=0;
if (p.isRowWith(y, 'X') && p.isColWith(x, 'X') && p.isSlashRowWith('X')
&& p.isBackSlashRowWith('X'))
{
return true;
}
else
return false;
}
public boolean isPlayerBWinner(){
int y=0;
int x=0;
if (p.isRowWith(y, 'O') && p.isColWith(x, 'O') && p.isSlashRowWith('O')
&& p.isBackSlashRowWith('O'))
{
return true;
}
else
return false;
}
public boolean isGameFinished(){
if (p.isFull());
return true;
}
}
Main:
import java.util.Scanner;
public class KolkoKrzyzyk {
public static void main(String[] args) {
KeyboardKolkoKrzyzykPlayer GraczA = new KeyboardKolkoKrzyzykPlayer("");
KeyboardKolkoKrzyzykPlayer GraczB = new KeyboardKolkoKrzyzykPlayer("");
String imieA = GraczA.getName("Gracz(X)");
String imieB = GraczB.getName("Gracz(O)");
Plansza p = new Plansza("---", "---", "---");
GameValidator gv = new KolkoKrzyzykGameValidator(p);
while (! p.isFull())
{
//GraczA.getPoint();
//GraczB.getPoint();
Scanner scanner = new Scanner(System.in);
System.out.println( "Gracz A, wprowadz X: ");
int wierszA = scanner.nextInt();
System.out.println( "Gracz A, wprowadz Y: ");
int kolumnaA = scanner.nextInt();
p.putX( wierszA, kolumnaA);
System.out.println(p);
gv.isPlayerAWinner();
System.out.println( "Gracz B, wprowadz X: ");
int wierszB = scanner.nextInt();
System.out.println( "Gracz B, wprowadz Y: ");
int kolumnaB = scanner.nextInt();
p.putO( wierszB, kolumnaB);
System.out.println(p);
gv.isPlayerBWinner();
}
}
}