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