Puyopuyo en python

Puyopuyo en python

Quand j'ai regardé l'article de haskell, j'ai trouvé quelque chose comme ça. http://qiita.com/tanakh/items/c2e157f0a48667370b0e

Le problème est là. http://okajima.air-nifty.com/b/2011/01/2011-ffac.html

Je ne comprends pas du tout parce que je n'ai toujours pas assez de puissance de haskell. Pour le moment, haskell est laissé pour compte J'ai décidé de l'écrire en python car c'était un gros problème.

Quelque chose

Cela a pris beaucoup de temps de manière inattendue, mais c'était à peu près 2 heures ... Non, je pense que je l'ai un peu dépassé. Et bien non.

J'aurais dû l'écrire en c ++. L'inconvénient de ne pas pouvoir utiliser la boucle de format for (int i = 0; i <10; ++ i).

La largeur / hauteur de la boîte Puyo n'est pas solide, donc je pense qu'elle se déplacera telle quelle même si elle se propage verticalement et horizontalement. Eh bien, je ne sais pas si cela peut se propager verticalement et horizontalement.

J'ai déplacé python 2.7.6.

puyo.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

puyo_array = [
    "  GYRR",
    "RYYGYG",
    "GYGYRR",
    "RYGYRG",
    "YGYRYG",
    "GYRYRG",
    "YGYRYR",
    "YGYRYR",
    "YRRGRG",
    "RYGYGG",
    "GRYGYR",
    "GRYGYR",
    "GRYGYR",
]

#Étant donné que la chaîne de caractères python ne peut pas être réécrite en spécifiant l'index, elle est convertie en bytearray.
puyo = [ bytearray(line) for line in puyo_array ]

def show():
    print "-" * 8
    for x in puyo:
        print "|{}|".format(x)
    print "-" * 8
    print

def erase():
    u'''Effacer 4 ou plus connectés'''
    class Way:
        u'''Lequel avez-vous recherché?'''
        UP = 1
        DOWN = 2
        LEFT = 3
        RIGHT = 4

    def mark(dx, dy, p, dst = None):
        u'''Suivez la même couleur adjacents les uns aux autres'''
        if dx < 0 or dy < 0:
            return

        try:
            if puyo[dy][dx] == p:
                points.append((dx, dy))
                #Si vous recherchez dans le sens de l'entrée, elle se répétera indéfiniment.
                if dst != Way.RIGHT:
                    mark(dx+1, dy, p, Way.LEFT)
                if dst != Way.UP:
                    mark(dx, dy+1, p, Way.DOWN)
                if dst != Way.LEFT:
                    mark(dx-1, dy, p, Way.RIGHT)
                if dst != Way.DOWN:
                    mark(dx, dy-1, p, Way.UP)
        except IndexError as e:
            pass

    for y, line in enumerate(puyo):
        for x, p in enumerate(line):
            if chr(p) != " ":
                points = []
                mark(x, y, puyo[y][x])

                if len(points) >= 4:    #4 connexions ou plus
                    for x, y in points:
                        puyo[y][x] = " " #Effacer

def drop():
    u'''Lâchez le flottant'''
    height = len(puyo)
    assert(height > 0)
    width = len(puyo[0])
    is_zenkeshi = True
    for x in range(width):
        for y in range(0, height)[::-1]:    #Se moquer d'en bas
            if chr(puyo[y][x]) == " ":
                for y2 in range(0, y+1)[::-1]:
                    if chr(puyo[y2][x]) != " ":
                        puyo[y][x] = puyo[y2][x]
                        puyo[y2][x] = " "
                        break
            else:
                is_zenkeshi = False
    #Vrai si tout disparaît
    return is_zenkeshi


if __name__ == '__main__':
    import itertools
    for i in itertools.count():
        print i
        show()

        erase()
        if drop():
            break
    
    print "finish!!"
    show()

Recommended Posts

Puyopuyo en python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Décomposition LU en Python
Une doublure en Python