Tetris, without levels, colors and next piece hint. Controls are as follows: O - move left P - move right Q - rotate counter-clockwise S - rotate clockwise SPACE - hard drop Scoring table: Soft drop: 1 point per row Hard drop: 2 points per row single row elimination: 100 points double row elimination: 300 points triple row elimination: 600 points tetris: 1000 points I recommend running it in fuse emulator. http://fuse-emulator.sourceforge.net/ From the command line, you can type fuse tetris.tap to run, but if you start fuse from GUI, you click Media > Tape > Open, select tetris.tap. Then you press J in the emulator (types LOAD) and Alt+P (types quotation mark) twice and hit ENTER. Note, that the program starts at line 30, that is the command to start it is RUN 30 (press R, type 30 and hit ENTER), if you type it in. The code: 10 LET s$(y,x)="#": FOR n=s TO s+2: LET u=CODE y$(n)-98: LET v=CODE x$(n)-98: LET s$(y+i*u+j*v,x+j*u-i*v)="#": NEXT n: FOR n=1 TO 21: PRINT t$(n); OVER 1;AT n,0;s$(n): NEXT n: RETURN 20 LET h=t$(y,x)="#": FOR n=s TO s+2: LET u=CODE y$(n)-98: LET v=CODE x$(n)-98: LET h=h OR t$(y+i*u+j*v,x+j*u-i*v)="#": NEXT n: RETURN 30 LET x$="acdaacaacabcabcabcccb": LET y$="bbbcbbabbbcbbccbaabcc": DIM t$(21,16): FOR n=1 TO 21: FOR t=1 TO 16: LET t$(n,t)="#"( TO t=1 OR t=16 OR n=21): NEXT t: NEXT n 40 LET x=8: LET y=3: LET i=INT (3*RND)-1: LET j=(NOT ABS i)*(2*INT (2*RND)-1): LET s=1+3*INT (RND*7): GO SUB 20: IF h THEN RUN 30 50 PRINT AT 0,0;t-17: DIM s$(21,16): GO SUB 10: LET k$=INKEY$: LET k=(k$="s")-(k$="q"): IF k THEN LET l=k*i: LET i=k*j: LET j=-l: GO SUB 20: IF h THEN LET l=k*j: LET j=k*i: LET i=-l 60 LET x=x+(k$="p")-(k$="o"): GO SUB 20: IF h THEN LET x=x-(k$="p")+(k$="o") 70 LET y=y+1: GO SUB 20: IF h THEN LET y=y-1: LET t$(y,x)="#": FOR n=s TO s+2: LET u=CODE y$(n)-98: LET v=CODE x$(n)-98: LET t$(y+i*u+j*v,x+j*u-i*v)="#": NEXT n: GO TO 90 80 LET t=t+1+(k$=" "): GO TO 50+20*(k$=" ") 90 LET u=100: LET m=20: FOR n=20 TO 1 STEP -1: LET t$(m)=t$(n): LET v=t$(n)=t$(21): LET t=t+u*v: LET u=u+100*v: LET m=m-NOT v 100 NEXT n: FOR n=m TO 2 STEP -1: LET t$(n)=t$(1): NEXT n: GO TO 40 Explanation: Same as with my EXTREME-256 submission. Subroutine 10 has been modified to always redraw the entire playing field. This makes it slower, but removes the necessity to draw the playing field separately in line 40. Since there is no room for initializing the score (in Sinclair BASIC, numeric variables do not default to zero, must be initialized), loop variable t from initialization is reused for this purpose, but since it was left with value 17 in line 30, the score display has 17 subtracted in line 50. Initialization itself in line 30 is compacted by two nested loops, instead of unrolling the inner one to long literals. This makes it slower, but smaller. Scoring is added identically to the EXTREME-256 submission.