# tetrominoes.py
# Code posted on ideone.com for copying, not for executing there
# Need to have graphics.py file available as well, for import
# Mechanical MOOC
# MIT OCW 6.189 Homework 4 - Problem 4.3.2 Tetromino
# G@R
# Created July 23, 2013
# Modified July 24, 2013
from graphics import *
class Block( Rectangle) :
def __init__ ( self , loc, color= "red" ) :
Rectangle.__init__ ( self ,
Point( loc.getX ( ) * 30 , loc.getY ( ) * 30 ) ,
Point( loc.getX ( ) * 30 + 30 , loc.getY ( ) * 30 + 30 ) )
self .setFill ( color)
self .setOutline ( "black" )
class Shape( ) :
def __init__ ( self , coords, color) :
self .blocks = [ ]
for loc in coords:
self .blocks .append ( Block( loc, color) )
def draw( self , win) :
for block in self .blocks :
block.draw ( win)
class I_shape( Shape) :
def __init__ ( self , center) :
coords = [ Point( center.x - 2 , center.y ) ,
Point( center.x - 1 , center.y ) ,
Point( center.x , center.y ) ,
Point( center.x + 1 , center.y ) ]
Shape.__init__ ( self , coords, "cyan" )
win = GraphWin( "Tetrominoes" , 200 , 210 )
shape = I_shape( Point( 3 , 1 ) )
shape.draw ( win)
win.mainloop ( )
IyB0ZXRyb21pbm9lcy5weQojIENvZGUgcG9zdGVkIG9uIGlkZW9uZS5jb20gZm9yIGNvcHlpbmcsIG5vdCBmb3IgZXhlY3V0aW5nIHRoZXJlCiMgTmVlZCB0byBoYXZlIGdyYXBoaWNzLnB5IGZpbGUgYXZhaWxhYmxlIGFzIHdlbGwsIGZvciBpbXBvcnQKIyBNZWNoYW5pY2FsIE1PT0MKIyBNSVQgT0NXIDYuMTg5IEhvbWV3b3JrIDQgLSBQcm9ibGVtIDQuMy4yIFRldHJvbWlubwojIEdAUgojIENyZWF0ZWQgSnVseSAyMywgMjAxMwojIE1vZGlmaWVkIEp1bHkgMjQsIDIwMTMKZnJvbSBncmFwaGljcyBpbXBvcnQgKgoKY2xhc3MgQmxvY2soUmVjdGFuZ2xlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2MsIGNvbG9yPSJyZWQiKToKICAgICAgICBSZWN0YW5nbGUuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQobG9jLmdldFgoKSAqIDMwLCBsb2MuZ2V0WSgpICogMzApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludChsb2MuZ2V0WCgpICogMzAgKyAzMCwgbG9jLmdldFkoKSAqIDMwICsgMzApKQogICAgICAgIHNlbGYuc2V0RmlsbChjb2xvcikKICAgICAgICBzZWxmLnNldE91dGxpbmUoImJsYWNrIikKCiAgICAgICAgCmNsYXNzIFNoYXBlKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29vcmRzLCBjb2xvcik6CiAgICAgICAgc2VsZi5ibG9ja3MgPSBbXQogICAgICAgIGZvciBsb2MgaW4gY29vcmRzOgogICAgICAgICAgICBzZWxmLmJsb2Nrcy5hcHBlbmQoQmxvY2sobG9jLCBjb2xvcikpCgogICAgZGVmIGRyYXcoc2VsZiwgd2luKToKICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja3M6CiAgICAgICAgICAgIGJsb2NrLmRyYXcod2luKQoKY2xhc3MgSV9zaGFwZShTaGFwZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY2VudGVyKToKICAgICAgICBjb29yZHMgPSBbUG9pbnQoY2VudGVyLnggLSAyLCBjZW50ZXIueSksCiAgICAgICAgICAgICAgICAgIFBvaW50KGNlbnRlci54IC0gMSwgY2VudGVyLnkpLAogICAgICAgICAgICAgICAgICBQb2ludChjZW50ZXIueCAsIGNlbnRlci55KSwKICAgICAgICAgICAgICAgICAgUG9pbnQoY2VudGVyLnggKyAxLCBjZW50ZXIueSldCiAgICAgICAgU2hhcGUuX19pbml0X18oc2VsZiwgY29vcmRzLCAiY3lhbiIpCgp3aW4gPSBHcmFwaFdpbigiVGV0cm9taW5vZXMiLCAyMDAsIDIxMCkKc2hhcGUgPSBJX3NoYXBlKFBvaW50KDMsIDEpKQpzaGFwZS5kcmF3KHdpbikKd2luLm1haW5sb29wKCkK