Puyopuyo in Python

Puyopuyo in Python

Als ich mir den Artikel von haskell ansah, fand ich so etwas. http://qiita.com/tanakh/items/c2e157f0a48667370b0e

Das Problem ist hier. http://okajima.air-nifty.com/b/2011/01/2011-ffac.html

Ich kann es überhaupt nicht verstehen, weil ich immer noch nicht genug Haskell-Power habe. Haskell wird vorerst beiseite gelegt Ich habe beschlossen, es in Python zu schreiben, weil es eine große Sache war.

etwas

Es hat unerwartet viel Zeit in Anspruch genommen, aber es waren nur 2 Stunden ... Nein, ich glaube, ich habe es ein wenig übertroffen. Nun nein.

Ich hätte es in c ++ schreiben sollen. Die Unannehmlichkeit, die Formatschleife for (int i = 0; i <10; ++ i) nicht verwenden zu können.

Die Breite / Höhe der Puyo-Box ist nicht fest, daher denke ich, dass sie sich so bewegen wird, wie sie ist, auch wenn sie sich vertikal und horizontal ausbreitet. Nun, ich weiß nicht, ob es sich vertikal und horizontal ausbreiten kann.

Ich habe Python 2.7.6 verschoben.

puyo.py


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

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

#Da die Python-Zeichenfolge nicht durch Angabe des Index neu geschrieben werden kann, wird sie in Bytearray konvertiert.
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'''Löschen Sie 4 oder mehr verbundene'''
    class Way:
        u'''Von welchem haben Sie gesucht?'''
        UP = 1
        DOWN = 2
        LEFT = 3
        RIGHT = 4

    def mark(dx, dy, p, dst = None):
        u'''Folgen Sie der gleichen Farbe nebeneinander'''
        if dx < 0 or dy < 0:
            return

        try:
            if puyo[dy][dx] == p:
                points.append((dx, dy))
                #Wenn Sie in Eingangsrichtung suchen, wird es unendlich oft wiederholt.
                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 oder mehr Verbindungen
                    for x, y in points:
                        puyo[y][x] = " " #Löschen

def drop():
    u'''Lass das Schwimmen fallen'''
    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]:    #Von unten verspotten
            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
    #Stimmt, wenn alles verschwindet
    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 in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python
Täglicher AtCoder # 33 in Python
Löse ABC168D in Python
Logistische Verteilung in Python
Täglicher AtCoder # 7 in Python
LU-Zerlegung in Python
Ein Liner in Python