2a Prova de Características das Linguagens de Programação – 2006 – 20 período – 1a questão: Considere o código abaixo, que implementa um servidor para jogar o jogo de baralho denominado 21 com diversos clientes simultaneamente. Explique minuciosamente a sua funcionalidade, bem como o significado dos comandos Java. 1. import java.net.*; 2. import java.io.*; 3. import java.util.*; 4. public class ServidorJogo#21 { 5. public static void main( String argv[] ) throws IOException { 6. ServerSocket ss = new ServerSocket( Integer.parseInt(argv[0]) ); 7. while ( true ) 8. new Jogo#21_Connection( ss.accept() ); 9. } 10. } 11. class Jogo#21_Connection extends Thread { 12. Socket sock; 13. Jogo#21_Connection ( Socket s ) { 14. sock = s; 15. setPriority( NORM_PRIORITY - 1 ); 16. start(); 17. } 18. 19. 20. 21. public void run() { try { OutputStream out = sock.getOutputStream(); InputStream in = sock.getInputStream(); //sorteia 2 cartas do baralho //envia as 2 cartas para o cliente //as cartas são enviadas no formato: //”valor valor valor\n”, onde valor {1, 2, 3, ..., 51, 52} ... //sorteia 3 cartas do baralho para o próprio servidor .... //loop // recebe o pedido do cliente por uma nova carta - “c\n” //ou cliente desiste de receber novas cartas - “f\n” .... //servidor também decide se deseja uma nova carta // ou servidor desiste de receber novas cartas .... //computa os pontos do cliente //computa os pontos do servidor ..... //responde adequadamente, isto é, envia para o cliente // uma nova carta //ou encerra o jogo, enviando uma mensagem // para o cliente com os pontos do cliente e servidor // e quem foi o vencedor e são do loop. //end loop 50. 51. 52. 53. 54. 55. 56. .... .... sock.close(); } catch ( IOException e ) { System.out.println( "I/O error " + e ); } } } Observações: i) O servidor é completamente honesto, no sentido de que ele não toma conhecimento, para favorecer a sua jogada, das cartas que já foram obtidas pelo cliente. ii) número das cartas: ás de copas –> 1; n de copas -> n; valete, dama e rei de copas -> 11, 12 e 13, respectivamente; ás de espadas –> 14; n espadas -> 13 + n; valete, dama ou rei de espadas -> 13 + 11, 13 + 12, 13 + 13, respectivamente; ás de ouro –> 27... 39 ás de paus –> 40 ... 52 valor de cada carta: seja i=MAX (número da carta, módulo 13) se 0 < i < 11 então valor da carta = i senão valor da carta = 10. 2a questão: Desenvolva uma aplicação cliente, em Java, para se conectar ao servidor da “1a questão” e com ele jogar uma partida de 21. O usuário visualizará as suas cartas, que foram enviadas pelo servidor, no vídeo e solicitará nova carta - “c\n” - ou desistirá de receber novas cartas - “f\n” – via teclado e assim sucessivamente até terminar o jogo. Supor que a inicialização do servidor se dá através do comando: > java ServidorJogo#21 5600 3a questão: Substitua os comentários do código java da primeira questão por comandos Java, de modo a tornar a classe ServidorJogo#21 completamente funcional. Isto significa que ela deverá ser compilada corretamente e que o servidor de jogos 21 deverá executar corretamente quando jogar simultaneamente com múltiplos usuários. Cada questão valerá 3,333... pontos Boa Sorte! 06.02.2007 Prof. Oscar L. M. De Farias