Juego ejercicios [Python]

Iniciado por Masita, 21 Diciembre 2009, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

braulio--

:xD Me pasa mas de lo que debería :xD

Masita

Ya estoy de vuelta. Veo que la cosa ha avanzado bastante, esta misma noche me pongo con ello!!!
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

La verdad que el crear juegos no me gusta nada, pero bueno, para que haya otro ejercicio más rápido XD

Servidor:
Código (python) [Seleccionar]
import socket
import random
import time
from time import localtime, strftime

class TresRaya():
    def __init__(self):
        self.player1 = ''
        self.player2 = ''

    def Agregar(self,value, player):
        try:
            if(int(value) in range(1,10)):
                if(value not in (self.player1+self.player2)):
                    if(player==1):
                        self.player1 += value
                    else:
                        self.player2 += value
                    return 'True'
                else:
                    return 'El casillero ya se encuentra ocupado'
            else:
                return 'El casillero seleccionado no es válido'
        except:
                return 'El casillero seleccionado no es válido'

    def Dibujar(self):
        total = self.player1+self.player2
        t = '\n ___  ___  ___  \n'
        tablero = ['' for x in range(12)]
        for i in range(10):
            if (str(i) in self.player1):
                tablero[i-1] = '|_X_|'
            elif (str(i) in self.player2):
                tablero[i-1] = '|_0_|'
            else:
                tablero[i-1] = '|___|'
        rd = t+''.join(tablero[6:9])+'\n'+''.join(tablero[3:6])+'\n'+''.join(tablero[0:3])+'\n'
        return rd

    def VerificaGanador(self, player):
        soluciones = ['123','456','789','147','258','369','159','357']
        gana = ''
        if(player==1):
            gana = self.player1
        else:
            gana = self.player2

        for s in soluciones:
            if((s[0] in gana) and (s[1] in gana) and (s[2] in gana)):
                return 1
        if(len(self.player1+self.player2) == 9):
            return 0
        return -1

Tr = TresRaya()
s = socket.socket()
s.bind(('localhost',19911))
s.listen(2)
socket_c1,addr1 = s.accept()
print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()),'Conexion desde',addr1)
socket_c2,addr2 = s.accept()
print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()),'Conexion desde',addr2)

f = random.randrange(1,3)
p = 1

if (f == 2):
    p = 2

while(True):
    if(p == 1):
        socket_c1.send(Tr.Dibujar().encode()+'\n-- PLAYER ONE [X]--\n'.encode())
        time.sleep(1)
        socket_c1.send('Juega'.encode())
        play = socket_c1.recv(100).decode()
    else:
        socket_c2.send(Tr.Dibujar().encode()+'\n-- PLAYER TWO [0]--\n'.encode())
        time.sleep(1)
        socket_c2.send('Juega'.encode())
        play = socket_c2.recv(100).decode()

    if(play=='exit'):
        if(p == 1):
            socket_c2.send('Juego Terminado por el otro jugador'.encode())
        else:
            socket_c1.send('Juego Terminado por el otro jugador'.encode())
        time.sleep(2)
        socket_c2.close()
        socket_c1.close()
        break
   
    Agrego = Tr.Agregar(play,p)
    if(Agrego == 'True'):
        win = ''
        whowin = Tr.VerificaGanador(p)
        if(whowin == 1):
            win = '\n\n\n-- Gana PLAYER' + str(p) + ' --'
        elif(whowin == 0):
            win = '\n\n\n-- EMPATE --'
        if(whowin == 1 or whowin == 0):
            socket_c1.send(win.encode())
            time.sleep(2)
            socket_c1.send('Juego Terminado'.encode())
            socket_c2.send(win.encode())
            time.sleep(2)
            socket_c2.send('Juego Terminado'.encode())
            time.sleep(2)
            socket_c2.close()
            socket_c1.close()
            break
        if(p == 1):
            p = 2
        else:
            p = 1
    else:
        if(p == 1):
            socket_c1.send(Agrego.encode())
            time.sleep(1)
        else:
            socket_c2.send(Agrego.encode())
            time.sleep(1)

print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()), 'Juego Terminado')
s.close()


Cliente:
Código (python) [Seleccionar]
import socket

s = socket.socket()
s.connect(('localhost',19911))

while(True):
    data = s.recv(100).decode()
    if(data == 'Juego Terminado' or data == 'Juego Terminado por el otro jugador'):
        break
    elif(data == 'Juega'):
        casillero = input('\nIngresa numero de casillero [1-9]: ')
        s.send(casillero.encode())
        if(casillero == 'exit'):
            s.close()
            break
    elif(data != '' and data != 'Juega'):
        print(data)


Seguro que no es para nada la mejor manera, pero quería terminarlo ya! XD
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker

#123
Y así se ve en el servidor y uno de los clientes (con errores de ingreso) :P

D:\Py>python.exe Cliente3raya.py
___ ___ ___
|___||___||___|
|___||___||___|
|___||___||___|

-- PLAYER ONE [X]--

Ingresa numero de casillero [1-9]: 1
___ ___ ___
|___||___||___|
|___||___||___|
|_X_||___||_0_|

-- PLAYER ONE [X]--

Ingresa numero de casillero [1-9]: 5
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|

-- PLAYER ONE [X]--

Ingresa numero de casillero [1-9]: o
El casillero seleccionado no es váli
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|

-- PLAYER ONE [X]--

Ingresa numero de casillero [1-9]: 6
El casillero ya se encuentra ocupado
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|

-- PLAYER ONE [X]--

Ingresa numero de casillero [1-9]: 9


-- Gana PLAYER1 --

D:\Py>


D:\Py>python.exe Servidor3raya.py
12/01/10 13:12:41: Conexion desde ('127.0.0.1', 1455)
12/01/10 13:13:39: Conexion desde ('127.0.0.1', 1456)
12/01/10 13:14:38: Juego Terminado

D:\Py>


Como puede verse, el tablero se actualiza solo cuando "te vuelve el foco", así que cuando envías la jugada debes de esperar a que te toque otra vez para que se actualice.
En realidad no se por que hice esto así, solo debeía de agregar otro llamado a TresRayas.dibujar() :xD

Supongo que con esto esta ok, así que voy pensando en un nuevo ejercicio :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

braulio--


Novlucker

#125
El siguiente es sencillo :P

"Crear un programa que abra un archivo binario y 'extraíga' todo aquello que pueda significar texto"

El mejor ejemplo de esto es strings de Sysinternals (la salida no debe de ser tal cual ese programa, sino que tiene que ser dentro de todo, 'legible')

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

Supongo que lo que pides es eliminar los caracteres extraños.

Código (python) [Seleccionar]

def filtro(x):
f = open(x)
cadena = f.read()
for i in range(len(cadena)):
x = False
for j in range(65,91):
if cadena[i] == chr(j):
x = True
for j in range(97,123):
if cadena[i] == chr(j):
x = True
for j in range(48,58):
if cadena[i] == chr(j):
x = True
if x == False:
cadena = cadena.replace(cadena[i]," ")
return cadena

binario = raw_input("Ingrese el nombre del archivo: ")
try:
cadena = filtro(binario)
cadena = cadena.split()
cadena = "  ".join(cadena)
print  cadena.upper()
except:
print "Archivo no encontrado"


Supongo que es eso lo que pedias dejo mi ejercicio por si es aceptado (me voy ya a la cama...)

El siguiente ejercicio consiste en un programa que al ejecutarlo con este formato: Nombre_del_programa -Accion -Archivo. Ejemplo: python miprograma.py -B foto.jpg

-El programa tiene que permitir: Crear, Borrar, Abrir el archivo que le demos como segundo parametro.

Este tambien es sencillito.
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

Si pero no, la idea es esa más o menos ...pero eso falla :silbar:
OPEN por defecto abre un archivo en modo texto, y estamos hablando de un binario, intenta por ejemplo abrir el notepad.exe con eso :silbar:

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Masita

#128
Es que yo lo habia intentado con un gif y un archivo en c compilado, No tengo ningun archivo .exe a mano, uso linux y el wine no me funciona. :rolleyes:

Mañana me bajo cualquier .exe y lo intento!
En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....

Novlucker

Igual deberías de haber tenido problemas con el GIF, te dejo trabajar bien? :huh:
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein