diff --git a/tetris.py b/tetris.py --- a/tetris.py +++ b/tetris.py @@ -7,30 +7,30 @@ class Piece: self.variants=variants -pieces=[] +pieceSet=dict() -pieces.append(Piece([ +pieceSet["sq"]=Piece([ # OO # OO ((0,0),(0,1),(1,0),(1,1)) -])) +]) -pieces.append(Piece([ +pieceSet["long"]=Piece([ # OOOO ((0,0),(0,1),(0,2),(0,3)), ((0,0),(1,0),(2,0),(3,0)) -])) +]) -pieces.append(Piece([ +pieceSet["boat"]=Piece([ # OOO # .O. ((0,0),(0,1),(0,2),(1,1)), ((0,0),(1,0),(2,0),(1,1)), ((0,0),(1,-1),(1,0),(1,1)), ((0,0),(1,-1),(1,0),(2,0)) -])) +]) -pieces.append(Piece([ +pieceSet["sz"]=Piece([ # .OO # OO. ((0,0),(0,1),(1,-1),(1,0)), @@ -40,9 +40,9 @@ pieces.append(Piece([ # .OO ((0,0),(0,1),(1,1),(1,2)), ((0,0),(1,0),(1,-1),(2,-1)) -])) +]) -pieces.append(Piece([ +pieceSet["el"]=Piece([ # OOO # O.. ((0,0),(1,0),(0,1),(0,2)), @@ -56,24 +56,27 @@ pieces.append(Piece([ ((0,0),(0,1),(1,0),(2,0)), ((0,0),(1,0),(1,1),(1,2)), ((0,0),(1,0),(2,0),(2,-1)) -])) +]) -WIDTH=5 +WIDTH=8 HEIGHT=5 board=[[EMPTY]*WIDTH for r in range(HEIGHT)] -def fill(board): +def fill(board,pieces): point=firstEmpty(board) if not point: return True res=[] - for p in pieces: + for (i,(k,p)) in enumerate(pieces): + if k==0: continue for v in p.variants: if place(board,point,v): - partialRes=fill(board) + pieces[i][0]-=1 + partialRes=fill(board,pieces) if partialRes: res+=[((point,v), partialRes)] remove(board,point,v) + pieces[i][0]+=1 return res @@ -112,7 +115,7 @@ def visualise(board,tree,letter="A"): visualise(board,rest,chr(ord(letter)+1)) -res=fill(board) +res=fill(board,[[k,pieceSet[x]] for (k,x) in [(2,"sq"),(2,"el"),(2,"boat"),(2,"long"),(2,"sz")]]) if res: visualise(board,res) else: