clp-2006-02

Propaganda
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
Download