Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Quali sono le reali differenze tra Avversario e Giocatore?
    Da come le hai scritte io non ne vedo e in realtà non ce ne sono molte.
    Differenziarle in questo modo ti crea confusione, in realtà un Avversario è anche un Giocatore, al max un Giocatore la cui logica decisionale è decisa dal pc, cambia il metodo "calcolaCartaDaScartare", ma il resto è uguale (come è giusto che sia).
    Organizza gerarchicamente in modo diverso le classi, intanto Giocatore è padre di Avversario e ha senso. (anche se parlerei di GiocatoreElettronico non di Avversario)

    La partita si gioca tra 2 giocatori (quindi Partita(Giocatore giocatore1, Giocatore giocatore2), che poi il secondo lo istanzi come Avversario è un altro discorso.

    Esatto, hai l'enumerazione Seme (ed è corretto), ma avrai anche una classe che dà inizio a tutto, quindi come dire una classe Partita che distribuisce le carte ecc
    In questa tieni il riferimento alla briscola, accessibile a tutti. Fatto in questo modo non hai bisogno di portarti dietro in ogni carta un flag che ti dica se hai una briscola o no. (il seme una carta ce l'ha sempre)

    Allora tu devi fare le funzioni in modo che abbiano un input e un output e facciano il loro mestiere, indipendentemente da come prendi l'input e l'output.
    Di come questi li generi se ne occupa una nuova classe, che a seconda delle impostazioni (che tu dai) decide di mandare tutto a video tramite GUI, command line oppure file oppure rete come ti pare.
    Tu ti devi occupare di COME giochi, come ottieni le carte e l'input è un discorso a parte.
    RTFM Read That F*** Manual!!!

  2. #12
    Quindi ricapitolando ho:

    package carte
    -Classe Carta
    -Enum Seme
    -Classe Mazzo
    -Credo di dover aggiungere un ComparatoreCarte...

    package classifica
    -Classe Classifica (lista di RecordClassifica)
    -Classe ComparatoreRecordClassifica (Compara 2 RecordClassifica per mostrarli in ordine
    di punteggio)
    -Classe RecordClassifica

    package singleplayer
    -Classe Giocatore(String nome)
    -Classe GiocatoreElettronico extends Giocatore
    -Classe Partita(Giocatore a, Giocatore b)

    package gui
    -Classe GuiPartita
    -Classe GuiClassifica
    -Classe GuiFinestraPrincipale

    Ovviamente questa è la parte essenziale allo svolgimento della partita.

    Allora tu devi fare le funzioni in modo che abbiano un input e un output e facciano il loro mestiere, indipendentemente da come prendi l'input e l'output. Di come questi li generi se ne occupa una nuova classe, che a seconda delle impostazioni (che tu dai) decide di mandare tutto a video tramite GUI, command line oppure file oppure rete come ti pare. Tu ti devi occupare di COME giochi, come ottieni le carte e l'input è un discorso a parte.
    Questo discorso è un po troppo teorico, mi servirebbe un minimo di esempio per entrare
    nell'ottica perché non riesco a capire se ho capito

    Provo a farlo io un esempio e vediamo se combacia:

    Nella classe Partita ad esempio servirà un metodo per permettere ai giocatori di estrarre
    una carta dal mazzo (Mazzo è ovviamente istanziata in Partita).

    codice:
    public Carta pesca(Mazzo m, Giocatore a) {
    		Carta c = m.estrai();
    		a.setCarta(c); //assegno la carta al giocatore
    		return c;
    	}
    Nella classe GuiPartita avrò un metodo partita() (chiamato nel costruttore, dopo aver
    costruito la gui) che effettivamente esegue la partita.

    Nel metodo partita() capiterà di chiamare il metodo pesca() che non a caso ritorna
    la carta pescata. Ad ogni carta è associata un'Image, quindi posso tranquillamente mostrare nella JFrame tale carta.

    Può funzionare?

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ci sei quasi, sai prendere la carta pescata? si ed è quello di cui si deve occupare il core del tuo programmino.

    Poi il layer che si occupa di comunicare con l'esterno andrà a beccare l'immagine in funzione della carta che ti è stata ritornata dal mazzo, come peschi non cambia (logico)....inizi a comprendere.

    Riguardo l'organizzazione sembra a posto (ho dato una lettura veloce)
    RTFM Read That F*** Manual!!!

  4. #14
    Bene, vi terrò informati

    Ps: a questo punto la briscola posso deciderla direttamente nella classe mazzo e farci un bel getBriscola()...

    Pps: Non l'ho detto ma il gioco avrà una componente multiplayer che per ora non sto assolutamente considerando. Le classi che sto utilizzando per il singleplayer dovranno essere utilizzabili anche nel multiplayer? Sto agendo separando totalmente le due modalità..

  5. #15
    Questa è la classe partita... non so che metodi aggiungere. Dovrei poter notificare
    ai giocatori che è/non è il loro turno ma non so come.

    codice:
    package singleplayer;
    
    import java.util.HashSet;
    import carta.Carta;
    import carta.Mazzo;
    
    public class Partita
    {
    	private Giocatore giocatore;
    	private Giocatore avversario;
    	private Mazzo mazzo;
    	private final Carta briscola;
    	
    	public Partita(Giocatore a, Giocatore b) {
    		this.giocatore = a;
    		this.avversario = b;
    		mazzo = new Mazzo();
    		briscola = mazzo.getBriscola();
    	}
    	
    	public Carta getBriscola() {
    		return briscola;
    	}
    	
    	public int carteRimanenti() {
    		return mazzo.carteRimanenti();
    
    	}
    	
    	public HashSet<Carta> distribuisciCarteGiocatore() {
    		Carta a1 = mazzo.estrai();
    		Carta a2 = mazzo.estrai();
    		Carta a3 = mazzo.estrai();
    		
    		giocatore.setCarta(a1);
    		giocatore.setCarta(a2);
    		giocatore.setCarta(a3);
    		
    		HashSet<Carta> ret = new HashSet<Carta>();
    		ret.add(a1);
    		ret.add(a2);
    		ret.add(a3);
    		
    		return ret;
    	}
    
    	public HashSet<Carta> distribuisciCarteAvversario() {
    		Carta a1 = mazzo.estrai();
    		Carta a2 = mazzo.estrai();
    		Carta a3 = mazzo.estrai();
    		
    		giocatore.setCarta(a1);
    		giocatore.setCarta(a2);
    		giocatore.setCarta(a3);
    		
    		HashSet<Carta> ret = new HashSet<Carta>();
    		ret.add(a1);
    		ret.add(a2);
    		ret.add(a3);
    		
    		return ret;
    	}
    	
    	public Carta pescaGiocatore() {
    		Carta c = mazzo.estrai();
    		giocatore.setCarta(c);
    		return c;
    	}
    	
    	public Carta pescaAvversario() {
    		Carta c = mazzo.estrai();
    		avversario.setCarta(c);
    		return c;
    	}
    	
    	//...
    }
    Idea: Credo sia sufficente tenere un flag nella GuiPartita. Il flag = 0 tocca al giocatore, 1 tocca al computer. Poi gestisco la partita ciclicamente con un while(la partita non è finita).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.