TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Jogo da velha

Por:   •  4/12/2015  •  Trabalho acadêmico  •  3.464 Palavras (14 Páginas)  •  933 Visualizações

Página 1 de 14

UNIAN-CENTRO UNIVERSITÁRIO ANHNGUERA DE NITEROI

Allan dos S Oliveira RA: 5232122439

Dayana Gonçalves Barbosa. RA: 5669141778

Walan Gomes de Oliveira Santos. RA: 5212965069

SISTEMAS DISTRIBUÍDOS

CIÊNCIA DA COMPUTAÇÃO – 7º PERÍODO

PROFESSOR: MARCELO LUCAS

NITERÓI,

29 DE NOVEMBRO DE 2015


  1. Introdução.

Para o desenvolvimento de um Sistema Distribuído foi escolhida a implementação do jogo da velha possibilitando dois jogadores se conectar e jogar através de uma rede. O jogo, escrito em Java, utiliza RMI para a comunicação entre os jogadores clientes. O seu desenvolvimento deu-se no ambiente Forte Community Edition.

  1. Justificativa.

Durante o desenvolvimento desta aplicação distribuída procuramos focar na utilização do RMIRegistry como um servidor responsável por intermediar os clientes sem a necessidade de um programa servidor rodando. Desta forma, faz-se um jogo ponto-a-ponto, onde cada qual cuidaria por manter o estado conciso do jogo.

A comunicação é feita pela passagem de mensagens através de objetos, em detrimento da troca de comandos via sockets, onde são transferidas mensagens em Strings que devem ser tratadas pela outra ponta para a dedução da mensagem.

  1. O Jogo.

        O jogo é composto por duas classes públicas e uma interface. A interface Opponent define os métodos que serão acessados remotamente. A classe OpponentImpl faz a implementação das interfaces. A classe TicTacToeRMI define os métodos que conduzirão o jogo, bem como a interface do jogo com o usuário.

  1. Opponent.java.

        Este arquivo apenas define quais métodos serão acessados remotamente.

package tictactoe;

public interface Opponent extends java.rmi.Remote {

    public void jogueiEm(int posicao, char mark)

                  throws java.rmi.RemoteException;

    public void comece(int ID) throws java.rmi.RemoteException;

    public void parceiroSaiu() throws java.rmi.RemoteException;

}

  1. OpponentImpl.java.

Implementa os métodos declarados na interface Opponent. No seu construtor, é feito o registro de um RemoteObject no RMIRegistry. Caso haja algum jogador a espera de um adversário, é feita a troca de referências de objetos remotos e o jogo poderá ser iniciado.

O método jogueiEm avisa o outro jogador da sua jogada permitindo que o jogo prossiga e que o estado do jogo seja reajustado; o método comece avisa o jogador que esperava um oponente que o jogo já pode iniciar; e oponenteSaiu é enviado caso o jogo seja interrompido por algum jogador para que este não fique esperando sem que haja jogo, segurando objetos prejudiciais ao funcionamento do ambiente.

No construtor desta classe, o programa busca por um objeto X1 no registry. Caso não exista, significa que não há pessoas esperando pra jogar, então este se registra como X1. Caso X1 exista, ele procura por O1 que seria o parceiro de X1. Caso O1 não exista, ele se registra como O1 e notifica X1 do início do jogo. Se O1 existir, ele passa a procurar por X2, O2, X3,... repetindo o algorítimo. Logo, caso um objeto seja desregistrado e o outro permanecer, poderá haver distúrbios no andamento dos programas, fazendo-se necessário que sempre deixem de existir juntos.

Segue o código da classe:

package tictactoe;

import java.rmi.*;

import java.rmi.server.*;

public class OpponentImpl extends UnicastRemoteObject implements Opponent {

  private TicTacToeRMI jogoRMI;

  public OpponentImpl(TicTacToeRMI jogo) throws Exception {

    Opponent enemy;

    int gameID = 1;

    if (System.getSecurityManager() == null) {

        System.setSecurityManager(new RMISecurityManager());

    }

    do {

      try {

        enemy = (Opponent)Naming.lookup("//"+ TicTacToeRMI.rmiHost + "/X" + gameID);

      } catch (NotBoundException xnb) {

        try {

          Naming.rebind("//" + TicTacToeRMI.rmiHost + "/X" + gameID, this);

          jogo.setMark('X');

          jogo.setTitle("X");

          jogoRMI = jogo;

          return;

        } catch (Exception re) {

          System.out.println("Exception: " + re.getMessage());

          System.exit(0);

          return;

        }

      } catch (Exception e) {

        e.printStackTrace();

        System.exit(0);

        return;

      }

      try {

        Naming.lookup("//" + TicTacToeRMI.rmiHost + "/O" + gameID);

      } catch (NotBoundException onb) {

        try {

          Naming.rebind("//" + TicTacToeRMI.rmiHost + "/O" + gameID, this);

          jogo.setMark('O');

          enemy.comece(gameID);

          jogo.setMyOpponent(enemy);

          jogo.setTitle("O");

          jogoRMI = jogo;

          return;

        } catch (Exception re) {

          System.out.println("Exception: " + re.getMessage());

          System.exit(0);

        }

      }

      gameID ++;

    } while (true);

  }

  public void jogueiEm(int posicao, char mark) throws RemoteException {

...

Baixar como (para membros premium)  txt (14 Kb)   pdf (273.2 Kb)   docx (81.2 Kb)  
Continuar por mais 13 páginas »
Disponível apenas no TrabalhosGratuitos.com