Newsgroup: it.comp.java
Titolo: Re: PROGETTO SCACCHIERA

 Ok, ho appena finito di piangere per quante me ne avete dette.... :'(
Devi continuare sull'altro thread. Ti si perdona volentieri 
l'incompetenza sul linguaggio(sennò non ti rivolgeresti qui), ma un po' 
di rispetto....
-- 
Emanuele Torrenti
Registered Linux User #409659
http://torrenti.altervista.org

Ok! Allora basta perdere tempo e facciamo questa benedetta tesina...
ci aggiorni un attimo sull'oggetto Scacchiera? Hai aggiunto dei metodi per
manipolarlo?
@ManuelT: per me si può anche continuare qui, dai, basta che non se ne
aprano più... :oP

>Adesso ho questo problema: ho scritto una classe di un server che nel
main apre un socket passivo. Dopo la connessione di due client, e la
CREAZIONE DI DUE CANALI (in1 e out1, in2 e out2) DI STREAM per ogni
client, il server assegna ai due un thread (sarà giusto??) e fa
iniziare la partita, rimettendosi in ascolto per far giocare altri due
client e così via...
Nella stessa classe Server del main c'è il metodo gioca1() con cui
il Server gestisce le mosse del primo giocatore e comunica con lui
appunto attraverso gli stream, ma... il metodo gioca1() non conosce
questi stream, per lui non esistono... come faccio? Non li posso
dichiarare come variabili d'istanza, mi pare, perché non li posso
inizializzare nel costruttore!! Li devo passare al metodo come
parametri? Ma tra il main e il gioca1() c'è il run del Thread
partita!!!
Come faccio??
Spero che si capisca... sennò poi metto anche il codice!
Grazie!
---
a che ti serve creare subito i due canali? creali direttamente nel metodo
gioca1()
DataInputStream is = new DataInputStream(socket.getInputStream());
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
la variabile "socket" è il Giocatore1... ce l'hai un riferimento al
Giocatore1, no?

Brava che hai aggiunto il metodo set, piů avanti serviranno anche metodi per
controllare se č possibile effettuare una mossa o no... e cose del genere...
ma per ora va benissimo cosě ;)

mando messaggi prima.
Era una bella idea...
prova un po' a crearli due volte, dovrebbe essere possibile ;)
Cioč, ne crei uno subito per inviare il primo messaggio... e poi, nel metodo
gioca1, li crei di nuovo...

 
E no...
Il programmino della scacchiera in genere viene assegnato per far 
ragionare lo studente sugli oggetti che deve implementare e sulle 
responsabilità di ogni oggetto.
Pensandoci bene la Scacchiera non controlla se è possibile effettuare 
una mossa, in quanto una determinata mossa dipende dal singolo pezzo che 
si stà spostando e dalle regole del gioco.
La scacchiera, invece, può controllare se un pezzo viene spostato 
all'esterno della scacchiera stessa.
Quindi la struttura, in liena di massima, dovrebbe essere:
Scacchiera: mantiene una lista di Pezzo, controlla se sposto i pezzi 
fuori. Ha tutta una serie di metodi per aggiungere, eliminare, e, in 
generale, gestire la lista di Pezzio.
Pezzo: classe generica che rappresenta i vari pezzi. Ha dei metodi 
astratti tipo "public boolean canMoveTo(int x, int y)" che mi dice se un 
pezzo può essere spostato in una determinata posizione.
Cavallo, Torre, Dama, Pedina...quello che ti pare: implementano tutti i 
metodi astratti di Pezzo, in questo modo ogni pezzo sà se può mouversi 
in una determinata posizione o meno.
L'unica cosa sul quale si potrebbe riflettere un pò di più è sulla 
posizione dei singoli pezzi sulla scacchiera. Che si fà? Ogni pezzo 
mantiene la sua? O è la Scacchiera che mantiene le posizioni di tutti 
magari con una matrice? Secondo me questo dipende dal gusto personale, 
ci sono vari pro e contro.
Vista l'ora (sono le 4 di notte) non sò se ho sparato cavolate o meno. 
Spero di no.
Delvy

Io credo che si giochi a dama, non a scacchi... :P
Se si gioca a scacchi va creata per forza una classe Pezzo sennò non ne
usciamo più, se invece è la dama se ne può fare anche a meno... attendiamo
notizie...

>devo fare anche un'interfaccia grafica
Forza e coraggio! :D
Entro quanto devi consegnare il tutto?
Per quanto riguarda la gestione della scacchiera, può funzionare come hai
detto...
Hai già pensato a come gestire i turni?
Quasi quasi la classe Pezzo sarebbe utile comunque, perchè ci saranno da
gestire le dame che son diverse dalle pedine...

Ok, io provo ad andare un po' avanti...
Ditemi se secondo voi questa idea puň andare: il client comunica al
server gli spostamenti tramite 4 indici, riga-colonna di partenza,
riga-colonna di destinazione, il sever ha in gioca() tutto il codice
con le regole e capisce se la mossa č consentita, a partire dal fatto
se la casella di partenza č valida, se sto mangiando, se sono una
superdama...
Sě, l'idea puň andare... :)
Per quanto riguarda il problema dell'INVIO, probabilmente č dovuto al fatto
che anche il tasto INVIO genera la lettura un carattere ("\n") che non č un
numero, e forse per questo ti scompagina tutto... ma vabbč, frega niente...
tanto nel programma non dovrai certo passare i numeri a mano :P

Ti ho mandato via email un esempio di interfaccia grafica, così magari puoi
partire da lì...
E' una semplice griglia in cui ogni cella è rappresentata da un bottone...
Ho commentato e spiegato tutto quello che faccio, e ho cercato di scrivere
il più ordinato possibile, spero che ti sia utile!

E giusto per completezza scrivo il codice anche qui:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ProvaBottoni extends JFrame{
  char[][] mat;
  JButton[][] bot;
 public ProvaBottoni(){
  super("Prova Bottoni");
  getContentPane().setLayout(new GridLayout(8,8));
  setBounds(100,100,640,480);
  inizializzaMatrici();
  inserisciBottoni();
  setVisible(true);
  }
 public static void main(String[] args){
  new ProvaBottoni();
  }
 public void inizializzaMatrici(){
  mat=new char[8][8];
  bot=new JButton[8][8];
  int i,j;
  for(i=0;i<8;i++){
  for(j=0;j<8;j++){
  mat[i][j]='v';
  bot[i][j]=new JButton(new ImageIcon("iconaVuota.JPG"));
  bot[i][j].setActionCommand("riga: "+i+" colonna: "+j+" Casella Vuota");
  }
  }
  for(i=0;i<4;i++){
  if(i%2!=0)
  for(j=0;j<8;j=j+2){
  mat[i][j]='n';
  bot[i][j]=new JButton(new ImageIcon("iconaNera.JPG"));
  bot[i][j].setActionCommand("riga: "+i+" colonna: "+j+" Pedina Nera");
  }
  else
  for(j=1;j<8;j=j+2){
  mat[i][j]='n';
  bot[i][j]=new JButton(new ImageIcon("iconaNera.JPG"));
  bot[i][j].setActionCommand("riga: "+i+" colonna: "+j+" Pedina Nera");
  }
  }
  for(i=5;i<8;i++){
  if(i%2!=0)
  for(j=1;j<8;j=j+2){
    mat[i][j]='b';
    bot[i][j]=new JButton(new ImageIcon("iconaBianca.JPG"));
    bot[i][j].setActionCommand("riga: "+i+" colonna: "+j+" Pedina Bianca");
    }
  else
    for(j=0;j<8;j=j+2){
  mat[i][j]='b';
  bot[i][j]=new JButton(new ImageIcon("iconaBianca.JPG"));
  bot[i][j].setActionCommand("riga: "+i+" colonna: "+j+" Pedina Bianca");
  }
  }
  }
 public void inserisciBottoni(){
  for(int i=0; i<8; i++){
  for(int j=0; j<8; j++){
  add(bot[i][j]);
  bot[i][j].addActionListener(new Ascoltatore());
  }}
 }
 }
 class Ascoltatore implements ActionListener{
  public void actionPerformed(ActionEvent e){
   System.out.println("Premuto "+e.getActionCommand());
   }
  }

Giuseppe Valerio ha scritto:

Io ho fatto una cosa del genere al corso di programmazione ad Oggetti.
Anche trattandosi di una dama, il ragionamento è lo stesso.
Ed è lo stesso qualsiasi tipo di gioco che fai sulla Scacchiera, bisogna 
sempre porre un occhio alla possibilità di riutilizzare il codice.
Addirittura quello che ho dovuto fare io è la così detta quadriglia:
in pratica due coppie di giocatori si sfidano su due scacchiera in 
partite completamente asincrone (nel senso che se una coppia và più 
veloce e fà più mosse non succede niente). Il bello è che in una stessa 
squadra un giocatore gioca con un colore e l'altro giocato con l'altro 
in modo tale che quando il giocato A mangia le pedine del suo 
avversario, il giocatore B le può prendere ed inserire sulla sua 
Scacchiera "tipo rinforzo", e viceversa.
Il tutto con interfaccia grafica.
il lavoro prevedeva la realizzazione anche della dama semplice, e 
ingegnerizzare bene tutti gli oggetti in gioco è stato utilissimo al 
momento dell'implementazione delle quadriglia.
Delvy