Problem z pobraniem zmiennych z innej klasy i Charat.

0

Witam.

Pisząc program na zaliczenie z podstawy javy (jest to gra coś ala warcaby z ruchami do przodu i zbijaniem na krzyż tylko) podczas rund w "grze" mam problem, który nie jest określony żadnym błędem a nie potrafię pojąć dlaczego akurat program na danym warunku zapętla się bez powodu. Każdy ruch jest wykonany na zasadzie pętli while zawierającej 2 warunki w zależności czy numer rundy jest parzysty czy też nie.

package src;

import java.util.Scanner;

public class Gameplay {
		
	public String[][] Board = new String[8][8];
	private static Scanner Read;
	
	public void Match(){
		
		Read = new Scanner(System.in);
		
		System.out.println("Przygotowywanie planszy do nowej rozgrywki!");	
	
		int number = 1;
		for(int i=0; i< Board.length; i++){
		    for(int j=0; j < 8; j++){
		    	if(j == 0){
			    	Board[i][j] = "1" + "1" + number;
			        //System.out.print("i = " + i + " j = " + j + " Pole = " +Board[i][j] + "\n");
		    	}
		    	if(j == 1){
		    		Board[i][j] = "1" + "2" + number;
			        //System.out.print("  i = " + i + " j = " + j + " Pole = " +Board[i][j] + "\n");
			        number++;
		    	}
		    	if(j >1 && j < 6){
		    	//if(j >2 && j < 7){
		    		Board[i][j] = "0";
		    	}
		    	if(j == 6){
		    		number--;
		    		Board[i][j] = "2" + "6" + number;
			        //System.out.print("i = " + i + " j = " + j + " Pole = " +Board[i][j]);
		    	}
		    	if(j == 7){
		    		Board[i][j] = "2" + "7" + number;
			        //System.out.print("  i = " + i + " j = " + j + " Pole = " +Board[i][j] + "\n");
			        number++;
		    	}
		    }
		}	
		System.out.println("Wczytywanie ustawień do gry vs Gracz");
		System.out.println("\n\n\n\n\n\n\n\n\n\n");
		int score = 0;
		int round = 1;
		int AI_Level = 1;
		int Biale = 16;
		int Czarne = 16;
		
		switch(AI_Level){
			case 1:
				while(score != 5){
					
					if(round % 2 == 1){
						do{
							System.out.println("Ruch Gracza nr.1");
							System.out.print("\nIlość pozostałych pionków = " + Biale + "\n\n");
							System.out.print("Możliwe pionki do ruchu:\n");
	
							for (int i=0; i<8; i++) {
								for (int j=0; j<8; j++){
									
									String testC = Board[i][j];
	
									if(testC.charAt(0) == 49)
										System.out.print("[" + i + "," + j + "] = " +Board[i][j] + "\n");
								}
							}
							System.out.print("\nPodaj pozycję pionka, którym chcesz wykonać ruch:");
							System.out.print("\nPozycja X = ");
							int x = Read.nextInt();
							System.out.print("\nPozycja Y = ");
							int y = Read.nextInt();			
							String CWybor = Board[x][y];
							
							if(CWybor.charAt(0) != 49)
								System.out.print("\nRuch nie możliwy na tym polu nie znajduje się twój pionek!\n\n\n");
							if(CWybor.charAt(0) == 49){
								int Cx1 = x - 1;
								int Cy1 = y + 1;
								int Cx2 = x;
								int Cy2 = y + 1;
								int Cx3 = x + 1;
								int Cy3 = y + 1;
								
								String CWyborOpcje1 = Board[Cx1][Cy1];
								String CWyborOpcje2 = Board[Cx2][Cy2];
								String CWyborOpcje3 = Board[Cx3][Cy3];
								
								
								if(CWyborOpcje1.charAt(0) == 50 || CWyborOpcje3.charAt(0) == 50 ){
									System.out.print("Opcje zbicia przeciwnego pionka to: \n");
									if(CWyborOpcje1.charAt(0) == 50)
										System.out.println("1. [" + Cx1 + "," + Cy1 + "]. " + " Pionek " + CWyborOpcje1);
									if(CWyborOpcje3.charAt(0) == 50)
										System.out.println("2 .[" + Cx3 + "," + Cy3 + "]. " + " Pionek " + CWyborOpcje3);
									System.out.print("Wybierz numer ruchu który chcesz wykonać: ");
									int CopcjaZbijanie = Read.nextInt();
									switch(CopcjaZbijanie){
										case 1:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Cx1 + "," + Cy1 + "]" + Board[Cx1][Cy1] + " ZNISZCZONCy! ");
											Board[Cx1][Cy1] = Board[x][y];
											Board[x][y] = "0";
											Czarne--;
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Cx1 + "," + Cy1 + "]" + Board[Cx1][Cy1] + "\n");
											round++;
											break;
										case 2:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Cx3 + "," + Cy3 + "]" + Board[Cx1][Cy1] + " ZNISZCZONCy! ");
											Board[Cx3][Cy3] = Board[x][y];
											Board[x][y] = "0";
											Czarne--;
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Cx3 + "," + Cy3 + "]" + Board[Cx3][Cy3] + "\n");
											round++;
											break;
									}
								}
								if(CWyborOpcje1.charAt(0) == 48 || CWyborOpcje2.charAt(0) == 48 || CWyborOpcje3.charAt(0) == 48 ){
									System.out.print("Opcje przemieszczenia pionka to: \n");
									if(CWyborOpcje1.charAt(0) == 48)
										System.out.println("1. [" + Cx1 + "," + Cy1 + "]. " + " Puste pole " + CWyborOpcje1);
									if(CWyborOpcje2.charAt(0) == 48)
										System.out.println("2. [" + Cx2 + "," + Cy2 + "]. " + " Puste pole " + CWyborOpcje1);
									if(CWyborOpcje3.charAt(0) == 48)
										System.out.println("3. [" + Cx3 + "," + Cy3 + "]. " + " Puste pole " + CWyborOpcje1);
									System.out.print("Wybierz numer ruchu który chcesz wykonać: ");
									int CopcjaRuch = Read.nextInt();
									switch(CopcjaRuch){
										case 1:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Cx1 + "," + Cy1 + "]" + Board[Cx1][Cy1] + " ");
											Board[Cx1][Cy1] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Cx1 + "," + Cy1 + "]" + Board[Cx1][Cy1] + "\n");
											round++;
											break;
										case 2:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Cx2 + "," + Cy2 + "]" + Board[Cx1][Cy1] + " ");
											Board[Cx2][Cy2] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Cx2 + "," + Cy2 + "]" + Board[Cx2][Cy2] + "\n");
											round++;
											break;
										case 3:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Cx3 + "," + Cy3 + "]" + Board[Cx1][Cy1] + " ");
											Board[Cx3][Cy3] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Cx3 + "," + Cy3 + "]" + Board[Cx3][Cy3] + "\n");
											round++;
											break;
									}
								}
								}
							}while(round % 2 != 0);
						System.out.print("\nKoniec ruchu\n\n\n");
						System.out.print(round);
					}
					if(round % 2 == 0){
						while(round % 2 == 0){
							System.out.println("Ruch Gracza nr.2");
							System.out.print("\nIlość pozostałych pionków = " + Czarne + "\n\n");
							System.out.print("Możliwe pionki do ruchu:\n");
	
							for (int i=0; i<8; i++) {
								for (int j=0; j<8; j++){
									
									String testC = Board[i][j];
	
									if(testC.charAt(0) == 50)
										System.out.print("[" + i + "," + j + "] = " +Board[i][j] + "\n");
								}
							}
							System.out.print("\nPodaj pozycję pionka, którym chcesz wykonać ruch:");
							System.out.print("\nPozycja X = ");
							int x = Read.nextInt();
							System.out.print("\nPozycja Y = ");
							int y = Read.nextInt();			
							String BWybor = Board[x][y];
							
							if(BWybor.charAt(0) != 50)
								System.out.print("\nRuch nie możliwy na tym polu nie znajduje się twój pionek!\n\n\n");
							if(BWybor.charAt(0) == 50){
								int Bx1 = x - 1;
								int By1 = y + 1;
								int Bx2 = x;
								int By2 = y + 1;
								int Bx3 = x + 1;
								int By3 = y + 1;
								
								String BWyborOpcje1 = Board[Bx1][By1];
								String BWyborOpcje2 = Board[Bx2][By2];
								String BWyborOpcje3 = Board[Bx3][By3];
								
								
								if(BWyborOpcje1.charAt(0) == 49 || BWyborOpcje3.charAt(0) == 49 ){
									System.out.print("Opcje zbicia przeciwnego pionka to: \n");
									if(BWyborOpcje1.charAt(0) == 49)
										System.out.println("1. [" + Bx1 + "," + By1 + "]. " + " Pionek " + BWyborOpcje1);
									if(BWyborOpcje3.charAt(0) == 49)
										System.out.println("2 .[" + Bx3 + "," + By3 + "]. " + " Pionek " + BWyborOpcje3);
									System.out.print("Wybierz numer ruchu który chcesz wykonać: ");
									int BopcjaZbijanie = Read.nextInt();
									switch(BopcjaZbijanie){
										case 1:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Bx1 + "," + By1 + "]" + Board[Bx1][By1] + " ZNISZCZONCy! ");
											Board[Bx1][By1] = Board[x][y];
											Board[x][y] = "0";
											Czarne--;
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Bx1 + "," + By1 + "]" + Board[Bx1][By1] + "\n");
											round++;
											break;
										case 2:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Bx3 + "," + By3 + "]" + Board[Bx1][By1] + " ZNISZCZONCy! ");
											Board[Bx3][By3] = Board[x][y];
											Board[x][y] = "0";
											Czarne--;
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Bx3 + "," + By3 + "]" + Board[Bx3][By3] + "\n");
											round++;
											break;
									}
								}
								if(BWyborOpcje1.charAt(0) == 48 || BWyborOpcje2.charAt(0) == 48 || BWyborOpcje3.charAt(0) == 48 ){
									System.out.print("Opcje przemieszczenia pionka to: \n");
									if(BWyborOpcje1.charAt(0) == 48)
										System.out.println("1. [" + Bx1 + "," + By1 + "]. " + " Puste pole " + BWyborOpcje1);
									if(BWyborOpcje2.charAt(0) == 48)
										System.out.println("2. [" + Bx2 + "," + By2 + "]. " + " Puste pole " + BWyborOpcje1);
									if(BWyborOpcje3.charAt(0) == 48)
										System.out.println("3. [" + Bx3 + "," + By3 + "]. " + " Puste pole " + BWyborOpcje1);
									System.out.print("Wybierz numer ruchu który chcesz wykonać: ");
									int CopcjaRuch = Read.nextInt();
									switch(CopcjaRuch){
										case 1:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Bx1 + "," + By1 + "]" + Board[Bx1][By1] + " ");
											Board[Bx1][By1] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Bx1 + "," + By1 + "]" + Board[Bx1][By1] + "\n");
											round++;
											break;
										case 2:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Bx2 + "," + By2 + "]" + Board[Bx1][By1] + " ");
											Board[Bx2][By2] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Bx2 + "," + By2 + "]" + Board[Bx2][By2] + "\n");
											round++;
											break;
										case 3:
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+" -> ["+ Bx3 + "," + By3 + "]" + Board[Bx1][By1] + " ");
											Board[Bx3][By3] = Board[x][y];
											Board[x][y] = "0";
											System.out.print("[" + x + "," + y + "]" +Board[x][y]+ " -> ["+ Bx3 + "," + By3 + "]" + Board[Bx3][By3] + "\n");
											round++;
											break;
									}
								}
								}
							System.out.print("\nKoniec ruchu\n\n\n");
							}
					}
				}
				break;
					
			/*case 2:
				System.out.println("Wczytywanie ustawień do gry vs SI Łatwy");
				break;
				
			case 3:
				System.out.println("Wczytywanie ustawięń do gry vs SI Zaawansowany");
				break;*/
			}
	}
}

Ruch pierwszego gracza przechodzi bez żadnych problemów jednak kiedy drugi gracz ma warunki znajdowania pionka na szachownicy dla pionków białych ( a nie tego samego co pierwszy gracz czyli czarne) program po prostu jakby to nazwać... przestaje czytać dalsze linijki kodu(?) i przyjmuje dowolne znaki bez żadnej reakcji. Drugi gracz to tak naprawdę skopiowany if 1:1 z gracza pierwszego tylko ze zmienionymi charat z 49 na 48.
Drugi problem mam taki iż kiedy chcę z innej klasy z tej samej paczki z importować zmienną o nazwie AI_Level do klasy gameplay aby ustawiało odpowiednią rozgrywkę to z automatu zeruje jej wartość podczas gry do main wypisywanie tej zmiennej przebiega ok.

package src;
import java.util.Scanner;
import java.util.Random;


public class AI {

	private int opcja = 1;
	public int AI_Level;
	public int AI_RandomMoves;
	public int AI_Attack;
	public int AI_AlwaysAttack;
	public int AI_AttackOverMoves;
	public int AI_RandomPieces;
	private Scanner wczytywanie;
	
	public void AI_Logic(){
		
		Random x = new Random(); 
		Random y = new Random();
		int xx = x.nextInt(8);
		int yy = y.nextInt(8);
		
		
		if(AI_Level == 1){
			System.out.println("Poziom gry: vs Gracz");
			}
		
		if(AI_Level == 2){
			System.out.println("Poziom gry: vs SI Łatwy");
			if(AI_RandomMoves == 1){
				System.out.println(xx);
				System.out.println(yy);
				
				
				
			}
		}
		if(AI_Level == 3){
			System.out.println("Poziom gry: vs SI Zaawansowany");
		}
		
	}
	
	
	public void AI_Settings(){
		
		wczytywanie = new Scanner(System.in);
		
		while(opcja != 0){
			System.out.println("Witamy w menu wyboru poziomu trudności");
			System.out.print("\n\t 1 - Gracz\n\t Staw czoło innemu ludzkiemu zawodnikowi!.");
			System.out.print("\n\t 2 - Łatwy\n\t Przeciwnik będzie wykonywał losowe ruchy losowymi pionkami.");
			System.out.print("\n\t 3 - Zaawansowany\n\t Przeciwnik będzie wykonywał ruchy pionkami z priorytetem na zbijanie przeciwnych pionków.\n");
			
			if(AI_Level == 1)
				System.out.println("Obecnie wybrany poziom: " + AI_Level + " - vs Gracz");
			if(AI_Level == 2)
				System.out.println("Obecnie wybrany poziom: " + AI_Level + " - vs SI Łatwy");
			if(AI_Level == 3)
				System.out.println("Obecnie wybrany poziom: " + AI_Level + " - vs SI Zaawansowany");
			
			System.out.print("Jeżeli chcesz zmienić poziom podaj liczbę odpowiadającą poziomowi lub wpisz 0 aby wrócić do menu!\n");
			System.out.print("Wybierz cyfrę jedną z powyższych opcji:");
			opcja = wczytywanie.nextInt();
			switch(opcja){
				case 1:
					AI_Level = 1 ;
					AI_RandomMoves = 0;
					AI_Attack = 0;
					AI_AlwaysAttack = 0;
					AI_AttackOverMoves = 0;
					AI_RandomPieces = 0;
					break;
				case 2:
					AI_Level = 2 ;
					AI_RandomMoves = 1;
					AI_Attack = 0;
					AI_AlwaysAttack = 0;
					AI_AttackOverMoves = 0;
					AI_RandomPieces = 1;
					break;
				case 3:
					AI_Level = 3 ;
					AI_RandomMoves = 1;
					AI_Attack = 1;
					AI_AlwaysAttack = 0;
					AI_AttackOverMoves = 0;
					AI_RandomPieces = 1;
					break;
				case 0:
					break;
					
				}
		}
	}
}

Próbowałem importować zmienną za pomocą takiej konstrukcji w której zmienna test jest tylko w celu sprawdzenia czy faktycznie zmienna pobierana jest zerowa i taka się nadpisze na każdą podaną zmienną:

AI AIObj = new AI();
int test = 1;
test = AIObj.AI_Level;
System.out.println(AIObj.AI_Level);
System.out.println(test);

Prawdopodobnie zauważycie pełno błędów w kodzie jak to na podstawach ale starałem się (a przynajmniej tak mi się wydaje) zrobić jak najprościej wszystko.
Kodu źródłowego main nie wrzucam ponieważ tam jest tylko menu na switch, które odwołuje się do danej rzeczy w klasie.

Pozdrawiam.

P.S. Da radę jakoś w prosty sposób wykonać szachownicę na tej tablicy aby nie wywalało gdy gracz wybierze ruch skrajnego pionka poza szachownicę? Mam na myśli fragment z String CWyborOpcje 1 i 3 ponieważ one z automatu wychodzą poza zasięg tablicy czy też po prostu dać o 2 rzędy większą tablice z pustymi polami i warunki na to odpowiednie?

0

Przecież to jest kompletnie nieczytelne...

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