Go Back   Champions of Regnum > Español > La Taberna

La Taberna Un lugar para conversar sobre casi cualquier tema

Reply
 
Thread Tools Display Modes
Old 09-19-2008, 08:02 PM   #1
theotherhiveking
Count
 
Join Date: May 2007
Posts: 1,452
theotherhiveking has a spectacular aura abouttheotherhiveking has a spectacular aura abouttheotherhiveking has a spectacular aura about
Default [Juego estupido] Modifica el codigo

Code:
import curses

FOV_RADIUS = 10

dungeon =  ["###########################################################",
            "#...........#.............................................#",
            "#...........#........#....................................#",
            "#.....................#...................................#",
            "#....####..............#..................................#",
            "#.......#.......................#####################.....#",
            "#.......#...........................................#.....#",
            "#.......#...........##..............................#.....#",
            "#####........#......##..........##################..#.....#",
            "#...#...........................#................#..#.....#",
            "#...#............#..............#................#..#.....#",
            "#...............................#..###############..#.....#",
            "#...............................#...................#.....#",
            "#...............................#...................#.....#",
            "#...............................#####################.....#",
            "#.........................................................#",
            "#.........................................................#",
            "###########################################################"]

class Map(object):
    # Multipliers for transforming coordinates to other octants:
    mult = [
                [1,  0,  0, -1, -1,  0,  0,  1],
                [0,  1, -1,  0,  0, -1,  1,  0],
                [0,  1,  1,  0,  0, -1, -1,  0],
                [1,  0,  0,  1, -1,  0,  0, -1]
            ]
    def __init__(self, map):
        self.data = map
        self.width, self.height = len(map[0]), len(map)
        self.light = []
        for i in range(self.height):
            self.light.append([0] * self.width)
        self.flag = 0
    def square(self, x, y):
        return self.data[y][x]
    def blocked(self, x, y):
        return (x < 0 or y < 0
                or x >= self.width or y >= self.height
                or self.data[y][x] == "#")
    def lit(self, x, y):
        return self.light[y][x] == self.flag
    def set_lit(self, x, y):
        if 0 <= x < self.width and 0 <= y < self.height:
            self.light[y][x] = self.flag
    def _cast_light(self, cx, cy, row, start, end, radius, xx, xy, yx, yy, id):
        "Recursive lightcasting function"
        if start < end:
            return
        radius_squared = radius*radius
        for j in range(row, radius+1):
            dx, dy = -j-1, -j
            blocked = False
            while dx <= 0:
                dx += 1
                # Translate the dx, dy coordinates into map coordinates:
                X, Y = cx + dx * xx + dy * xy, cy + dx * yx + dy * yy
                # l_slope and r_slope store the slopes of the left and right
                # extremities of the square we're considering:
                l_slope, r_slope = (dx-0.5)/(dy+0.5), (dx+0.5)/(dy-0.5)
                if start < r_slope:
                    continue
                elif end > l_slope:
                    break
                else:
                    # Our light beam is touching this square; light it:
                    if dx*dx + dy*dy < radius_squared:
                        self.set_lit(X, Y)
                    if blocked:
                        # we're scanning a row of blocked squares:
                        if self.blocked(X, Y):
                            new_start = r_slope
                            continue
                        else:
                            blocked = False
                            start = new_start
                    else:
                        if self.blocked(X, Y) and j < radius:
                            # This is a blocking square, start a child scan:
                            blocked = True
                            self._cast_light(cx, cy, j+1, start, l_slope,
                                             radius, xx, xy, yx, yy, id+1)
                            new_start = r_slope
            # Row is scanned; do next row unless last square was blocked:
            if blocked:
                break
    def do_fov(self, x, y, radius):
        "Calculate lit squares from the given location and radius"
        self.flag += 1
        for oct in range(8):
            self._cast_light(x, y, 1, 1.0, 0.0, radius,
                             self.mult[0][oct], self.mult[1][oct],
                             self.mult[2][oct], self.mult[3][oct], 0)
    def display(self, s, X, Y):
        "Display the map on the given curses screen (utterly unoptimized)"
        dark, lit = curses.color_pair(8), curses.color_pair(7) | curses.A_BOLD    
        for x in range(self.width):
            for y in range(self.height):
                if self.lit(x, y):
                    attr = lit
                else:
                    attr = dark
                if x == X and y == Y:
                    ch = '@'
                    attr = lit
                else:
                    ch = self.square(x, y)
                s.addstr(y, x, ch, attr)
        s.refresh()
        

def color_pairs():
    c = []
    for i in range(1, 16):
        curses.init_pair(i, i % 8, 0)
        if i < 8:
            c.append(curses.color_pair(i))
        else:
            c.append(curses.color_pair(i) | curses.A_BOLD)
    return c


if __name__ == '__main__':
    try:
        s = curses.initscr()
        curses.start_color()
        curses.noecho()
        curses.cbreak()
        color_pairs()
        s.keypad(1)
        x, y = 36, 13
        map = Map(dungeon)
        while True:
            map.do_fov(x, y, FOV_RADIUS)
            map.display(s, x, y)
            k = s.getch()
            if k == 27:
                break
            elif k == 259:
                y -= 1
            elif k == 258:
                y += 1
            elif k == 260:
                x -= 1
            elif k == 261:
                x += 1
    finally:
        s.keypad(0)
        curses.echo()
        curses.nocbreak()
        curses.endwin()
        print "Normal termination."
El juego consiste en hacer que el '@' no pueda pasar por encima de '#'
__________________
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
theotherhiveking no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:03 PM   #2
Topoq
Pledge
 
Topoq's Avatar
 
Join Date: Jul 2008
Posts: 17
Topoq is on a distinguished road
Default

eeing??????? p-p-perdon-n??????
__________________
tel'nar, Cazador nv 40
ZAS EN TODA LA BOCA!- Oh! un caramelo
"Estas VERDE de envidia? ROJO de odio?. Resignate, solo algunos tenemos la sangre AZUL "ALSIUS:TU LUGAR, POCOS, PERO BUENOS"
retirado temporalmente
Topoq no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:05 PM   #3
Nidhug
Banned
 
Nidhug's Avatar
 
Join Date: Mar 2008
Location: Traficando con chimerin
Posts: 264
Nidhug is on a distinguished road
Default

Yo lo haria pero no quiero (?)
Nidhug no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:06 PM   #4
Hao_
Banned
 
Hao_'s Avatar
 
Join Date: Mar 2008
Location: Everywhere even in your dreams :p
Posts: 1,032
Hao_ will become famous soon enough
Default

Si no es lenguaje C le pego en el palo.

P.D: Lo hago a la noche y despues les cuento si me salio
Hao_ no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:10 PM   #5
leytonn
Initiate
 
leytonn's Avatar
 
Join Date: Nov 2007
Location: Cerca de la casa de Dvl
Posts: 189
leytonn is on a distinguished road
Default

Quote:
Originally Posted by theotherhiveking
El juego consiste en hacer que el '@' no pueda pasar por encima de '#'
No somos tan inteligentes como vos Hive
__________________
Hallr - Tirador
leytonn no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:11 PM   #6
arlick
Duke
 
arlick's Avatar
 
Join Date: Jan 2007
Posts: 3,939
arlick is a jewel in the rougharlick is a jewel in the rougharlick is a jewel in the rough
Default

jajaj que chulo está! eso es uno de los roguelike esos? ahora lo miró con detenimiento
__________________
"Nunca un científico ha quemado a un religioso por afirmar a Dios sin pruebas". Manuel Toharia
"uno empieza a darse cuenta que eso de no hacer ejercicio, comer y beber como si fuese la ultima cena y mantener la figura ya no existe...". Maryan
arlick no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:13 PM   #7
theotherhiveking
Count
 
Join Date: May 2007
Posts: 1,452
theotherhiveking has a spectacular aura abouttheotherhiveking has a spectacular aura abouttheotherhiveking has a spectacular aura about
Default

Quote:
Originally Posted by arlick
jajaj que chulo está! eso es uno de los roguelike esos? ahora lo miró con detenimiento
anda a jugar al dungeon crawl!

ssh crawl.akrasiac.org -l joshua

La contraseña es joshua, ahí podes jugar online.
__________________
⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺
theotherhiveking no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:13 PM   #8
leytonn
Initiate
 
leytonn's Avatar
 
Join Date: Nov 2007
Location: Cerca de la casa de Dvl
Posts: 189
leytonn is on a distinguished road
Default

Quote:
Originally Posted by theotherhiveking
anda a jugar al dungeon crawl!

ssh crawl.akrasiac.org -l joshua

La contraseña es joshua, ahí podes jugar online.
ALGUIEN QUE ME EXPLIQUE EN QUE IDIOMA HABLAN!!!!!!!!!
__________________
Hallr - Tirador
leytonn no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:19 PM   #9
Topoq
Pledge
 
Topoq's Avatar
 
Join Date: Jul 2008
Posts: 17
Topoq is on a distinguished road
Default

Quote:
Originally Posted by leytonn
ALGUIEN QUE ME EXPLIQUE EN QUE IDIOMA HABLAN!!!!!!!!!
El HOYGAN(?)
__________________
tel'nar, Cazador nv 40
ZAS EN TODA LA BOCA!- Oh! un caramelo
"Estas VERDE de envidia? ROJO de odio?. Resignate, solo algunos tenemos la sangre AZUL "ALSIUS:TU LUGAR, POCOS, PERO BUENOS"
retirado temporalmente
Topoq no ha iniciado sesión   Reply With Quote
Old 09-19-2008, 08:24 PM   #10
Roldier
Banned
 
Roldier's Avatar
 
Join Date: Mar 2008
Location: Vivo en el foro.¡¡Que alguien me pase una almohada!!
Posts: 100
Roldier is on a distinguished road
Default

Es un HOYGAN + L4MM3R, Voy a intentar comunicarme.



0|4 HYB3CyNJ, Z0i r0|Dy3r, 4|gvn0z n0 3nt3nD3m0z 3zt3 p0Zt, 3Xplyk4n0zl0 kv4nD0 Pv3D4z X f4b0r
Roldier no ha iniciado sesión   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 05:25 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
NGD Studios 2002-2024 © All rights reserved