Salve,
sto implementando con il protocollo TCP un'applicazione client/server per il gioco della battaglia navale tra due giocatori (il campo di battaglia è una matrice 8x8, ogni nave ha dimensione unitaria ed ogni giocatore può collocare fino a quattro navi sul proprio campo di battaglia).
Ho scritto il seguente codice, che compilato, non ha alcun errore ma dopo aver preparato il campo di battaglia, quando si inseriscono le coordinate delle navi da colpire, il programma non va più avanti e non riesco a capire perchè!
codice Client:
codice:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
String[][] campoBattaglia= new String[8][8];
String input1, input2, input3, input4;
System.out.println("Dove vuoi la tua nave? ");
Socket clientSocket=new Socket("localhost", 6789);
BufferedReader br1= new BufferedReader(new InputStreamReader(System.in));
BufferedReader br2= new BufferedReader(new InputStreamReader(System.in));
DataOutputStream dos1=new DataOutputStream(clientSocket.getOutputStream());
DataOutputStream dos2=new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inDalServer1= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedReader inDalServer2= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
for(int k=1; k<=4; k++){
System.out.println("Inserire la coordinata x per la nave n."+ k+"!");
input1=br1.readLine();
System.out.println("Inserire la coordinata y per la nave n."+ k+"!");
input2=br2.readLine();
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if((Integer.parseInt(input1)==i)&&(Integer.parseInt(input2)==j)){
campoBattaglia[i][j]="x";
dos1.writeBytes(input1);
dos2.writeBytes(input2);
}
}
}
}
System.out.println("Ora cerca di affondare la nave avversaria! Hai quattro possibilità! ");
for(int k=1; k<=4; k++){
BufferedReader br3= new BufferedReader(new InputStreamReader(System.in));
BufferedReader br4= new BufferedReader(new InputStreamReader(System.in));
System.out.println("Inserire la coordinata x per la nave n."+ k+"!");
input3=br3.readLine();
System.out.println("Inserire la coordinata y per la nave n."+ k+"!");
input4=br4.readLine();
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if((Integer.parseInt(input3)==Integer.parseInt(inDalServer1.readLine()))&&(Integer.parseInt(input4)==Integer.parseInt(inDalServer2.readLine()))){
System.out.println("Colpita e affondata!");
}
else{System.out.println("Ritenta.Ti rimangono ancora "+ (k-1) +"possibilità!");
}
}
}
}
}}
codice Server:
codice:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws Exception {
String[][] campoBattaglia= new String[8][8];
String input1, input2, input3, input4;
ServerSocket welcomeSocket=new ServerSocket(6789);
while(true){
Socket socket;
socket= welcomeSocket.accept();
System.out.println("Dove vuoi la tua nave? ");
BufferedReader br1= new BufferedReader(new InputStreamReader(System.in));
BufferedReader br2= new BufferedReader(new InputStreamReader(System.in));
DataOutputStream dos1=new DataOutputStream(socket.getOutputStream());
DataOutputStream dos2=new DataOutputStream(socket.getOutputStream());
BufferedReader inDalClient1= new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader inDalClient2= new BufferedReader(new InputStreamReader(socket.getInputStream()));
for(int k=1; k<=4; k++){
System.out.println("Inserire la coordinata x per la nave n."+ k+"!");
input1=br1.readLine();
System.out.println("Inserire la coordinata y per la nave n."+ k+"!");
input2=br2.readLine();
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if((Integer.parseInt(input1)==i)&&(Integer.parseInt(input2)==j)){
campoBattaglia[i][j]="x";
dos1.writeBytes(input1);
dos2.writeBytes(input2);
}
}
}
}
System.out.println("Ora cerca di affondare la nave avversaria! Hai quattro posibilità! ");
for(int k=1; k<=4; k++){
BufferedReader br3= new BufferedReader(new InputStreamReader(System.in));
BufferedReader br4= new BufferedReader(new InputStreamReader(System.in));
System.out.println("Inserire la coordinata x per la nave n."+ k+"!");
input3=br3.readLine();
System.out.println("Inserire la coordinata y per la nave n."+ k+"!");
input4=br4.readLine();
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if((Integer.parseInt(input3)==Integer.parseInt(inDalClient1.readLine()))&&(Integer.parseInt(input4)==Integer.parseInt(inDalClient2.readLine()))){
System.out.println("Colpita e affondata!");
}
else{System.out.println("Ritenta.Ti rimangono ancora "+ (k-1) +"possibilità!");
}
}
}
}
socket.close();
}
}
}