viernes, 29 de noviembre de 2013

Justificación del porque mi proyecto es distribuido

El proyecto Aeroseth es distribuido porque se ejecuta dentro de una red de computadoras que comparten información a través de un protocolo.

Cada computadora puede tener o no la misma hora, y aunque sea distinta, la comunicación entre las mismas no se ve distorsionada, puesto que se sincronizan utilizando mensajes.

Las computadoras envían y reciben información, con el objetivo de satisfacer las necesidades de la empresa Aeromar, entre las cuales están: la falta de un control en la entrada y salida de piezas, un registro de las bitácoras realizadas por los mecánicos, la planeación de las fechas de reparación y de los vuelos y la administración del personal.

Si dentro de la red, alguna computadora falla o presenta un desperfecto, las demás no resultan afectadas por el error.

Se pueden agregar varias computadoras al sistema original sin que haya errores entre las mismas, y pueden poseer distintas características, pero de preferencia deben poseer Windows 7.

Las unidades de procesamiento pueden realizar distintas tareas, como navegar por internet, reproducir música o escribir algún texto, al mismo tiempo que se comunican entre ellas.

miércoles, 20 de noviembre de 2013

Clase ClienteJuego

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ahorcado;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JOptionPane;

/**
 *
 * @author Alumnos
 */
public class ClienteJuego extends Frame implements ActionListener{
    private TextField letra = new TextField(1);
    private Label palabra = new Label("");
    private Label letras_ocupadas = new Label("");
    private Label ganador = new Label("");
    private Button ok = new Button("Ingresar");
    private Graphics g;
    private int comparador[];
    private String palabra_actual = "";
    private int errores = 0;
    Label turno;
    Label turno2;
    int jugador;
   
    BufferedReader entrada;
     PrintWriter salida;
    public ClienteJuego(){
        super("Juego del Ahorcado");
        Socket socket = new Socket();
        try {
            socket = new Socket("localhost",2250);
            entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            salida = new PrintWriter(socket.getOutputStream(), true);
            Thread lectura = new Thread( new Lector());
            lectura.start();
            System.out.println("Conexion Establecida con Servidor");
           
        } catch (IOException e) {
            System.err.println("No se pudo establecer la conexión");
            System.exit(1);
        }
       
        setLayout(new BorderLayout());
        setBackground(Color.yellow);
        setResizable(false);
        Canvas canvas = new Canvas();
        canvas.setSize(200,300);
        Panel p = new Panel(new GridLayout(5,1));
        Panel p1 = new Panel();
        turno = new Label("Es Turno del jugador 1 : ");
        turno2 = new Label("Es Turno del jugador 1 : ");
       
        p1.add(turno);
        p1.add(letra);
        p1.add(ok);
        Panel p2 = new Panel();
        p2.add(new Label("Palabra : "));
        p2.add(palabra);
        Panel p3 = new Panel();
        p3.add(new Label("Ha ingresado las siguientes Letras : "));
        p.add(p1);p.add(p2);p.add(p3);p.add(letras_ocupadas);p.add(ganador);

        add("West",canvas);
        add("Center",p);
        ok.addActionListener(this);
        addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent w){
        System.exit(0);
        }});

        setSize(500,330);
        show();
        g = canvas.getGraphics();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String l = String.valueOf( letra.getText().charAt(0) );
        System.out.println("La letra a mandar es: " + l);
        salida.println(l.toUpperCase());
        System.out.println("Mandando Letra a salida");
    }
   
    public static void main( String args[] ){
       
        new ClienteJuego();
    }
    private class Lector implements Runnable{
        String cadena;
        @Override
        public void run() {
            try {
                while(true){
                    cadena = entrada.readLine();
                    if( cadena != null ){
                        System.out.println("Recibiendo distinto de nulo en cliente");
                        String caracter = String.valueOf(cadena.charAt(2));
                        System.out.println("Caracter es: " + caracter );
                        if( cadena.charAt(0) == 'N' ){
                           
                            jugador = cadena.charAt(1) - 47;
                            setTitle("JUGADOR " + jugador);
                            palabra_actual = cadena.substring(2).trim();
                            String aux = "";
                            System.out.println(palabra_actual);
                            comparador = new int[ palabra_actual.length() ];
                            System.out.println("llega");
                            for(int i = 0; i < palabra_actual.length(); i++){
                                aux = aux + "_ ";
                                comparador[i] = 0;
                            }
                            System.out.println("el auxiliar es: " + aux);
                            palabra.setText(aux);
                        }else if( cadena.charAt(0) == 'C' ){
                             if( (cadena.charAt(4)-47) == jugador ){
                                 letra.enable(true);
                                turno.setText("Ingresa una letra:");
                            }else{
                                 letra.enable(false);
                                turno.setText("Espera tu turno:");
                            }
                            String aux="";
                            for(int i = 0; i < comparador.length; i++){
                                if(caracter.equals(""+palabra_actual.charAt(i)) ){
                                    comparador[i] = 1;
                                }
                                if(comparador[i]==1)
                                    aux += palabra_actual.charAt(i);
                                else
                                    aux += "_ ";
                            }
                            palabra.setText(aux);

                        }else if( cadena.charAt(0) == 'I'  ){
                            System.out.println("el jugador es: " + jugador );
                            System.out.println("Y el caracter es: " + (cadena.charAt(4)-47) );
                            if( (cadena.charAt(4)-47) == jugador ){
                                letra.enable(true);
                                turno2.setText("Ingresa una letra: ");
                            }else{
                                turno2.setText("Espera tu turno:");
                                letra.enable(false);
                            }
                            turno.setText("");
                            errores++;
                            String aux = letras_ocupadas.getText();
                            if( aux.indexOf(caracter) < 0 )
                                aux += " " + caracter;
                            letras_ocupadas.setText(aux);
                            switch(errores){
                                case 1:
                                    g.setColor(Color.red);
                                    g.fillRect(110,220,30,10);break;
                                case 2:
                                    g.fillRect(120,20,10,200);break;
                                case 3:
                                    g.fillRect(70,20,50,10);break;
                                case 4:
                                    g.fillRect(68,20,5,20);break;
                                case 5:
                                    g.setColor(Color.black);
                                    g.drawOval(50,40,40,40);break;
                                case 6:// Cuerpo
                                    g.drawLine(70,80,70,150);break;
                                case 7:// Brazos
                                    g.drawLine(70,100,40,100);break;
                                case 8:
                                    g.drawLine(70,100,100,100);break;
                                case 9:// Piernas
                                    g.drawLine(70,150,40,190);break;
                                case 10:
                                    g.drawLine(70,150,100,190);
                                    ganador.setText("Perdiste!!!");
                                    palabra.setText(palabra_actual);
                            }
                        }else if(cadena.charAt(0) == 'P' ){
                            String puntos = cadena.substring(1);
                            JOptionPane.showMessageDialog(null, "Has Perdido con " + puntos);
                        }else{
                            String puntos = cadena.substring(1);
                            JOptionPane.showMessageDialog(null, "Has Ganado con " + puntos);
                        }
                    }
                   
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("CONEXIÓN FINALIZADA");
               System.exit(0);
            }
        }
    }
}

Clase ServidorJuego

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ahorcado;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author Alumnos
 */
public class ServidorJuego {
    public static final int PUERTO = 2250;
    Socket jugadores[] = new Socket[100];
    int puntos[] = new int[100];
    BufferedReader entrada[] = new BufferedReader[100];
    PrintWriter salida[] = new PrintWriter[100];
    Thread hilos[] = new Thread[100];
    String palabras[] = {"Victor","Francisco","investigacion", "Archivo",
                "Computacion","Astronomia","Ingenieria",
                "Felicidad","Salud","Dinero","Energia",
                "Fuerza","Flojera"};
    public String actual = "lkdjakj";
    String respuesta;
     int contador;
    int errores;
    int turnoActual;
    int numJugadores = 4;
    Random generador = new Random();
    public static void main( String args[] ){
        new ServidorJuego().inicia();
    }
    public ServidorJuego(){
        actual = palabras[generador.nextInt(palabras.length-1)].toUpperCase();
    }
    public void inicia(){
        System.out.println(actual);
        try {
            ServerSocket servidor = new ServerSocket(PUERTO);
           
            for( int i = 0; i < numJugadores; i++ ){
                jugadores[i] = new Socket();
                System.out.println("Esperando jugador " + i+1);
                jugadores[i] = servidor.accept();
                System.out.println("Aceptado ");
                System.out.println("Palabra: " + actual );
                entrada[i] = new BufferedReader( new InputStreamReader( jugadores[i].getInputStream() ) );
                salida[i] = new PrintWriter(jugadores[i].getOutputStream(), true);
                salida[i].println("N" + i + " " + actual);
            }
           
            System.out.println("Palabra: " + actual );  
            System.out.println("Turno Actual " + turnoActual );
            while( contador < actual.length() && errores < 10 ){
                System.out.println(" contador de correctas = " + contador);
                System.out.println("Numero de errores: " + errores );
                String cadena = entrada[turnoActual].readLine();
                if( cadena != null ){
                    System.out.println("Distinto de nulo");
                    char letra = cadena.charAt(0);
                    System.out.println("Letra recibida: "  + letra );
                    if( actual.indexOf(letra) != -1){
                        System.out.println("Letra Encontrada");
                        int temp = 0;
                        for( int i = 0; i < actual.length(); i++ ){
                            if( actual.charAt(i) == letra ){
                                temp++;
                            }
                        }
                        System.out.println("Se encontro " + temp + " veces");
                        contador += temp;
                        System.out.println("El contador es " + contador);
                        puntos[turnoActual] += (temp*10);
                        turnoActual++;
                        if( turnoActual == numJugadores ){
                            turnoActual = 0;
                        }
                        for( int i = 0; i < numJugadores; i++ ){
                            salida[i].println("C " + letra + " " + turnoActual+1);
                        }
                    }else{
                        puntos[turnoActual] -= 2;
                        errores++;
                        System.out.println("No se encontro, hay: " + errores);
                        turnoActual++;
                        if( turnoActual == numJugadores ){
                            turnoActual = 0;
                        }
                        for( int i = 0; i < numJugadores; i++ ){
                            salida[i].println("I " + letra + " " + turnoActual+1);
                        }
                    }
                   
                    System.out.println("Turno ahora es: " + turnoActual );
                }
            }
            if( errores == 10 ){
                for( int i = 0; i < numJugadores; i++ ){
                    salida[i].println("P " + puntos[i] );
                }
            }else{
                int max = -1;
                int posicion = -1;
                for( int i = 0; i < numJugadores; i++ ){
                    if( puntos[i] > max ){
                        max = puntos[i];
                        posicion = i;
                    }
                }
                for( int i = 0; i < numJugadores; i++ ){
                    if( i == posicion ){
                        salida[i].println("G " + puntos[i] );
                    }else{
                        salida[i].println("P " + puntos[i] );
                    }
                }
            }
           
           
        } catch (IOException ex) {
            Logger.getLogger(ServidorJuego.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}