Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26

    Programma di scacchi

    Ciao a tutti.

    Sto cercando di fare un giochino di scacchi con Java. Sono all'inizio e mi sto soffermando sulla parte grafica, sto progettando il tutto con NetBeans, ma ho un problema: non riesco a creare le caselle. Pensavo di creare un pannello e poi utilizzare il gridlayout di dimensione 8x8, ma se provo a mettere righe o colonne me mi copre tutto il pannello o non vedo nulla. Che devo fare?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Che devo fare?
    Farci capire cosa stai facendo, cioè su quale componente stai impostando il GridLayout, dove stai aggiungendo questo componente e in che modo, ad esempio... ovvero, postando un po' di codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    sto lavorando con netbeans. il codice è incompleto, xkè oltre alla scacchiera sto aggiungendo informazioni riguardo alla partita da visualizzare. Posto la parte relativa alla scacchiera.
    codice:
    import java.awt.Component;
    import javax.swing.*;
    import java.awt.*;
    
    class Square extends JPanel {
        private static final Color white = new Color(15787904);
        private static final Color black = new Color(4333838);
        
        public Square(boolean even) {
            super();
            this.setBackground(even ? white : black);
        }
    }
    
    public class ChessBoard extends JFrame {
        
        /** Creates a new instance of ChessBoard */
        public ChessBoard() {
            super("Simplest Chessboard Ever");
            this.setLayout(new BorderLayout());
            JPanel center = new JPanel();
            center.setLayout(new GridLayout(8,8));
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    Component add = center.add(new Square((i+j)%2==0));
                }
            }
            this.add(center, BorderLayout.CENTER);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setSize(500,500);
            this.setVisible(true);
        }
        
        public static void main (String[] args) {
            new ChessBoard();
        }
        
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Benissimo.
    Punto numero 1: non si deve mai usare setLayout() direttamente sul JFrame, ma solo sul suo ContentPane. Quindi, nel costruttore:

    codice:
    Container c = this.getContentPane();
    c.setLayout( new BorderLayout() );
    Punto numero 2: i componenti vanno aggiunti al content-pane e non al JFrame.

    codice:
    c.add(centro, BorderLayout.CENTER)
    Poi, è ovvio che se aggiungi un solo componente ad un contenitore gestito da BorderLayout, nel suo CENTER, questo occuperà tutta l'area disponibile. E' esattamente il comportamento che ci si aspetta da un BorderLayout.

    Se aggiungi altri componenti (nel NORTH, SOUTH, WEST o EAST) vedrai che la scacchiera occuperà solo l'area rimanente.

    Documentazione di BorderLayout.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    il problema però è che sto lavorando graficamente(componente Palette e area di disegno), con netbeans che mi crea il codice. Non riesco a creare le caselle graficamente!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da des89
    il problema però è che sto lavorando graficamente(componente Palette e area di disegno), con netbeans che mi crea il codice. Non riesco a creare le caselle graficamente!
    Allora evita di usare NetBeans: chi è che comanda? Tu o BetBeans?

    E' fortemente sconsigliato usare ambienti di sviluppo così avanzati quando si è alle prime armi. E io sconsiglio di usarlo in ogni caso per lo sviluppo delle GUI: il codice autogenerato è pessimo, contorto, pieni di chiamate inutili, difficile da manutenere e a volte completamente incomprensibile... tutto il contrario di ciò che dovrebbe essere un programma agli occhi del suo sviluppatore.

    Puoi comunque usare NetBeans come se fosse un "semplice" editor (un editor avanzato, per la verità): nessuno ti vieta di scrivere a mano il codice... è quello che faccio io quotidianamente. La palette di NetBeans, nella mia configurazione, è assolutamnte disabilitata.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    Originariamente inviato da LeleFT
    Allora evita di usare NetBeans: chi è che comanda? Tu o BetBeans?

    E' fortemente sconsigliato usare ambienti di sviluppo così avanzati quando si è alle prime armi. E io sconsiglio di usarlo in ogni caso per lo sviluppo delle GUI: il codice autogenerato è pessimo, contorto, pieni di chiamate inutili, difficile da manutenere e a volte completamente incomprensibile... tutto il contrario di ciò che dovrebbe essere un programma agli occhi del suo sviluppatore.

    Puoi comunque usare NetBeans come se fosse un "semplice" editor (un editor avanzato, per la verità): nessuno ti vieta di scrivere a mano il codice... è quello che faccio io quotidianamente. La palette di NetBeans, nella mia configurazione, è assolutamnte disabilitata.


    Ciao.
    lo so, ma modificando il codice non ho riscontri sull'editor. Ma vabbè, hai ragione, è netbeans che comanda.
    Finora ho sempre utilizzato textpad, continuo con lui?

    Tornando al programma, io vorrei fare un PGN Viewer, ovvero un programma che sia in grado di caricare le partite di scacchi in formato .pgn.
    Quindi deve essere visualizzata la scacchiera, in basso i pulsanti avanti, indietro ecc.., più in basso le informazioni sui giocatori, a destra le mosse.
    Nel modo come hai detto tu la scacchiera mi ricopre tutta la finestra. Devo impostare un BorderLayout prima del Grid Layout?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da des89
    lo so, ma modificando il codice non ho riscontri sull'editor. Ma vabbè, hai ragione, è netbeans che comanda.
    I riscontri non li devi avere sull'editor, ma in esecuzione... chi usa il programma mica guarda l'editor con cui è stato sviluppato. Io l'editor visuale di NetBean non lo guardo nemmeno... non mi interessa.

    Un'applicazione si scrive con un editor (va benissimo NetBeans), si compila con un compilatore (anche qui, ci si può far aiutare da NetBeans) e si esegue FUORI dall'ambiente di sviluppo (e qui NetBeans non c'entra più nulla).

    Finora ho sempre utilizzato textpad, continuo con lui?
    Come vuoi, non è importante.

    Tornando al programma, io vorrei fare un PGN Viewer, ovvero un programma che sia in grado di caricare le partite di scacchi in formato .pgn.
    Quindi deve essere visualizzata la scacchiera, in basso i pulsanti avanti, indietro ecc.., più in basso le informazioni sui giocatori, a destra le mosse.
    Nel modo come hai detto tu la scacchiera mi ricopre tutta la finestra. Devo impostare un BorderLayout prima del Grid Layout?
    Nno è che i LayoutManager si impostino prima o dopo. I LayoutManager si impostano sui componenti che poi li useranno.

    Quindi, il content-pane del JFrame dovrà avere un BorderLayout, mentre il pannello della scacchiera (che sarà contenuto dal content-pane) avrà un GridLayout.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    Originariamente inviato da LeleFT
    I riscontri non li devi avere sull'editor, ma in esecuzione... chi usa il programma mica guarda l'editor con cui è stato sviluppato. Io l'editor visuale di NetBean non lo guardo nemmeno... non mi interessa.
    ho iniziato a scrivere senza l'editor..hai pienamente ragione, mi trovo nettamente meglio. E' praticamente la prima volta che scrivo cose grafiche, pensavo fosse più facile


    Ho due domande: la prima riguarda i colori della scacchiera. Dove posso trovare tutti gli interi riferiti ai colori?nel codice che ho postato prima il giallo(casella bianca x la scacchiera) è 15787904.

    La seconda domanda riguarda sempre i Layout. Nel primo JPanel ho inserito un BorderLayout e fin qui ci siamo.
    Ora vorrei mettere dei pulsanti d'interazione in modo che l'utente possa andare avanti con le mosse, pensavo di mettere quindi un FlowLayout nel secondo JPanel. Come faccio a mettere il secondo JPanel in basso rispetto al primo JPanel?

    grazie,

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Trattare i colori in quel modo è complicato. Tra parentesi, come lo crei il colore a partire da quella costante?

    La classe Color ha una serie di costante predefinite per i colori:

    Color.BLACK è l'oggetto Color che rappresenta il nero
    Color.WHITE è l'oggetto Color che rappresenta il bianco
    Color.RED è l'oggetto Color che rappresenta in rosso
    ecc.

    I colori li puoi anche costruire con la normale codifica RGB, usando il costruttore di Color con 3 parametri interi (Red, Gree, Blue):

    codice:
    Color bianco = new Color(255, 255, 255);
    Color nero = new Color(0, 0, 0);
    Qui trovi la documentazione della classe Color. Impara ad usarla la documentazione, è fondamentale.

    PS: La rappresentazione dei colori usando una costante viene definita scrivendo i tre valori di RGB in binario in ordine inverso (BGR) e leggendolo come fosse un numero intero senza segno.
    In pratica, si deve usare la seguente formula:
    R * 2 ^ 0 + G * 2 ^ 8 + B * 2 ^ 16

    Quindi, il nero diventa 0: (0 * 2^0) + (0 * 2^8) + (0 * 2^16)
    Il bianco diventa 16581375: (255 * 2^0) + (255 * 2^8) + (255 * 2^16)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.