sábado, 17 de julio de 2010

Jueguito v2

Ayer empecé el proyecto de un minijuego, clón de uno de blackberry.
Me di cuenta que sin colores era injugable, así que me puse a investigar como agregar colores a los prints de python, y me encontré con [1] en Stack Overflow, que explica como hacerlo.

Es muy fácil, con la salvedad que yo aproveche y cambié el color de fondo, en lugar del color del texto.

Ahora es mas cómodo de jugar.

La ultima versión (Provisoria) la encuentran en [2]

[1] http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python

[2] http://github.com/joac/joac-python/blob/master/minigame/minigame.py

Dejo unas capturas que hice:

 El inicio del juego


Un par de jugadas despues

Ganamos!

Si no alcanzan los movimientos... Nos espera la derrota

viernes, 16 de julio de 2010

Jueguito

El otro día, me prestaron un blackberry que tenia un jueguito que me gusto, asi que hice una versión, para la consola, del juego, he aquí el código:

import random
import os

class Square:
    """This is the abstraction of one Square"""
    def __init__(self, x, y, attrib, root):
        self.x = x
        self.y = y
        self.attrib = attrib
        self.root = root
        self.rep = attrib

class Screen:
    """The Screen Array of the game"""
    def __init__(self, x_size, y_size, tokens):
        self.x_size = x_size
        self.y_size = y_size
        self.tokens = tokens
        self.childs = []
        self.squares = []
        self.populate()
        self.childs.append(self.squares[0][0])
        self.childs[0].rep = '#'

    def get_near_to(self, child):
        vecinos = []
        if child.x - 1 >= 0:
            vecinos.append(self.get_square(child.x - 1, child.y))
        if child.y - 1 >= 0:
            vecinos.append(self.get_square(child.x, child.y - 1))
        if child.x + 1 < self.x_size:
            vecinos.append(self.get_square(child.x +1, child.y))
        if child.y + 1 < self.y_size:
            vecinos.append(self.get_square(child.x, child.y + 1))
        
        return [vecino for vecino in vecinos if(not vecino in self.childs)]


    def get_square(self, x, y):
        return self.squares[y][x]

    def populate(self):
        for y in xrange(0, self.y_size):
            self.squares.append([self.random_square(x, y) for x in xrange(0, self.x_size)])

    def random_square(self, x, y):
        
        attrib = random.choice(self.tokens)
        square = Square(x, y, attrib, self)
        
        return square
    
    def check_arround(self, child):
        """We check the attrib of the near squares"""
        vecinos = self.get_near_to(child)
        if vecinos:
            for vecino in vecinos:
                if (vecino.attrib == child.attrib):
                    vecino.rep = '#'
                    self.childs.append(vecino)

    def __repr__(self):
        output = ''
        for row in self.squares:
            output += ''.join(['%s ' % str(a.rep) for a in row])
            output += '\n'
        return output
    
    def update(self, attrib):
        for child in self.childs:
            child.attrib = attrib[0]
            self.check_arround(child)
            

if __name__ == '__main__':
    screen = Screen(10, 10, ['1', '2', '3', '4', '5'])
    print screen
    screen.update(screen.childs[0].attrib) #dirty Hack
    limit = 18 
    win = False
    for b in xrange(1, limit):
        a = raw_input('_ ')
        screen.update(a)
        os.system('clear')
        print screen
        print "%4d moves of %4d" % (b, limit)
        if len(screen.childs) == screen.x_size*screen.y_size:
            win = True
            break
    if win:
        print "You Win"
    else:
        print "You loose"