A typical game of
Tetris has 10 columns and 7 pieces. Consider a variation with fewer columns and only one piece, which repeats indefinitely.
For some pieces and column widths it is trivial to see that an infinite game is possible. For example the I tetromino with any column width or any other of the
tetrominoes with an even column width.
For other pieces, an infinite game is possible, but not trivially so. Consider the T tetromino in three columns, an infinite game is possible by following a pattern:
The first piece is horizontal with the stem of the T pointing down.
The second piece is vertical, with the stem of the T pointing to the right and the T is pushed to the left edge.
The third piece is vertical, with the stem of the T pointing to the left and the T is pushed to the right edge. |
|
For each piece and number of columns listed below, find a strategy for each which allows for an infinite game:
1. 2.
### in three columns ### in four columns
# #
#
3. 4.
### in four columns ##### in five columns
# #
#
-----------------------------------------------------
Notes:
1 - Using the reflection of an asymmetrical piece is not allowed.
2 - Use classic gravity: when a row is filled, it is removed and all rows above move down, but no fragments of one partially filled row fall into another partially filled row.
(In reply to
case 4 by Hugo)
My graphic program was not extensible to hexominos. The graphic block got too large for where it needed to be placed at the bottom. Extensive rewriting would have been required to have different graphic save areas for the horizontal and vertical positions.
So to play around with this, I wrote a text-based program:
DECLARE SUB clearIt (h!, p!, r!)
DECLARE SUB showIt (h!, p!, r!)
DECLARE SUB test ()
DIM SHARED grid(-5 TO 20, -2 TO 2), xVal(4, 6), yVal(4, 6), pcId
' by rot and square
xVal(1, 1) = -2
xVal(1, 2) = -1
xVal(1, 3) = 0
xVal(1, 4) = 1
xVal(1, 5) = 2
xVal(1, 6) = 0
yVal(1, 1) = 0
yVal(1, 2) = 0
yVal(1, 3) = 0
yVal(1, 4) = 0
yVal(1, 5) = 0
yVal(1, 6) = 1
FOR sq = 1 TO 6
xVal(2, sq) = yVal(1, sq)
yVal(2, sq) = xVal(1, sq)
NEXT
FOR sq = 1 TO 6
xVal(3, sq) = -xVal(1, sq)
yVal(3, sq) = -yVal(1, sq)
NEXT
FOR sq = 1 TO 6
xVal(4, sq) = -xVal(2, sq)
yVal(4, sq) = -yVal(2, sq)
NEXT
DEF fnscrnRow (y) = y + 10
DEF fnscrnCol (x) = x + 10
CLS
FOR r = 1 TO 20
LOCATE fnscrnRow(r), fnscrnCol(-3)
PRINT "| |";
NEXT
LOCATE fnscrnRow(21), fnscrnCol(-3)
PRINT "+-----+"
OPEN "tettext.txt" FOR OUTPUT AS #2
DO
rot = 1
posn = 0
ht = -3
pcId = pcId + 1
DO
showIt ht, posn, rot
DO
a$ = INKEY$
LOOP UNTIL a$ > ""
clearIt ht, posn, rot
SELECT CASE a$
CASE "5"
rot = rot + 1: IF rot > 4 THEN rot = rot - 4
CASE "4"
posn = posn - 1
CASE "6"
posn = posn + 1
CASE "2"
CASE CHR$(27)
END
END SELECT
LOOP UNTIL a$ = "2"
FOR row = 1 TO 20
hit = 0
FOR sq = 1 TO 6
r = row + yVal(rot, sq)
c = posn + xVal(rot, sq)
IF r > 20 THEN hit = 1: EXIT FOR
IF grid(r, c) > 0 THEN hit = 1: EXIT FOR
NEXT
IF hit THEN EXIT FOR
NEXT
row = row - 1
showIt row, posn, rot
FOR sq = 1 TO 6
r = row + yVal(rot, sq)
c = posn + xVal(rot, sq)
grid(r, c) = pcId
NEXT
GOSUB printIt
anyFull = 0
FOR row = 20 TO 1 STEP -1
full = 1
FOR i = -2 TO 2
IF grid(row, i) = 0 THEN full = 0: EXIT FOR
NEXT i
IF full THEN
anyFull = 1
FOR j = row TO 2 STEP -1
FOR i = -2 TO 2
grid(j, i) = grid(j - 1, i)
NEXT
sRow = fnscrnRow(j)
sRow2 = sRow - 1
FOR i = -2 TO 2
ch$ = CHR$(SCREEN(sRow2, fnscrnCol(i)))
LOCATE sRow, fnscrnCol(i)
PRINT ch$;
NEXT
NEXT
row = row + 1
END IF
NEXT row
IF anyFull THEN GOSUB printIt
LOOP
CLOSE
END
printIt:
FOR r = 1 TO 20
anyOn = 0
FOR c = -2 TO 2
IF grid(r, c) THEN anyOn = 1
NEXT
IF anyOn THEN
PRINT #2, "|";
FOR c = -2 TO 2
IF grid(r, c) = 0 THEN
PRINT #2, " ";
ELSE
PRINT #2, MID$("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz", grid(r, c), 1);
END IF
NEXT
PRINT #2, "|"
END IF
NEXT
PRINT #2, "+-----+"
PRINT #2,
RETURN
SUB clearIt (h, p, r)
ch$ = " "
FOR i = 1 TO 6
row = h + fnscrnRow(yVal(r, i))
col = p + fnscrnCol(xVal(r, i))
LOCATE row, col
PRINT ch$;
NEXT
END SUB
SUB showIt (h, p, r)
ch$ = MID$("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz", pcId, 1)
FOR i = 1 TO 6
row = h + fnscrnRow(yVal(r, i))
col = p + fnscrnCol(xVal(r, i))
LOCATE row, col
PRINT ch$;
NEXT
END SUB
SUB test
PRINT fnscrnCol(6)
END SUB
It doesn't play a real game of Tetris. The piece does not move at all until you drop it by pressing 2. The 5 key rotates it. Left and right are 4 and 6, and left and right bounds are not enforced, except by a crash if you drop outside the bounds.
A file record of the moves is created, and the following is a transcript of Hugo's method, going through its loop twice. I've annotated the beginning of the preliminary steps and the bounds of the loop.
Preliminary:
|AAAAA|
| A |
+-----+
| A |
+-----+
|BBBBB|
| B |
| A |
+-----+
| B |
| A |
+-----+
|CCCCC|
| C |
| B |
| A |
+-----+
| C |
| B |
| A |
+-----+
|DDDDD|
| D |
| C |
| B |
| A |
+-----+
| D |
| C |
| B |
| A |
+-----+
|EEEEE|
| E |
| D |
| C |
| B |
| A |
+-----+
| E |
| D |
| C |
| B |
| A |
+-----+
| FE |
| FD |
|FFC |
| FB |
| FA |
+-----+
| FEG |
| FDG |
|FFCGG|
| FBG |
| FAG |
+-----+
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
ReEntry here:
|HHHHH|
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
|IIIII|
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
|JJJJJ|
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
|KKKKK|
| K |
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| K |
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
|LLLLL|
| L |
| K |
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| L |
| K |
| J |
| I |
| H |
| FEG |
| FDG |
| FBG |
| FAG |
+-----+
| L |
| K |
|M J |
|M I |
|MMH |
|MFEG |
|MFDG |
| FBG |
| FAG |
+-----+
| L |
| K |
|M J N|
|M I N|
|MMHNN|
|MFEGN|
|MFDGN|
| FBG |
| FAG |
+-----+
| L |
| K |
|M J N|
|M I N|
| FBG |
| FAG |
+-----+
|OOOOO|
| O |
| L |
| K |
|M J N|
|M I N|
| FBG |
| FAG |
+-----+
| O |
| L |
| K |
|M J N|
|M I N|
| FBG |
| FAG |
+-----+
| PO |
| PL |
|PPK |
|MPJ N|
|MPI N|
| FBG |
| FAG |
+-----+
| POQ |
| PLQ |
|PPKQQ|
|MPJQN|
|MPIQN|
| FBG |
| FAG |
+-----+
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
That completes the first cycle (pieces H through Q).
|RRRRR|
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
|SSSSS|
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
|TTTTT|
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
|UUUUU|
| U |
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| U |
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
|VVVVV|
| V |
| U |
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| V |
| U |
| T |
| S |
| R |
| POQ |
| PLQ |
| FBG |
| FAG |
+-----+
| V |
| U |
|W T |
|W S |
|WWR |
|WPOQ |
|WPLQ |
| FBG |
| FAG |
+-----+
| V |
| U |
|W T X|
|W S X|
|WWRXX|
|WPOQX|
|WPLQX|
| FBG |
| FAG |
+-----+
| V |
| U |
|W T X|
|W S X|
| FBG |
| FAG |
+-----+
|YYYYY|
| Y |
| V |
| U |
|W T X|
|W S X|
| FBG |
| FAG |
+-----+
| Y |
| V |
| U |
|W T X|
|W S X|
| FBG |
| FAG |
+-----+
| ZY |
| ZV |
|ZZU |
|WZT X|
|WZS X|
| FBG |
| FAG |
+-----+
| ZY1 |
| ZV1 |
|ZZU11|
|WZT1X|
|WZS1X|
| FBG |
| FAG |
+-----+
| ZY1 |
| ZV1 |
| FBG |
| FAG |
+-----+
|
Posted by Charlie
on 2007-12-20 16:39:50 |