O código referente a um Jogo da Forca com Cliente/Servidor.
Foi utilizado Socket (DatagramSocket).
O Código abaixo é a parte do Cliente.
public class DatagramClient {
public static void main(String[] args) {
String hostname;
int port = 2018;
int len = 1024;
DatagramPacket sPacket, rPacket;
if (args.length > 0) {
hostname = args[0];
} else {
hostname = "localhost";
}
try {
InetAddress ia = InetAddress.getByName(hostname);
DatagramSocket datasocket = new DatagramSocket();
BufferedReader stdinp = new BufferedReader(
new InputStreamReader(System.in));
while (true) {
try {
// Eu queria, se fosse possível, colocar uma interface, em que
// Nessa parte de digitar a letra, na interface teria um campo de texto e um botão enviar.
System.out.print("Digite a Letra: ");
String echoline = stdinp.readLine();
if (echoline.equals("done")) {
break;
}
String letra = echoline.toLowerCase();
// Aqui o que teria digitado no campo texto, seria enviado para o Servidor;
// Datagrama enviada para o Servidor.
byte[] buffer = new byte[letra.length()];
buffer = letra.getBytes();
sPacket = new DatagramPacket(
buffer,
buffer.length,
ia,
port);
datasocket.send(sPacket);
// Aqui é a resposta vinda do Servidor, essa resposta seria setada no Text Área da interface;
// Datagrama Recebida do Servidor;
byte[] rbuffer = new byte[len];
rPacket = new DatagramPacket(rbuffer, rbuffer.length);
datasocket.receive(rPacket);
String retstring = new String(rPacket.getData(),
0, rPacket.getLength());
ArrayList<String> temp;
temp = quebraMsgServidor(retstring);
// Toda essa informação seria posta no Text Área.
System.out.println("-----------------------------------------");
System.out.println("Status do Jogo: " + temp.get(0));
System.out.println("Tentativas Restantes: " + temp.get(1));
System.out.println("Anagrama: " + temp.get(2));
System.out.println("Palavra Secreta: " + temp.get(3) + "\n");
desenhoForca(temp.get(1));
System.out.println("\n-----------------------------------------");
if (temp.get(1).equals("0") || temp.get(0).equals("Parabens! Voce Acertou a Palavra.")) {
System.out.println("Fim do Jogo!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
} // fim while
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}
} // fim main
// Função para "quebrar" a string vinda do servidor
public static ArrayList<String> quebraMsgServidor(String doServidor) {
ArrayList<String> msg = new ArrayList();
String[] t;
t = doServidor.split(Pattern.quote("*"));
for (int i = 0; i < t.length; i++) {
msg.add(t[i]);
}
return msg;
}
// Função para desenhar a Forca, mas com interface será feita através imagens setadas em um Jlabel.
public static void desenhoForca(String tentativa) {
int temp = Integer.parseInt(tentativa);
//String boneco = "";
switch (temp) {
case 6: {
System.out.print("Voce está a Salvo!!");
break;
}
case 5: {
System.out.println(" ( )");
break;
}
case 4: {
System.out.println(" ( )");
System.out.println(" |");
break;
}
case 3: {
System.out.println(" ( )");
System.out.println(" |\\");
break;
}
case 2: {
System.out.println(" ( )");
System.out.println(" /|\\");
break;
}
case 1: {
System.out.println(" ( )");
System.out.println(" /|\\");
System.out.println(" \\");
break;
}
case 0: {
System.out.println(" ( )");
System.out.println(" /|\\");
System.out.println(" / \\");
break;
}
}
}
}
O problema, acho, é fazer a interface gráfica que pegue os valos que irão ser digitados dentro do While com um Campo Texto e apos digitado ser enviado por um botão. Mas como está dentro de um While, não sei como fazer isso.
o Funcionamento seria: Usuário Digita a Letra, essa é enviada para o Servidor, esse envia de volta uma resposta que será setada no text área, se descobriu a letra, fim do jogo, se não, deverá digitar uma nova letra… e assim por diante…
Sem interface, só com stdinp.readLine(); é fácil, já está funcionando… Mas queria colocar uma interface para ficar mais amigável e mais interessante.
Se alguém poder passar dicas, soluções ou dizer que não dá pra fazer o que estou tentado seria de grande ajuda!!!
Abraço a Todos e Feliz Natal!!!