Repository navigation
Releases: crsolver/cometa
Releases · crsolver/cometa
Release list
v0.1.1
Cambios que pueden afectar a tus programas
- Las listas se comparten por completo, como los mapas: asignar una lista a otra variable, guardarla en un campo o pasarla a una función comparte sus elementos y su longitud.
agregar,insertaryeliminardentro de una función cambian la lista de quien la llamó; antes ese cambio no se veía fuera. Para tener una lista independiente se usacopiar(). - Un rango ya no cuenta hacia atrás por su cuenta:
repetir (a..b)solo cuenta hacia adelante y no da ninguna vuelta siano es menor queb, así querepetir (0..lista.longitud() - 1)no entra al cuerpo con una lista vacía. Para bajar se escribe el paso:repetir (5..0, paso = -1). Los límites literales escritos al revés sinpasodan un error que lo sugiere.
Lenguaje
repetir (n): con unenterodanvueltas contadas desde 0, sin necesidad de escribir un rango.repetir (a..b, paso = n): cuenta a saltos (paso = 2) o hacia atrás (paso = -1). Un paso 0 es un error.repetirsobre unacadena: la recorre letra por letra.- Comparar con
==opcionales, resultados y constantes:si buscado == .Ninguno,si elegido == .Alguno("Ana"),si guardar() != .Okysi tecla == .Espaciocompilan sincasos. Las constantes de la biblioteca también pueden escribirse con su tipo (retro.Icono.Arriba). - Números en hexadecimal y binario:
0xFFy0b1010. - Métodos sobre un número escrito:
7.formato(2). - Interpolar cualquier valor: las listas, los mapas, las estructuras, los enums, los opcionales y los resultados se pueden poner en
"${...}"y pasar acadena(), con el mismo formato queimprimir. side una línea: una rama puede empezar por-,.o(, como en un valor negativo o una.Variante.- Una función con resultado puede terminar en un
repetirinfinito sinromper.
Biblioteca
- Listas:
ordenar(descendente = falso)ordena una lista deentero,decimalocadena, yordenar_por(claves, descendente = falso)ordena cualquier lista según una lista paralela de claves. Las dos son estables. - Cadenas:
rellenar_izquierda(ancho, relleno),rellenar_derecha(ancho, relleno)yrepetir(veces). Un marcador con ceros escadena(puntos).rellenar_izquierda(7, "0"). std/mate: operaciones de bits conbit_y,bit_o,bit_xor,bit_no,desplazar_izquierdaydesplazar_derecha.- Sonidos sin archivos:
audio.tonoyaudio.ruidocrean un sonido en memoria, yaudio.reproduciracepta un parámetrotonoque cambia la altura y la velocidad. - Colores:
color.mezclar,Color.con_alfa, los canales de lecturar,g,bya, ycolor.a_entero/color.desde_enteropara el formato0xRRGGBBde las rejillas. tiempo.ahora(): los segundos transcurridos desde que empezó el programa, también en programas de consola.Rejilla.buscar(valor): las celdas que contienen un valor, para leer de una capa dónde empieza el jugador o dónde están las llaves.retro: más de 40 iconos nuevos (Cara,Oro,Casa,Castillo,Gato,Manzana…), yretro.iconoyretro.glifoaceptanvoltear_hyvoltear_v.
Pintar en una imagen
con graficos.pintar_en(imagen): lo que se dibuja dentro del bloque va a la imagen en vez de a la pantalla, sin cámara ni recorte, y al salir todo vuelve a como estaba. Sirve para minimapas, escenas a baja resolución que luego se amplían o fondos que se pintan una sola vez; el bloque puede usarse en cualquier momento, no solo desdepintar. Las funciones delienzoven lo pintado.graficos.recortarconcon:con graficos.recortar(rect)quita el recorte al salir del bloque; los bloques anidados se limitan al que los contiene.graficos.liberar(imagen): libera en el momento la copia de una imagen en la tarjeta gráfica; la imagen sigue siendo válida y vuelve a subirse al dibujarla.
Entrada simulada
- Pruebas:
std/pruebaspuede simular la entrada:pruebas.mantener,soltarypulsar(teclas), sus variantes_ratony_mando,pruebas.raton(x, y),pruebas.rueda(x, y),pruebas.texto("...")ypruebas.eje_mando(eje, valor). Un ejercicio como «al pulsar D el jugador se mueve» ya se comprueba a través deentrada. cometa captura --entrada: el guion admitetexto "hola",rueda x y, botones del mando 0 (+MandoA) y palancas (eje IzquierdoX 1), ystd/pincel/uirecibe el texto escrito.
Editor de mapas
cometa mapa: abre un editor de mapas de tiles en el navegador (tools/mapa-editor, un solo archivo HTML), con el atlas dungeon como paleta, un color por celda, capas, pintar, borrar, rellenar y rectángulo. Guarda y abre archivos.mapa.txty exporta un módulo.cometacon los iconos y los colores de cada capa.rejilla.dibujar(..., colores = otra_rejilla): una rejilla de colores (0xRRGGBBpor celda) pinta cada celda de su color; sin ella se usatinte, como antes.retro.cargar_mapa(ruta)yretro.mapa(mapa): cargan un.mapa.txty lo dibujan como se ve en el editor.mapa.capa("suelo")da la rejilla de una capa para consultar celdas, colisionar o cambiar el mapa mientras se juega.- Marcas con nombre: la herramienta Marca del editor le pone un nombre a una celda (
jugador,enemigo,puerta) sin dibujar nada en ella, ymapa.marcas("enemigo")devuelve la columna y la fila de cada celda con ese nombre. Ya no hace falta reservar un icono por cada cosa que el juego coloca. En el.mapa.txtson líneas@ nombre columna,fila. retro.hoja(atlas = .Dungeon): el atlas retro comograficos.Hoja, para dibujar una rejilla con los iconos dungeon:rejilla.dibujar(mapa, retro.hoja(), tinte = .Gris).rejilla.desde_csv(texto, capa = ""): crea una rejilla a partir del texto de un.mapa.txt(una fila por línea, valores separados por comas en decimal o0x…,# nombreantes de cada capa).recursos.texto(ruta): incorpora un archivo de texto al programa, comorecursos.imagenhace con las imágenes.
Correcciones
- Nombres que solo cambian en la mayúscula inicial: una función
puntoy un tipoPuntoya pueden convivir (antes daban «error interno del compilador»). Dos campos, métodos o tipos que solo se distinguen así dan un error claro. Las variables llamadas como algo de Go (len,string,copy,fmt…) ya no rompen el programa. "${ valor }": una interpolación puede llevar espacios alrededor de la expresión; antes daba un error de indentación.- Rutas en Windows: los errores, los fallos en ejecución y «ir a la definición» muestran los archivos con sus mayúsculas, no la ruta entera en minúsculas.
- Editor más ágil en juegos con recursos: el editor ya no vuelve a leer y decodificar cada imagen y sonido con cada tecla; solo cuando el archivo cambia.
- Go instalado dos veces: si el primer
godelPATHno funciona, Cometa prueba el siguiente en vez de fallar, y usa el delPATHantes que el de la carpeta del instalador. mientrascon una condición que no esbool: el error habla de la condición y no de un operador!que no está escrito.- Un dígito de otro alfabeto (
٣) en un número da un error que lo explica. - La pista de
@llega a todos los programas: escribirvidaen vez de@vidadentro de un método explica que falta la@también en los programas que usanusar(antes solo en los que no importaban nada), y con campos de tipos embebidos. - Autocompletado de
.Varianteen cualquier archivo: las etiquetas decasos, los opcionales y los resultados (.Alguno,.Ok…) se completan también en los archivos conusar, que antes se quedaban sin esas sugerencias. - Errores de nombres repetidos más claros: dicen si el nombre ya era una función, un tipo o una global.
- Errores de ejecución con columna: un índice fuera de la lista o una división entre cero muestran la línea y señalan la expresión con
^. - Por qué un tipo no cumple una interfaz: el error dice el primer motivo: el método que falta, el resultado o los parámetros que no coinciden, o el método o el tipo embebido sin
pub. usarque no encuentra su archivo: el mensaje está en español y nombra el archivo como se escribió y el módulo que lo importa.- Función que no produce su resultado: el error señala el tipo de resultado declarado y no la última sentencia.
|variable|en una rama decasos: el error explica dónde va cuando se escribe en el lugar equivocado.- Estructuras omitidas: un campo de estructura que no se escribe ya no exige inicializar los campos enum o de resultado de dentro cuando su tipo les da un valor predeterminado.
- Miembros sobre un literal de estructura: leer un campo o llamar a un método directamente sobre un literal ya compila.
!en la cabecera de una función: enfn f() bool !@g()el!separado se lee como negación, no como tipo de resultado.- Mayúsculas acentuadas en
retro.texto:Á,Í,ÓyÚ, que la fuente no tiene, se dibujan con la letra sin tilde. imprimirya no falla con una estructura sin campos.
Herramientas
cometa compilares más rápido en programas de consola (de alrededor de 1 s a 0,2 s) y ya no necesita tener Go instalado: el Go generado deja de comprobarse en cada compilación; esa comprobación corre ahora en las pruebas del compilador.- El editor analiza menos: los errores se recalculan cuando dejas de escribir un instante, no con cada tecla, y pasar el ratón o ir a una definición reutiliza el último análisis.
- El Go de los programas más simples sale ahora por el mismo camino que el de los demás, con una variable temporal por operando (más largo, mismo resultado).
- Constantes de un tipo en el editor: al pasar el ratón por
color.Color,entrada.Teclay los demás tipos con constantes se ven sus valores (.Rojo,.Espacio…...
v0.1.0
Primera versión pública de Cometa: un lenguaje de programación con sintaxis en español, pensado para aprender y para hacer juegos 2D por diversión. Los programas se traducen a Go.
Qué incluye
- El lenguaje: tipos estáticos, bloques con tabuladores, listas, mapas, opcionales (
T?), resultados (T!), enums concasos, interfaces, genéricos y módulos conusar. La referencia completa está en specs.md. - Pincel, la biblioteca de juegos 2D: gráficos, sprites y hojas, texto, cámara, teclado, ratón y mandos, audio, rejillas con colisiones, interfaz (
ui), fuente retro, curvas de suavizado, ruido y guardado de datos. - Herramientas:
cometa nuevo,ejecutar,construir,probar(con pruebas visuales) ycaptura. - Extensión de VS Code: colores, errores mientras escribes, autocompletado e ir a la definición.
- Errores en español, con sugerencias («¿quisiste decir…?») y la línea de tu programa cuando algo falla al ejecutar.
Instalar
- Descarga el archivo
cometa_…de tu sistema (abajo), descomprímelo y poncometaen tuPATH. - Instala Go 1.25 o superior.
- Opcional: descarga el
.vsixde tu sistema e instálalo concode --install-extension cometa-win32-x64.vsix(cambia el nombre por el de tu archivo).
Los ejecutables no están firmados; la guía para empezar explica cómo abrirlos en Windows y macOS, y sigue con tu primer programa y tu primer juego.
Limitaciones conocidas
Es una versión temprana: el lenguaje y la biblioteca pueden cambiar. Las asperezas conocidas están en MEJORAS.md.