Problema, variabili "in comune" di classi con stessa derivazione

di il
2 risposte

Problema, variabili "in comune" di classi con stessa derivazione

Sono un programmatore in erba, quindi aspettatevi errori stupidi.
Ho scritto questo programmino per giocare al blackjack, con un solo giocatore ed con comandi a console.
Il problema non è nella sintassi perché il programma parte e senza problemi raggiunge il termine ma le mani del banco e quella del giocatore sono in comune. Poi, con il debug ho notato che tutte le variabili delle due classi sono in comune. Non so come risolvere.

Porto questo frammento di codice come esempio:

public class Banco extends IP {
	
	protected static boolean Controllo17()
	{
		return punteggio>=17;
	}
	
	public static void Inizia2Carte()
	{
		RiceviCarta();
		RiceviCarta();
		System.out.println("Le carte del banco:");
		mano[0].Stampa();
		System.out.println(" ##");
		
		if(Secco21())
		{
			MostraMano();
			System.out.println("Il banco ha fatto 21 secco");
			sta=true;
		}
	}
	
	public static void Inizializza()
	{
		mano=MANOVUOTA;
		nCarte=0;
		nAssi=0;
		punteggio=0;
		sballato=false;
		sta=false;
	}
    
	public static void Gioca()
	{
		
		while(!(sta || sballato || !Giocatore.resa))
		{
			RiceviCarta();
			sta=Controllo17();
			sballato=Controllo21();
		}
		
		MostraMano();
	}
	
	
}


public class Giocatore extends IGiocatore {

	public static boolean split=false;
	
	///---------------------------------------------------///
	///                    Metodi                         ///
	///---------------------------------------------------///
	
	public static void Inizializza()
	{
		InizializzaIG();
		split=false;
	}
	
	public static void Punta()
	{
		System.out.println("Quanto vuoi puntare? Saldo: "+saldo);
		
		boolean s=true;
		while(s)
		{
			puntata=sc.nextInt();
			if(puntata<=saldo)
				s=false;
		}
		saldo-=puntata;
	}
	
	public static void PrimaGiocata()
	{
		RiceviCarta();
		RiceviCarta();
		MostraMano();
		
		if(Secco21())
		{
			sta=true;
			comando=-2;
		}
		
		while(comando==-1)
		{
			System.out.println("Cosa fare?");
			System.out.println("0)Hit");
			System.out.println("1)Stand");
			System.out.println("2)Surrender");
			if(PossSplit())
				System.out.println("3)Split");
			if(PossDoubleDown())
				System.out.println("4)Double Down");
					
			comando=sc.nextInt();
				
			switch(comando)
			{
			case 0: Hit();
				    break;
			case 1: Stand();
				    break;
			case 2: Surrender();
				    break;
			case 3: break;
			case 4: break;
			default: comando=-1;
			}
				
			if(PossSplit() && comando==3)
				Split();
			if(PossDoubleDown() && comando==4)
				DoubleDown();
			
		}
	}
	
	public static void Gioca()
	{
		GiocaIG();
	}
	
	protected static boolean PossSplit()
	{
		return mano[0].Valore()==mano[1].Valore();
	}
	
	protected static boolean DoppioAsso()
	{
		return mano[0].Numero==1 && mano[1].Numero==1;
	}
	
	public static void Split()
	{
		split=true; 
		saldo-=puntata;
		
		Split1.Inizia(mano[0],DoppioAsso());
		Split2.Inizia(mano[1],DoppioAsso());
		
		Split1.Gioca();
		Split2.Gioca();
		
		
	}
	
	public static void SeResa()
	{
		saldo+=puntata/2;
		System.out.println("Il giocatore si arrende, riceve "+puntata/2);
	}
	
	public static void SeVittoria()
	{
		saldo+=puntata*2;
		System.out.println("Il giocatore ha vinto "+puntata);
	}
	
	public static void SePareggio()
	{
		saldo+=puntata;
		System.out.println("Pareggio tra banco e giocatore");
	}
	
	public static void SePerso()
	{
		System.out.println("Il giocatore ha perso");
	}
}
Entrambi le classi derivano dalla classe comune IP (Giocatore deriva da IGiocatore che a sua volta deriva da IP)
Chiedete pure se avete bisogno di tutto il codice

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte