Files
@ fba1a2015cf3
Branch filter:
Location: Tetris/tetris.py - annotation
fba1a2015cf3
2.1 KiB
text/x-python
rotace dílků
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 86543e726ef8 ac1b7e45a643 ac1b7e45a643 86543e726ef8 86543e726ef8 ac1b7e45a643 e79c5818edfd ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 86543e726ef8 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 ac1b7e45a643 | EMPTY="."
FULL="O"
class Piece:
def __init__(self,variants):
self.variants=variants
pieceSet=dict()
pieceSet["sq"]=Piece([
# OO
# OO
((0,0),(0,1),(1,0),(1,1))
])
pieceSet["long"]=Piece([
# OOOO
((0,0),(0,1),(0,2),(0,3)),
((0,0),(1,0),(2,0),(3,0))
])
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))
])
pieceSet["sz"]=Piece([
# .OO
# OO.
((0,0),(0,1),(1,-1),(1,0)),
((0,0),(1,0),(1,1),(2,1)),
# OO.
# .OO
((0,0),(0,1),(1,1),(1,2)),
((0,0),(1,0),(1,-1),(2,-1))
])
pieceSet["el"]=Piece([
# OOO
# O..
((0,0),(1,0),(0,1),(0,2)),
((0,0),(1,0),(2,0),(2,1)),
((0,0),(1,-2),(1,-1),(1,0)),
((0,0),(0,1),(1,1),(2,1)),
# OOO
# ..O
((0,0),(0,1),(0,2),(1,2)),
((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=8
HEIGHT=5
board=[[EMPTY]*WIDTH for r in range(HEIGHT)]
def fill(board,pieces):
point=firstEmpty(board)
if not point: return True
res=[]
for (i,(k,p)) in enumerate(pieces):
if k==0: continue
for v in p.variants:
if place(board,point,v):
pieces[i][0]-=1
partialRes=fill(board,pieces)
if partialRes:
res.append(((point,v), partialRes))
remove(board,point,v)
pieces[i][0]+=1
return res
def firstEmpty(board):
for (r,row) in enumerate(board):
for (c,cell) in enumerate(row):
if cell==EMPTY:
return (r,c)
return None
def place(board,point,piece):
(r,c)=point
if not all(0<=r+ri<HEIGHT and 0<=c+ci<WIDTH and board[r+ri][c+ci]==EMPTY for (ri,ci) in piece):
return False
for (ri,ci) in piece:
board[r+ri][c+ci]=FULL
return True
def remove(board,point,piece):
(r,c)=point
for (ri,ci) in piece:
board[r+ri][c+ci]=EMPTY
def visualise(board,tree,letter="A"):
if tree is True:
for row in board:
print("".join(row))
print()
return
for (((r,c),piece),rest) in tree:
for (ri,ci) in piece:
board[r+ri][c+ci]=letter
visualise(board,rest,chr(ord(letter)+1))
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:
print(res)
|