Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
 

Autor Hilo: Teletexto - The Videogame... ¡Hagámoslo entre todos! (Leído 8865 veces)

Zael

  • T-600
  • Mensajes: 4 726
  • El Caloret
Un seguundo, ¿Ninguna estartap de tecnologia' raro


¡Deka tío! ¡Ancient Bits es pura tecnología! ¡Y Sinclair Research también! Hasta las boinas de Periko me atrevería a decir que están a la vanguardia tecnológica...  ;)  :P


Bueno, voy a poner el código para ver si alguien ayuda con la parte que falta del mini-juego o sólo por si a alguien le pica la curiosidad esto del BASIC. Vuelvo a insistir en que estoy alucinado con esto de la programación. El llamar "lenguajes de programación" a estos códigos no es para nada exagerado, es que realmente son auténticos lenguajes con su sintaxis, gramática, etc.

Me resulta muy curioso ver cómo se puede lograr el mismo resultado de distintas formas, o cómo responde el ordenador de una manera u otra según escribas el código de un modo u otro.









El código principal para este "Catacroker - La Bolsa o la Vida" lo he sacado de un juego llamado "Catch" dentro de un programa llamado "Onliners" que es una recopilación de mini-juegos de una única línea de código. Todo esto viene en una carpeta de programas .BAS de ejemplo con el propio BASin...




El mini-juego, tal como viene, muestra una "U" debajo de la pantalla que tiene que coger una "o" que cae desde arriba de la pantalla. Tienes 3 vidas y al final te muestra el número de veces que has capturado la bolita.











Yo le agregué una gráfica bursátil hecha con PLOT y DRAW (mediante el genial programa ZX DRAW que te genera el código del gráfico) para remarcar el carácter bursátil del juego...





... ¡¡pero cuidado, el comando CLS que hay en medio del programa me borra la gráfica!! Pues nada, lo borramos y ya está... ¡¡ya está bien jodida la cosa!!




Gráfica bursátil añadida (línea 10) + CLS borrado = Programa "cagado"



Al parecer ese CLS estaba ahí para evitar la acumulación de PRINTS en pantalla tanto de las letras (que representan las acciones de cada empresa) que caen como de la letra "U" inferior que recoge las letras que caen. Si quitamos el CLS los PRINTS de esas letras se acumulan y dejan un rastro horrible tras de sí que lo hace injugable.









Esto seguramente habrá alguna manera más fácil de solucionarlo, pero yo lo que hice fue borrar el CLS, y para evitar "el rastro de letras" edité la línea del PRINT añadiendo que pinte un espacio vacío " " detrás de cada letra...


Código: [Seleccionar]
PRINT AT h,x;"F";AT 21,a;"U";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" "



Así evitamos el "rastro de letras" y es totalmente jugable








Por último, edito un UDG para cambiar la "U" que recoge las acciones que caen por un pequeño y afable inversor que alza las manos ante el crack bursátil que se le avecina...








Como curiosidad comentar que al caer las letras "cortan" la gráfica. Esto puede evitarse metiendo el código de PLOT y DRAW antes del código "FOR h=0 TO 21" Si metes el código después de eso la gráfica no se corta pero el juego se relentiza enormemente. ¿Alguna explicación para esto, por favor?










Bueno, y ahora lo importante, las cosas que quedan por pulir...


THINGS TO DO...



1) He intentado de mil formas hacer que cada vez caiga una letra (acción) distinta según la empresa (A=Ancient Bits, F=FaseBonus, W=Worlds, etc.)

He probado cosas como poner LET a$= A,F,W... pero no se puede. Lo que sí se puede es asignar varios valores con el código de cada letra, poniendo LET a$= CHAR$ (65 or 66 or 67). Esto da como resultado un hermoso "?" cayendo.

También he probado a poner esto, que es el código que nos dio hikoki para generar pseudoaleatoriamente el 1X2 de la quiniela...


10 LET a$="AFW(el resto de las iniciales de las empresas)":
LET p=0:
LET a=15:
FOR F=0 TO 2:
LET x=INT (RND*22):
INK 2:
PLOT 32,120:
DRAW 21,26:
DRAW 35,-59:
DRAW 18,19:
DRAW 39,-50:
DRAW 19,15:
DRAW 56,-55:
DRAW 0,10:
DRAW -10,-10:
DRAW 10,0:
INK 0:
FOR h=0 TO 21:
PRINT AT h,x;a$(1+INT (RND*3));AT 21,a;"\a";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" ":
LET a=a+(INKEY$="8")*(a<30)-(INKEY$="5")*(a>0):
NEXT h:
BEEP (x<>a),0:
LET p=p+(a=x): LET f=f-(a=x):
NEXT F:
PRINT AT 0,0;"         FINAL SCORE=";p


El resultado es que cae una "letra cambiante" que va cambiando durante su recorrido hasta el suelo...  :-\






Pues eso, hay que conseguir que cada vez caiga pseudoaleatoriamente una letra distinta (una letra para cada empresa) y que al final detecte cuántas letras ha recogido de cada tipo. ¿Fácil no? ¡Pues manos a la obra chavales!



¿Chavales?... ¡¿Chavales?!



última modificación: 08 Diciembre 2018, 01:56:04 por Zael





beaches

  • T-600
  • Mensajes: 2 642
Madre mía lo que has avanzado en 1 año.  Mi más sincera enhorabuena, lo tuyo es ganas de aprender y hacerlo público.  De verás que no dejas de sorprenderme en tu faceta de creador de videojuegos, en otras ponemos puntos suspensivos......

Future

  • T-500
  • Mensajes: 1 176
  • superviviente marciano
    • futublock
bien, a base de pseudocodigo (que no es mas que intentar explicar que hay que hacer) en vez de pintar la pantalla entera prueba a pintar la parte que se borra, ¿como? ni idea porque tienes que calcular la cosisión con el gráfico en el momento pertinente y si dices que se demora tela, igual se puede pintar cada X letras

Para contar letras, muy facil usando un contador, creas una variable que cada vez que pilles una letra le sume 1 y despues compruebe si lleva 5, cuando lleve 5 repintas pantalla y si se puede cambiar el gráfico, mejor


Zael

  • T-600
  • Mensajes: 4 726
  • El Caloret
bien, a base de pseudocodigo (que no es mas que intentar explicar que hay que hacer) en vez de pintar la pantalla entera prueba a pintar la parte que se borra, ¿como? ni idea porque tienes que calcular la cosisión con el gráfico en el momento pertinente y si dices que se demora tela, igual se puede pintar cada X letras

Para contar letras, muy facil usando un contador, creas una variable que cada vez que pilles una letra le sume 1 y despues compruebe si lleva 5, cuando lleve 5 repintas pantalla y si se puede cambiar el gráfico, mejor



Buenas Future, no entiendo bien la parte donde dices que "si lleva 5", ¿cinco qué?. En cualquier caso, como os digo es curioso, porque según en qué orden coloco la parte de la gráfica (el PLOT y DRAWS), puede pasar 3 cosas diferentes:

1) Que la línea no se corte en absoluto y la atraviesen limpiamente (pero se realentiza cosa mala)

2) Que la línea se corte y se quede cortada en cada trozo que cae la letra (con lo que si somos buenos y aguantamos un rato las letras acaban borrando la línea

3) Que la letra caiga, rompa la línea por ese trozo y luego vuelve a regenerarse "por arte de magia" (que es tal como lo he dejado por ahora).


Como digo, para un ignorante como yo no deja de asombrarme todo esto y para mi esto es un completo "ensayo y error"














Madre mía lo que has avanzado en 1 año.  Mi más sincera enhorabuena, lo tuyo es ganas de aprender y hacerlo público.  De verás que no dejas de sorprenderme en tu faceta de creador de videojuegos, en otras ponemos puntos suspensivos......


Gracias @Beaches. Más allá de las chorradas con las que acompaño todo esto, intento seguir las pautas que marqué en su momento.

Vindius fue un "juego" que realmente podía hacer CUALQUIERA, sin importar los conocimientos previos que pudiera tener. Eran apenas 3 comandos (PRINT, CLS, INPUT), era el NIVEL 0, por así decir. Este TXT va un paso más allá e intento hacer juegos simples como una patata pero que son juegos propiamente dichos (con sprites, elementos jugables, etc.).



Para mi me resulta realmente difícil todo esto porque nunca aprendí nada de programación, pero a la vez me resulta muy gratificante cuando consigo resolver un problema o hacer un programa íntegramente desde 0 como el de la F1. Para que te hagas una idea, la liberación de dopamina es similar a cuando consigo un morado en el Salón.


Pues lo dicho chicos, a ver si alguien se anima y logramos que cada vez que caiga una letra sea una letra distinta (A= Ancient Bits, O= Obleas P.Tinto, F= FaseBonus, etc.)

Saludos!





Future

  • T-500
  • Mensajes: 1 176
  • superviviente marciano
    • futublock


Zael

  • T-600
  • Mensajes: 4 726
  • El Caloret
cinco era por poner un ejemplo, cada cinco letras


Ahhh vale, ya te entiendo. Que vaya contando letras que caen y cuando lleve "X" letras vuelva a imprimir el gráfico. Entiendo, pero no es necesario, porque como digo, según donde coloque el código de la gráfica (el PLOT y los DRAW) hace que la gráfica se corte y se regenere, se corte y se quede cortada, o no se corte pero vaya lentísima.

Mirad...







1) SE CORTA, PERO SE REGENERA CON CADA LETRA NUEVA QUE CAE




10 LET p=0:
LET a=15:
FOR F=0 TO 2:
LET x=INT (RND*22):
INK 2:
PLOT 32,120:
DRAW 21,26:
DRAW 35,-59:
DRAW 18,19:
DRAW 39,-50:
DRAW 19,15:
DRAW 56,-55:
DRAW 0,10:
DRAW -10,-10:
DRAW 10,0:
INK 0:

FOR h=0 TO 21:
PRINT AT h,x;"F";AT 21,a;"U";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" ":
LET a=a+(INKEY$="8")*(a<30)-(INKEY$="5")*(a>0):
NEXT h:
BEEP (x<>a),0:
LET p=p+(a=x): LET f=f-(a=x):
NEXT F:
PRINT AT 0,0;"         FINAL SCORE=";p














2) SE CORTA Y SE SIGUE CORTANDO HASTA QUE DESAPARECE



Hacer desaparecer la raya puede ser un objetivo interesante si no consigo hacer mi idea inicial...  :rolleyes:



10 INK 2:
PLOT 32,120:
DRAW 21,26:
DRAW 35,-59:
DRAW 18,19:
DRAW 39,-50:
DRAW 19,15:
DRAW 56,-55:
DRAW 0,10:
DRAW -10,-10:
DRAW 10,0:
INK 0:

LET p=0:
LET a=15:
FOR F=0 TO 2:
LET x=INT (RND*22):
FOR h=0 TO 21:
PRINT AT h,x;"F";AT 21,a;"U";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" ":
LET a=a+(INKEY$="8")*(a<30)-(INKEY$="5")*(a>0):
NEXT h:
BEEP (x<>a),0:
LET p=p+(a=x): LET f=f-(a=x):
NEXT F:
PRINT AT 0,0;"         FINAL SCORE=";p




















3) NO SE CORTA LA RAYA PERO VA MÁS LENTO QUE EL CABALLO DEL MALO



Las letras atraviesan la gráfica con un "color clash" incluído... pero va muy lento.  :(



10 LET p=0:
LET a=15:
FOR F=0 TO 2:
LET x=INT (RND*22):
FOR h=0 TO 21:
INK 2:
PLOT 32,120:
DRAW 21,26:
DRAW 35,-59:
DRAW 18,19:
DRAW 39,-50:
DRAW 19,15:
DRAW 56,-55:
DRAW 0,10:
DRAW -10,-10:
DRAW 10,0:
INK 0:

PRINT AT h,x;"F";AT 21,a;"U";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" ":
LET a=a+(INKEY$="8")*(a<30)-(INKEY$="5")*(a>0):
NEXT h:
BEEP (x<>a),0:
LET p=p+(a=x): LET f=f-(a=x):
NEXT F:
PRINT AT 0,0;"         FINAL SCORE=";p









Para los profanos como yo, esto es casi magia. Con el mismo código pero sólo cambiando de orden el gráfico de la flecha observamos cambios de velocidad, alteraciones de la gráfica, alteraciones del espacio-tiempo... Todo esto es muy confuso, sólo sé una persona que puede arrojarnos algo de luz al respecto...  :rolleyes:  :rolleyes:








Zael

  • T-600
  • Mensajes: 4 726
  • El Caloret

Bueno chicos, hikoki me ha explicado en Speccy.org por qué ocurren esas diferencias según dónde metas el código de la gráfica (PLOT y DRAWS). Al parecer los comandos FOR crean un bucle asociado al PRINT, de forma que el PRINT se repite realmente 21 veces (la altura de la pantalla) haciendo que "caiga" la letra.

Si metía el código de la gráfica (PLOT y DRAWS) al principio del programa, al quedar fuera del bucle formado por los comandos FOR y PRINT, la gráfica se dibujaba SÓLO al principio y UNA ÚNICA vez y por eso las letras la iban degradando (que es lo que me pasó en el mini-juego de Tenis, que según van jugando se borran las líneas).

Si metía el código de la gráfica (PLOT y DRAWS) entre el primer y segundo FOR, las letras borran la gráfica pero se regeneran porque cada vez vuelve el bucle al primer FOR y por tanto vuelve a redibujar la gráfica.

Si metía el código de la gráfica (PLOT y DRAWS) después de los dos FOR, la gráfica no se corta porque... ¡¡se está re-dibujando cada vez que actúa el PRINT!! ¡¡Por eso iba tan lento en ese caso!!


¡Qué maravilla esto del BASIC! ¡Estos lenguajes de programación modernos no dejan de sorprenderme!















Y ya de paso nos ha solucionado la "papeleta" de hacer que cada vez caiga una letra diferente...

Código: [Seleccionar]
10 LET a$="ABCDEFGHIJ": LET p=0: LET a=15: FOR F=0 TO 10: LET b$=a$(INT (1+RND*LEN (a$))): LET x=INT (RND*22): INK 2: PLOT 32,120: DRAW 21,26: DRAW 35,-59: DRAW 18,19: DRAW 39,-50: DRAW 19,15: DRAW 56,-55: DRAW 0,10: DRAW -10,-10: DRAW 10,0: INK 0: FOR h=0 TO 21: PRINT AT h-1,x;" " AND (ATTR (h,x)<>56): LET h=h+(5 AND ATTR (h,x)<>56): PRINT AT h,x;b$;AT 21,a;"\a";AT h-1,x;" ";AT 21,a-1;" ";AT 21,a+1;" ": LET a=a+(INKEY$="8")*(a<30)-(INKEY$="5")*(a>0): NEXT h: BEEP (x<>a),0: BEEP (.03 AND x=a),45: LET p=p+(a=x): NEXT F: PRINT AT 0,0;"         FINAL SCORE=";p


A veces pienso que este hikoki es un "ángel de la guarda del BASIC" que me ha sido enviado para completar este interminable TXT - The Videogame...  :rolleyes:





Future

  • T-500
  • Mensajes: 1 176
  • superviviente marciano
    • futublock
que va ver que ir dando carpetazo, ¿no?
hagamos una cajita guapa y eso, ¿no?
y la vendemos a comisión, ¿no?
tu sabe, 99,99 pa mi + tu sueldo y un mojon pa ti ¿no?
es lo suyo ¿no?
¿no?


Zael

  • T-600
  • Mensajes: 4 726
  • El Caloret
que va ver que ir dando carpetazo, ¿no?
hagamos una cajita guapa y eso, ¿no?
y la vendemos a comisión, ¿no?
tu sabe, 99,99 pa mi + tu sueldo y un mojon pa ti ¿no?
es lo suyo ¿no?
¿no?



Je, je, buenas Future. Te juro que el otro día pensando en el juego me acordé de ti. Pensé: "Joer, vino Future con una idea sencilla y cojonuda. Le cojo el nombre y me pongo a hacer un juego que no sólo no tiene nada que ver sino que encima se me está haciendo una montaña y parece La Historia Interminable..."

Tal vez si lo pongo como propósito para 2019... Mmmm... podría funcionar, lo estoy viendo... "Hola Zael, para este año me he apuntado al gimnasio y voy a dejar de fumar, ¿y tú?" "¿Yo? Acabar el TXT y dejar las drogas, claro está..."









CURIOSIDADES DEL TELETEXTO

BOLSA & POESÍA



Bueno, sea como sea, quería comentaros que aquí estamos que si "Ji, ji, ji con el juego de la Bolsa", que si "Ja, ja, ja, Obleas P.Tinto lanza una OPA contra FaseBonus", que si esto que si lo otro, y mientras tanto las Bolsas mundiales se han desplomado esta semana y resulta que una nueva crisis esté llamando a nuestras puertas...









Dios quiera que sea una falsa alarma, y que las únicas crisis financieras ocurran en el juego bursátil de TXT - The Videogame. Y si no es así, no nos quedará más que ponerle "buena cara al mal tiempo", como hizo el redactor de noticias económicas del Teletexto TVE el 12 de Marzo de 2014...






Madre mía... ¡¡me temo que más de un Zael suelto anda por ahí!!  ;)  :P  ;D





beaches

  • T-600
  • Mensajes: 2 642
Zael a este paso van a quitar el teletexto como con las cabinas de teléfono. Mira igual un mini juego de las cabinas...