Listar ranking

1 resposta
S

Dae pessoal,

Seguente, estou com um problema.

Estou tentando fazer um jogo via socket, thread, para que usuarios se conectem ao servidor e quando o cliente se conecta pede para digitar o nome e um numero. o Sistema gera um numero rondamico e compara com o que o cliente digitou e mostra a diferença.

O que eu queria fazer é que armazene num arquivo.obj o nome e o numero dos clientes e comparece com o numero rondamico que o sistema gerou, salvasse em arquivo os 5 que mais se aproximasse desse numero rondamico e depois mostrasse um ranking.

abaixo mando as classes implementadas.


Classe cliente

view plaincopy to clipboardprint?
package trabalho;   
  
import java.awt.List;   
import java.io.IOException;   
import java.io.PrintStream;   
import java.net.Socket;   
  
  
import javax.swing.JOptionPane;   
  
  
public class Cliente {   
  
    public static void main(String args[]) {   
           
           
        try {   
                Socket conexao = new Socket("127.0.0.1", 2222);   
                PrintStream saida = new   
                PrintStream(conexao.getOutputStream());   
             
                String meuNome=JOptionPane.showInputDialog("Entre com o seu nome");   
                saida.println(meuNome);   
                String meuNumero=JOptionPane.showInputDialog("Digite o seu numero entre 1 e 50");   
               // saida.println(meuNumero);   
                saida.println(meuNumero);   
                   
                   
                Thread t = new ThreadCliente(conexao);   
                t.start();     
                   
                   
                                                             
            }   
            catch (IOException e) {   
           
                System.out.println("IOException: " + e);   
            }   
    }   
                 
}


Classe Servidor

package trabalho; 


import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Vector; 



public class Servidor { 


private static Vector clientes; 

public static void main(String args[]) 
{ 

clientes = new Vector(); 
try 
{ 

ServerSocket s = new ServerSocket(2222); 

while (true) 
{ 
System.out.print("Esperando alguem se conectar..."); 
Socket conexao = s.accept(); 
System.out.println(" Conectou!"); 

Thread t = new ThreadServidor(conexao, clientes); 
t.start(); 


} 
} 
catch (IOException e) 
{ 

System.out.println("IOException: " + e); 
} 
} 


}


Classe ThreadCliente

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Vector; 



public class Servidor { 


private static Vector clientes; 

public static void main(String args[]) 
{ 

clientes = new Vector(); 
try 
{ 

ServerSocket s = new ServerSocket(2222); 

while (true) 
{ 
System.out.print("Esperando alguem se conectar..."); 
Socket conexao = s.accept(); 
System.out.println(" Conectou!"); 

Thread t = new ThreadServidor(conexao, clientes); 
t.start(); 


} 
} 
catch (IOException e) 
{ 

System.out.println("IOException: " + e); 
} 
} 


}


Classe ThreadServidor

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.util.Vector; 



public class ThreadServidor extends Thread { 

protected static Vector clientes; 
protected static Socket conexao; 
public static String meuNome; 
public static String meuNumero; 
private int num=0; 
protected static int dif = 0; 

public ThreadServidor(Socket s, Vector clientes) 
{ 
this.conexao = s; 
this.clientes = clientes; 

} 
public void run(){ 

try 
{ 

num = ((int) ( Math.random() * 49 ))+1; 

BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream())); 
PrintStream saida = new PrintStream(conexao.getOutputStream()); 

meuNome = entrada.readLine(); 
meuNumero = entrada.readLine(); 
System.out.println("nome é: " + meuNome); 

int Xnum = Integer.parseInt(meuNumero); 

if (meuNome == null) 
{ 
return; 
} 
if (Xnum == 0) 
{ 
return; 
} 
System.out.println("num é: " + meuNumero); 
dif = num - Xnum; 
System.out.println("Random3 é: " + num); 
System.out.println("Diferença é: " + dif); 

clientes.add(saida); 


} 

catch (IOException e) 
{ 

System.out.println("IOException: " + e); 
} 
}

Segue mais uma que é a classe gravar. O que não to conseguindo e salvar no arquivo o nome, numero do cinco que mais se aproximaram do rondamico e mostra um ranking


Classe Gravar

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.List; 


public class Gravar { 

public void gravar(List lista) { 
try { 
FileOutputStream fos = new FileOutputStream( "D:\\Eclipse\\Rondomico\\trabalho\\arquivo.obj" ); 
ObjectOutputStream outStream = new ObjectOutputStream( fos ); 
outStream.writeObject( lista ); 
outStream.flush(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

} 

public List ler() { 
List object = null; 
try { 
FileInputStream fis = new FileInputStream( "D:\\Eclipse\\Rondomico\\trabalho\\arquivo.obj" ); 
ObjectInputStream inStream = new ObjectInputStream( fis ); 

object = ( List )inStream.readObject(); 
} catch (Exception e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
return object; 
} 
}

Pow se alguem puder me ajudar valeu mesmo. Sei que so tem fera aqui que pode me dar uma força.
Valeu ai galera

Abraço

SkFogo

1 Resposta

S

Dae pessoal!!

Seguinte galera, to penando para tentar gravar os numeros e o nomes dos jogadores conforme minhas classes acima.
A idéia é simples, estou trabalhando com thread e socket e um servidor rodando e quando os clientes se conectam pede para que digitem o nome e um numero. O servidor gera um numero rondamico e compara com que o cliente digitou e compara.
A idéia e ver os cinco primeiros que mais se aproximaram do numero que o servidor gerou, salvar em um arquivo.obj e depois mostrar para o cliente o ranking dos 5 jogadores que mais se aproximaram ou que acertaram.

Alguem pode me ajudar?

Do jeito que esta, esta fazendo toda a parte de comunicação cliente e servidor, no servidor vc ve o nome do cliente e o numero que ele digitou + a diferenca. no cliente mostra a tela para o cara digitar o nome e o numero dentro de uma faixa (ex. 1 a 50).

O que falta:

Salvar os 5 jogadores que mais se aproximarem do numero gerado pelo servidor, gravar em arquivo e retornar para o cliente a lista dos 5 mais.

Alguem???

Desde já grato pela ajuda de todos.

Abraço
SkFogo

Criado 27 de setembro de 2007
Ultima resposta 30 de set. de 2007
Respostas 1
Participantes 1