Nerd Paradise
Home
About
Puzzles
Math
Programming
Origami
Japanese
MSPaint
Home > Programming > Tetris in Python in under 2KB of Code

Tetris in Python in under 2KB of Code

I wrote Tetris in Python 2.6 and PyGame. The code is under 2 KB (1920 bytes).

Let me preface this by saying this is not the correct way to write code in general. This was purely for shits-n-giggles.

import random as n
import pygame
from pygame import *
def k(w,h):return m(lambda x:[0]*h,' '*w)
def cg(g):return m(lambda x:x[:],g)
def ro(o,c,r):return o if r<1 else ro(m(lambda x:m(lambda y:o[y][3-x-1+c],b(4)),b(4)),c,r-1)
def mo(o):
 p=n.choice(m(lambda x:[x%3+1,x in(0,3),m(lambda y:ord(y)-97,'bfjn cgkj bfjk fgjk cgfj bfgk befg'.split()[x])],b(7)))
 for t in p[2]:o[t%4][t/4]=p[0]
 return o,p[1]
m,b,v,z,L=map,range,filter,255,len
def q(a,o,x,y,n=1):
 g=cg(a)
 for c in b(16):
  tx,ty,p=c%4+x,c/4+y,o[c%4][c/4]
  if p:
   if tx<0 or tx>9 or ty>19 or (a[tx][ty] and n):return 3
   g[tx][ty]=p
 return g
def cl(r,l,t=lambda g:m(lambda x:m(lambda y:g[y][x],b(L(g))),b(L(g[0])))):
 r=v(lambda x:0 in x,t(r))
 return t([[0]*10]*(20-L(r))+r),l+20-L(r)
def dm(o,a,ox,oy,dx,dy):
 ox=ox if q(a,o,ox+dx,oy)==3 else ox+dx
 return(a,o,ox,oy+dy)if(dy==0 or q(a,o,ox,oy+dy)!=3)else(q(a,o,ox,oy),3,ox,0)
def mn(e,s,a,o,ox,oy,fc,ck,cn,l,dr,j,t,f):
 while not('12-Quit'in e or"y': 27,"in e):
  fc,d,y,e=fc+1+5*key.get_pressed()[274]+l/15,((l/10)%7),'0201120 0020110 2001022 0222101 1120011 0000202'.split(),str(v(lambda x:x.type!=3,event.get()))
  c=[[0]*3,[z]*3]+[m(lambda x:127*int(y[:3][x][d]),b(3)),m(lambda x:127*int(y[3:][x][d]),b(3))]
  dx=-1 if("y': 276"in e)else 1 if("y': 275"in e)else 0
  ox,oy=(3,0)if o==3 else (ox,oy)
  o,cn = (o,cn) if o!=3 else mo(k(4,4))
  r=3 if("y': 32,"in e)else 1 if("y': 273"in e)else 0
  o=ro(o,cn,r)
  o=o if q(a,o,ox,oy)!=3 else ro(o,cn,4-r)
  a,o,ox,oy=dm(o,a,ox,oy,dx,(fc>30)+0)
  fc=fc*(fc<31)
  ra=a if o==3 else q(a,o,ox,oy,0)
  if ra==3:return
  a,l=(a,l)if o!=3 else cl(a,l)
  s.fill(c[0])
  for y in b(200):dr(s,c[ra[y%10][y/10]],Rect((y%10)*15+j,t+(y/10)*15,15,15))
  dr(s,c[1],Rect(j,t,151,301),1),s.blit(f.render("Lines: "+str(l),0,c[1]),(j,t/2)),display.flip(),ck.tick(60)
mn(init(),display.set_mode((640,480)),k(10,20),3,0,0,0,time.Clock(),1,0,draw.rect,245,85,font.Font(None,24))

But that code doesn't look exciting at all. So I spiced it up a bit:

import  random  as  n
def k(w,h): return m(
lambda x:[0]*h,' '*w)
def cg( g): return m(
lambda x: x[ : ], g )
from  pygame import *
def mo(neato = None):
          p,z,e=n.choice(m(lambda x:[x %
          3+1,x in(0,3),m(lambda y: ord(
          y)-97,('bfjn cgkj bfjk fgjk '+
          'cgfj bfg'+'k befg' ).split()[
          x]) ], b(7))), neato, range(3)
          for t in p[2]:z[t%4][t/4]=p[0]
          return (None, neato, p[1])[1:]


def ro(o, c, r):
 return  o  if (
 r < 1) else ro(
 m( lambda x: m(
 lambda y : o[ y
 ][3 - x - 1+c], 
 b(4)), b( 4 )),
 c, r-1 + L([]))
m,b, L,v,z,Q = (
 map, range,len,
 filter, 255,42)
def q(a, o, x,y,
 n=1, z = None):
 g, z=cg(a),None
 for c in b(16):
  tx,ty,p=(c %4+
 x,c / 4 + y, o[
 c % 4] [c / 4])
  if p:#Hi there 
   if(tx<0 or tx
 >9 or ty>19 or(
 a[tx][ty] and n
  )): return 2+1
   g[tx][ty] = p
 return [g,1][0]






def mn(e, s, a, o, ox, oy, fc, ck, cn, l, dr, j, t, f, x=32):
 cc, kgp = (('0201120 0020110 2001022 0222101 1120011 0000202'
 ).split(),key.get_pressed,None, lambda x:(x[:],None,16))[:2]
 while not (('12-Quit' in e) or "y': 27, " in e or((kgp()[308
 ] or key.get_pressed()[307]) and ", ', 'key': 285," in e )):
  fc, d,y,e=(fc + 1 + 
5 * kgp()[274]+l/15,(
(l/10)%7), cc, str(v(
lambda x: x.type !=3,
event.get( ))), None,
L,Q, 16, None, L)[:4]
  c=[[0]*3,[z]*3] + [
m(lambda x: 127 *int(
  
  
  
  
  y[ :3][x][d] ), b(3)), m(lambda x: z / 2 * int(
  y[3: ][x][d]), b(3))][ : L([None, None, None])]
  dx = -1 if ("y': 276" in e) else 1 if( "y': " +
  "275" in e) else ( sum(b(8)[-1:][:0]) * 16 * z)
  ox,oy = (3, 0) if o == L(b(1+ 2)) else (ox, oy)
  o, cn = (o, cn)[:] if o != 3  else mo( k(4, 4))
  r = 3 if ("y': 32," in e) else (1 if( "y': 273" 
  in e) else (L(a[ :]) * (z - 255) * L(e + '.')))
  o=ro(o,cn, [r, None, b(1), e == 'True'][:1][0])
  o=o if q(a, o, ox,oy) !=3 else ro(o, cn, 4 - r)
  a, o, ox, oy=dm(o, a, ox, oy, dx,(fc > 30) + 0)
  fc = fc * (fc < (z - 224)) + 80 / z + L([z])- 1
  ra = a if o == L(b(3)) else q( a, o, ox, oy, 0)
  if ra ==(9/3): return [a, ra, o, ox, oy, cn, z]
  a,l = (a, l) if o != L(b(z / 80)) else cl(a, l)
  df,ckt=(display.flip, s.fill(c[0]))[0], ck.tick
  for y in b(200):  dr( s, c[ra[y % 10][y / 10]],
  Rect((y % 10)*15 + j, t+(y / 10) * 15, 15, 15))
  dr(s,c[1],Rect(j,t,151,301),1),s.blit(f.render(
  "Lines: " +str(l),0,c[1]),(j,t/2)),df(),ckt(60)





def cl (r, l, tw =
lambda g: m(lambda
x: m( lambda y :g[
y][x ], b( L(g))),
b( L( g[1- 1])))):
 r = v( lambda x:0
 in [x ][0],tw(r))
 return (tw([[ 0]*
 10]*(20-L(r))+r),
 l+20-L(r),'')[:2]
def dm(o, a, ox, oy, dx, dy, t=None,y=0):
 ox=ox if q(a, o,ox + dx,oy)==3 else(ox +
 dx+L(b(0)[:])) # Written by Blake O'Hare  
 return(a, o,ox, oy+dy) if (dy==0 or q(a,
 o,ox, oy + dy)!=3) else(q(a, o, ox, oy),
 3, ox, 0, None, [0] *3, z, z, 0, 16)[:4]
mn(init(), [display.set_mode((z/255* 640, 
480))][:1][z /256],
k(10, 20), 3, 0, 0,
L([]),time.Clock(),
1,z/256, draw.rect,
245, 85, font.Font(
None, 24)), b(6)[:]

I had to add some neutral gibberish to get it neatly formatted, but yes, it still runs. No semicolons, either!


You are visitor #000388
Get notified about new posts by following the newfangled twitter account.
Best viewed with
© 1999 Nerd Paradise