Pues lo acabo de probar (sí, estoy trabajando a estas horas), y lo cierto es que falla más que una escopeta de feria. Sólo con los ejemplos más básicos se ha liado, inventándose el tipo SPRITE, las funciones MOVER_SPRITE, o definiendo procesos dentro de procesos.
Si falla en eso, no me lo imagino haciendo un ejemplo completo.
Lo he ido corrigiendo, lo que ya no sé es si eso le sirve de entrenamiento, de cara a que el próximo que pregunte, le de las respuestas correctamente.
Ejemplo de código Fénix según ChatGPT 3.5:
Código:
Program Colisiones;
Private
int player;
int enemy;
int player_x, player_y;
int enemy_x, enemy_y;
Begin
// Cargar los sprites desde archivos gráficos
player = Load_Sprite("player.png");
enemy = Load_Sprite("enemy.png");
// Posición inicial de los sprites
player_x = 50;
player_y = 50;
enemy_x = 100;
enemy_y = 100;
Repeat
// Limpiar la pantalla
Clear_Screen();
// Mover el sprite del jugador según las teclas de dirección
If (Key(_UP)) Then
player_y = player_y - 1;
End
If (Key(_DOWN)) Then
player_y = player_y + 1;
End
If (Key(_LEFT)) Then
player_x = player_x - 1;
End
If (Key(_RIGHT)) Then
player_x = player_x + 1;
End
// Detectar colisión entre el jugador y el enemigo
If (Collision(player, player_x, player_y, enemy, enemy_x, enemy_y)) Then
Write(0, 50, 10, "¡Colisión detectada!");
End
// Dibujar los sprites
Draw_Sprite(player, player_x, player_y);
Draw_Sprite(enemy, enemy_x, enemy_y);
// Actualizar la pantalla
Frame;
Until (Key(_ESC)); // Salir con la tecla ESC
End
El mismo ejemplo, 5 intentos después:
Código:
PROGRAM Colisiones;
PROCESS jugador();
PRIVATE
int player_fpg;
BEGIN
// Cargar el archivo FPG que contiene el gráfico del jugador
player_fpg = LOAD_FPG("player.fpg");
// Asignar la imagen específica del jugador (código de imagen 1) a GRAPH
GRAPH = 1;
FILE = player_fpg;
X = 50;
Y = 50;
WHILE (!KEY(_ESC))
IF (KEY(_UP)) THEN
Y = Y - 1;
END
IF (KEY(_DOWN)) THEN
Y = Y + 1;
END
IF (KEY(_LEFT)) THEN
X = X - 1;
END
IF (KEY(_RIGHT)) THEN
X = X + 1;
END
FRAME;
END
// Descargar el archivo FPG cuando ya no se necesite
UNLOAD_FPG(player_fpg);
END
PROCESS enemigo();
PRIVATE
int enemy_fpg;
BEGIN
// Cargar el archivo FPG que contiene el gráfico del enemigo
enemy_fpg = LOAD_FPG("enemy.fpg");
// Asignar la imagen específica del enemigo (código de imagen 1) a GRAPH
GRAPH = 1;
FILE = enemy_fpg;
X = 100;
Y = 100;
WHILE (!KEY(_ESC))
IF (COLLISION(GRAPH, X, Y, jugador.GRAPH, jugador.X, jugador.Y)) THEN
WRITE(0, 50, 10, "¡Colisión detectada!");
END
FRAME;
END
// Descargar el archivo FPG cuando ya no se necesite
UNLOAD_FPG(enemy_fpg);
END
BEGIN
jugador();
enemigo();
END
En su defensa, diré que he visto novatos que han tardado mucho más tiempo (o intentos) en obtener el mismo resultado 
Respecto a si hay código llibre para ejemplos, sí que lo hay, y a montones. Ya no sólo en DivSite o en BennuGD, sino en los propios juegos. Incluso yo mismo he subido el código fuente completo de algunos juegos. Los más complejos o los mejores programas, sólo a gente muy cercana y de confianza
Marcadores