martes, 27 de octubre de 2015

#Gato#

#Gato#


Autor: Javier Araneda
Competencia: Tecnologías de la información (Nivel 2)
Asignatura: Desarrollo de aplicaciones cliente servidor.

Palabras clave: python, programación, ip, juego,gato,puertos,port.


Descripción de la actividad:  

Este trabajo fue un trabajo de en python, no recuerdo exactamente que trabajo fue, El punto es que teníamos que hacer un gato. python. El profe nos dio de "esqueleto" con la estructura del gato:


    print "                    "
    print "     1   2   3      "
    print "   +---+---+---+    "
    print "1  | %c | %c | %c | " % (M[0], M[1], M[2])
    print "   +---+---+---+    "
    print "2  | %c | %c | %c | " % (M[3], M[4], M[5])    
    print "   +---+---+---+    "
    print "3  | %c | %c | %c | " % (M[6], M[7], M[8])
    print "   +---+---+---+    "
    print "                    "


El objetivo es mediante sockets establecer la conexión desde el "cliente" al servidor" y poder jugar gato. El cliente envía las coordenadas donde quiere colocar su marca, y luego el servidor envía una respuesta. Toda la información "grafica" se muestra en el lado del cliente mientras que . Cuando se cumple el criterio de "Ganar" o "Empatar" el servidor lo analiza y envía un mensaje saludando al ganador y termina la conexión




Y al final el código de fuente termino siendo esto:


Cliente: 

 import socket ,os
    def Jugada():

        while True:    

            tablero()  

            f = raw_input("fila   : ")
            
            try:
                f=int(f)
            except ValueError:
                tablero()            
                f = raw_input("fila   : ")
                
        
            if f<=3:
                break
            

        while True:    
            tablero() 
            c = raw_input("Colmna   : ")
            
            try:
                c=int(c)
            except ValueError:
                tablero()            
                print "fila    :",f
                c = raw_input("Columna   : ")
                
            
            if c<=3:
            
                break    
                
        return 3*(int(f)-1) + (int(c)-1)

    def tablero():
        os.system("cls")
        print "                    "
        print "     1   2   3      "
        print "   +---+---+---+    "
        print "1  | %c | %c | %c | " % (M[0], M[1], M[2])
        print "   +---+---+---+    "
        print "2  | %c | %c | %c | " % (M[3], M[4], M[5])    
        print "   +---+---+---+    "
        print "3  | %c | %c | %c | " % (M[6], M[7], M[8])
        print "   +---+---+---+    "
        print "                    "

        
    M = ['#','#','#','#','#','#','#','#','#']
    end=False
    #Crear un socket para la conexion con el servidor. Puede dejarlse sin parametros
    #o se puede escribir    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s = socket.socket()
     
    #los parametros de metodo connect son el numero IP del servidor y el numero del puerto
    s.connect(("localhost", 9999))
    s.send("juguemos")

     
    #Creamos un bucle para mantener la conexion
    while True:
        
        p=Jugada()
        while True:
            
            if M[p]!='X' and M[p]!='O':
                    
                    
                    break
            else:
                tablero()
                p=Jugada()
          
        M[p] = 'X'
        tablero()
        s.send(str(p))        
                     
            
            
        while True:
            if (M[0]=="X" and M[1]=="X" and M[2]=="X"):
                print "\n\nGane"
                end=True
                break
            elif (M[3]=="X" and M[4]=="X" and M[5]=="X"):
                print "\nGane"
                end=True
                break
            elif (M[6]=="X" and M[7]=="X" and M[8]=="X"):
                print "\nGane"
                end=True
                break
            elif (M[0]=="X" and M[3]=="X" and M[6]=="X"):
                print "\nGane"
                end=True
                break
            elif (M[1]=="X" and M[4]=="X" and M[7]=="X"):
                print "\nGane"
                end=True
                break
            elif (M[2]=="X" and M[5]=="X" and M[8]=="X"):
                print "\nGane"
                end=True
                break
            elif (M[0]=="X" and M[4]=="X" and M[8]=="X"):
                print "\nGane"
                end=True
                break        
            elif (M[2]=="X" and M[4]=="X" and M[6]=="X"):
                print "\nGane"
                end=True
                break
            else:
                break
        
        
        if end==True:
            break
        
        p = int(s.recv(2))
        print "indice recibido = ", p, "\n"
        M[p] = 'O'
        
        while True:
            if (M[0]=="O" and M[1]=="O" and M[2]=="O"):
                print "\n\nPerdi"
                break
            elif (M[3]=="O" and M[4]=="O" and M[5]=="O"):
                print "\nPerdi"
                break
            elif (M[6]=="O" and M[7]=="O" and M[8]=="O"):
                print "\nPerdi"
                break
            elif (M[0]=="O" and M[3]=="O" and M[6]=="O"):
                print "\nPerdi"
                break
            elif (M[1]=="O" and M[4]=="O" and M[7]=="O"):
                print "\nPerdi"
                break
            elif (M[2]=="O" and M[5]=="O" and M[8]=="O"):
                print "\nPerdi"
                break
            elif (M[0]=="O" and M[4]=="O" and M[8]=="O"):
                print "\nPerdi"
                break        
            elif (M[2]=="O" and M[4]=="O" and M[6]=="O"):
                print "\nPerdi"
                break
            else:
                break
            
    print "\nel juego ha terminado"
    #s.close()
----------------

Servidor: 

import socket
from random import randrange

M = ['#','#','#','#','#','#','#','#','#']

# Crear un socket para que el servidor acepte conexiones de clientes
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# El metodo bind() identifica el puerto de escucha y la IP desde donde el servidor
# aceptara conexiones (dejamos esa IP en blanco para que acepte de cualquiera)
s.bind(("", 9999))

print "\n\nservidor esperando un contendor\n\n"

# el metodo listen() acepta tantas conexiones como el valor que le pasemos (1 en este caso)
s.listen(1)

# Crear un socket para escuchar al cliente. Al aceptar una conexion se obtiene la tupla add
# que contiene IP:puerto que identifica la IP del cliente y su puierto
sc, addr = s.accept()
mensaje = sc.recv(10)
if mensaje=="juguemos":
    print "jugando con cliente ", addr[0]
   
apagar = False      
while True:
    # El metodo recv recibe tantos bytes como le indiquemos
    p = int(sc.recv(2))
    print "indice recibido = ", p
   
    if p==9:
        break
           
    M[p] = 'X'
   
    while True:
        if (M[0]=="X" and M[1]=="X" and M[2]=="X"):
            print "\n\nPerdi"
            apagar=True
            break
        elif (M[3]=="X" and M[4]=="X" and M[5]=="X"):
            print "\nPerdi"
            apagar=True
            break
        elif (M[6]=="X" and M[7]=="X" and M[8]=="X"):
            print "\nPerdi"
            apagar=True
            break
        elif (M[0]=="X" and M[3]=="X" and M[6]=="X"):
            print "\nPerdi"
            apagar=True
            break
        elif (M[1]=="X" and M[4]=="X" and M[7]=="X"):
            print "\nPerdi"
            apagar=True
            break
        elif (M[2]=="X" and M[5]=="X" and M[8]=="X"):
            print "\nPerdi"
            apagar=True
            break
        elif (M[0]=="X" and M[4]=="X" and M[8]=="X"):
            print "\nPerdi"
            apagar=True
            break      
        elif (M[2]=="X" and M[4]=="X" and M[6]=="X"):
            print "\nPerdi"
            apagar=True
            break
        else:
            break  
    if apagar==True:
        break

   
    while True:
        k = randrange(0, 9)
        if M[k] == '#':
            M[k] = 'O'
            break

    print "indice enviado = ", k, "\n"
    # El servidor le responde al cliente
    sc.send(str(k))
   
    while True:
        if (M[0]=="O" and M[1]=="O" and M[2]=="O"):
            print "\n\nGane"
            apagar=True
            break
        elif (M[3]=="O" and M[4]=="O" and M[5]=="O"):
            print "\nGane"
            apagar=True
            break
        elif (M[6]=="O" and M[7]=="O" and M[8]=="O"):
            print "\nGane"
            apagar=True
            break
        elif (M[0]=="O" and M[3]=="O" and M[6]=="O"):
            print "\nGane"
            apagar=True
            break
        elif (M[1]=="O" and M[4]=="O" and M[7]=="O"):
            print "\nGane"
            apagar=True
            break
        elif (M[2]=="O" and M[5]=="O" and M[8]=="O"):
            print "\nGane"
            apagar=True
            break
        elif (M[0]=="O" and M[4]=="O" and M[8]=="O"):
            print "\nGane"
            apagar=True
            break      
        elif (M[2]=="O" and M[4]=="O" and M[6]=="O"):
            print "\nGane"
            apagar=True
            break      
        else:
            break
   
    if apagar==True:
        break
print "\n\nel juego ha terminado"

#Cerramos la instancia del socket cliente y servidor
sc.close()
s.close()
.

Conclusión:


Los sockets brindan la posibilidad de conectarse entre 2 computadores a distancia, Solo con la dirección IP y un puerto de conexión. Esto permite hacer varios tipos de trabajo a distancia, también facilita un montón el envió de información atravesar de los programas.

  

No hay comentarios.:

Publicar un comentario