jojoj me encantan esos juegos de una sola linea y cosas así

Esto me ha recordado algo...
Yo voy mucho a un foro
http://forum.qbasicnews.com que empezó siendo de usuarios de QuickBasic, luego vivió el nacimiento de freeBASIC y ahora es una especie de híbrido. Hace un par de años estaba en pleno apogeo, y hacíamos nuestras competiciones del tipo:
- Efecto gráfico en 9 lineas
- Juego completo en menos de X caracteres de código fuente, con X normalmente siendo 256, 512 o 1024
- Juego en 64 lineas
- etc...
Esto daba mucho juego, sobre todo porque cuando decíamos "9 lineas" no valía hacer trampas y emplear el ":" para meter mil cosas por linea. No, había que currárselo

muchas veces se podían meter muchas instrucciones por linea si se pensaba un poquito. Esta fue una de mis colaboraciones (se puede ejecutar con el qbasic normal que podéis descargar de mil sitios haciendo una búsqueda en google):
Código: Seleccionar todo
' Convolution Fire by WOPR2k
' In fact this effects takes 8 lines, but the palette rutines took 3 lines
' (It looks like crap without the custom palette).
' NOTE: ** DON'T ** use copy and paste to QB in a DOS box, 'cause there
' are split lines. Copy to notepad and save it as a .BAS file.
1 IF c& = 0 THEN SCREEN 13 ELSE IF c& = 1 THEN PAINT (0, 0), 255 ELSE IF c& = 2 THEN DIM Sc%(2049) ELSE IF c& = 3 THEN LINE (128, 136)-(191, 199), 0, BF ELSE IF c& = 4 THEN s% = VARPTR(Sc%(0)) ELSE IF c& = 5 THEN DEF SEG = VARSEG(Sc%(0)) ELSE GET ( _
128, 136)-(191, 199), Sc%(0)
IF c& < 63 THEN b% = b% + 1 ELSE IF c& < 126 THEN g% = g% + 1 ELSE IF c& < 189 THEN r% = r% + 1
IF c& < 256 THEN PALETTE c&, 63 - r% + (63 - g%) * 256! + (63 - b%) * 65536!
c& = c& + 1
2 IF c& > 4 THEN POKE VARPTR(Sc%(0)) + 4 + 62 * 64 + INT(RND * 64), 255
3 FOR i% = 1 TO 62
4 FOR j% = 1 TO 62
5 p% = (PEEK(s% + 4 + 64 * i% + j%) + PEEK(s% + 4 + 64 * (i% - 1) + j%) + PEEK(s% + 5 + 64 * (i% - 1) + j%) + PEEK(s% + 5 + 64 * i% + j%) + PEEK(s% + 4 + 64 * (i% + 1) + j% + 1) + PEEK(s% + 4 + 64 * (i% + 1) + j%) + PEEK(s% + 3 + 64 * (i% + 1) + j%) _
+ PEEK(s% + 3 + 64 * i% + j%) + PEEK(s% + 3 + 64 * (i% - 1) + j%)) \ 8
6 IF p% < 256 THEN PSET (128 + j%, i% + 135), p% ELSE PSET (128 + j%, i% + 135), 255
7 NEXT j%, i%
8 IF INKEY$ = "" THEN GOTO 1
' Unreadable code.
Este fue para otro compo, uno de hacer algo más complejo pero ya en 25 lineas. Este pinta un banner enrollao en pseudo-3D mu grasioso:
Código: Seleccionar todo
message$ = " I think I have something to tell you right now... But it is this twisted life that makes it difficult... Oh, man, you got me puzzled. BYE!!! "
SCREEN 13: post% = 1: DIM banner%(224, 32): DEF SEG = &HFFA6
OUT &H3C8, 16: FOR i% = 0 TO 15: OUT &H3C9, i% * 4: OUT &H3C9, 30: OUT &H3C9, 30: NEXT: FOR i% = 0 TO 15: OUT &H3C9, i% * 2: OUT &H3C9, i% * 2: OUT &H3C9, i% * 2: NEXT
DO
IF cont% = 0 THEN
c$ = MID$(message$, post%, 1)
post% = (post% + 1) MOD LEN(message$)
FOR y% = 0 TO 7: byte% = PEEK(ASC(c$) * 8 + y% + 14): FOR x% = 0 TO 7
bit% = byte% AND 1: byte% = byte% \ 2
FOR i% = 0 TO 2: FOR j% = 0 TO 2
IF bit% = 1 THEN banner%(200 + y% * 3 + i%, (7 - x%) * 3 + j%) = 1 ELSE banner%(200 + y% * 3 + i%, (7 - x%) * 3 + j%) = 0
NEXT j%, i%, x%, y%
END IF
FOR i% = 1 TO 223: FOR j% = 0 TO 23: banner%(i% - 1, j%) = banner%(i%, j%): NEXT j%, i%
cont% = (cont% + 1) MOD 24
angulo! = angulo! + .1: IF angulo! > 3.141592653589793# THEN angulo! = 0!
angulo2! = angulo2! + .05: IF angulo2! > 2 * 3.141592653589793# THEN angulo2! = 0!
FOR i% = 0 TO 199
d% = 5 * SIN(4 * 3.141592653589793# * i% / 200 + angulo2!)
SELECT CASE INT((i% + ((angulo! * 50) / (3.141592653589793# / 2))) / 50)
CASE 0, 2, 4, 6: amplitud! = ABS(32 * SIN(angulo! + i% * 2 * 3.141592653589793# / 200))
CASE 1, 3, 5: amplitud! = ABS(32 * COS(angulo! + i% * 2 * 3.141592653589793# / 200))
END SELECT
FOR j% = 0 TO amplitud! - 1
IF banner%(i%, 32! * j% / amplitud!) = 0 THEN mcolor% = 32 + amplitud! / 4! + (16 - amplitud! / 2!) * j% / amplitud! ELSE mcolor% = 16 + amplitud! / 4! + (16 - amplitud! / 2!) * j% / amplitud!
PSET (d% + j% + 144 + 12 - 16, i%), mcolor%
NEXT j%
FOR j% = amplitud! + 1 TO 31
IF banner%(i%, ((j% - amplitud!) * 32!) / (32 - amplitud!)) = 0 THEN mcolor% = 48 - (32 - amplitud!) / 4 - (16 - (32 - amplitud!) / 2) * (j% - amplitud!) / (32 - amplitud!) ELSE mcolor% = 33 - (32 - amplitud!) / 4 - (16 - (32 - amplitud!) / _
2) * (j% - amplitud!) / (32 - amplitud!)
PSET (d% + 144 + 12 - 16 + j% - 1, i%), mcolor%
NEXT j%
FOR j% = 32 TO 33
PSET (d% + 144 + 12 - 16 + j% - 1, i%), 0
NEXT j%
FOR j% = -4 TO d%
PSET (139 + j%, i%), 0
NEXT j%, i%
LOOP WHILE INKEY$ = ""
Podéis ver un montón aquí:
http://qbnz.com/pages/downloads/limitedline/9liners.zip
Podríamos hacer algo así, una especie de "desafío" o concurso para ver qué somos capaces de hacer con este tipo de restricciones, pero para máquinas de 8 bits... ¿qué os parece la idea?