Codice dei programmi nella directory:
///File: quadrato.c
//Autore:F Sacco - Test Grafica della tartaruga
// Sett 2026 - Libreria turtle.h + RayLib
#include "turtle.h" // Include la tua nuova libreria semplificata
int main(void) {
// 1. Inizializza la finestra (larghezza, altezza, titolo)
turtle_init(800, 600, "La mia Tartaruga in C");
// --- DISEGNO DI UN QUADRATO VERDE ---
set_color(BLUE);
forward(200);
turn_right(90);
forward(200);
turn_right(90);
forward(200);
turn_right(90);
forward(200);
turn_right(90);
// 2. Mantiene la finestra aperta e mostra il risultato finale
turtle_wait();
return 0;
}
///(Fine file: quadrato.c)
///File: turtle.h
/**
* turtle.h - Libreria di Grafica della Tartaruga per C (basata su Raylib)
*
* Istruzioni d'uso:
* 1. Includi questo file nel tuo main.c: #include "turtle.h"
* 2. Chiama `turtle_init()` all'inizio del main.
* 3. Usa i comandi della tartaruga (es. forward, turn_right, pen_up, pen_down).
* 4. Chiama `turtle_wait()` alla fine per tenere aperta la finestra.
*/
#ifndef TURTLE_H
#define TURTLE_H
#include "raylib.h"
#include <math.h>
#include <stdbool.h>
// Struttura globale nascosta per gestire lo stato della tartaruga e dello schermo
static struct {
Vector2 pos;
float angle;
bool is_pen_down;
Color color;
RenderTexture2D canvas;
int width;
int height;
bool initialized;
} _t;
// Inizializza la finestra e la tartaruga al centro dello schermo
static inline void turtle_init(int width, int height, const char* title) {
if (_t.initialized) return;
_t.width = width;
_t.height = height;
// Inizializza Raylib
InitWindow(width, height, title);
SetTargetFPS(60);
// Crea la tela virtuale
_t.canvas = LoadRenderTexture(width, height);
// Pulisce la tela con sfondo nero
BeginTextureMode(_t.canvas);
ClearBackground(BLACK);
EndTextureMode();
// Stato iniziale della tartaruga (centro schermo, rivolta a destra)
_t.pos = (Vector2){ (float)width / 2.0f, (float)height / 2.0f };
_t.angle = 0.0f;
_t.is_pen_down = true;
_t.color = GREEN;
_t.initialized = true;
}
// Muove la tartaruga in avanti di 'distance' pixel
static inline void forward(float distance) {
if (!_t.initialized) return;
float radians = _t.angle * DEG2RAD;
Vector2 new_pos = {
_t.pos.x + cosf(radians) * distance,
_t.pos.y + sinf(radians) * distance
};
if (_t.is_pen_down) {
BeginTextureMode(_t.canvas);
DrawLineV(_t.pos, new_pos, _t.color);
EndTextureMode();
}
_t.pos = new_pos;
}
// Muove la tartaruga all'indietro di 'distance' pixel
static inline void backward(float distance) {
forward(-distance);
}
// Gira a destra (orario) di 'degrees' gradi
static inline void turn_right(float degrees) {
_t.angle += degrees;
}
// Gira a sinistra (antiorario) di 'degrees' gradi
static inline void turn_left(float degrees) {
_t.angle -= degrees;
}
// Abbassa la penna (lascia la scia quando si muove)
static inline void pen_down(void) {
_t.is_pen_down = true;
}
// Alza la penna (si muove senza lasciare la scia)
static inline void pen_up(void) {
_t.is_pen_down = false;
}
// Cambia il colore della penna (es. RED, GREEN, BLUE, WHITE, ecc.)
static inline void set_color(Color color) {
_t.color = color;
}
// Sposta istantaneamente la tartaruga alle coordinate (x, y)
static inline void go_to(float x, float y) {
_t.pos = (Vector2){ x, y };
}
// Imposta l'orientamento assoluto in gradi (0 = destra, 90 = giù, 180 = sinistra, 270 = su)
static inline void set_heading(float degrees) {
_t.angle = degrees;
}
// Ripulisce il disegno cancellando tutto sulla tela
static inline void clear_screen(Color background_color) {
if (!_t.initialized) return;
BeginTextureMode(_t.canvas);
ClearBackground(background_color);
EndTextureMode();
}
// Gestisce il ciclo di rendering grafico principale e mantiene aperta la finestra finché non viene chiusa
static inline void turtle_wait(void) {
if (!_t.initialized) return;
while (!WindowShouldClose()) {
BeginDrawing();
ClearBackground(DARKGRAY);
// Disegna la tela virtuale (corregge l'inversione dell'asse Y tipica di OpenGL)
DrawTextureRec(
_t.canvas.texture,
(Rectangle){ 0, 0, (float)_t.canvas.texture.width, (float)-_t.canvas.texture.height },
(Vector2){ 0, 0 },
WHITE
);
// Disegna la tartaruga (un piccolo cerchio rosso) nella posizione attuale
DrawCircleV(_t.pos, 5, RED);
EndDrawing();
}
// Chiude e libera la memoria
UnloadRenderTexture(_t.canvas);
CloseWindow();
_t.initialized = false;
}
#endif // TURTLE_H
///(Fine file: turtle.h)
///File: poligono.c
#include "turtle.h"
/*****
void quadrato(int passi) // iterativo
{
int i;
for(i=0; i<4; i++) {
forward(passi);
turn_right(90);
}
}
****/
void quadrato(int passi, int lati) // iterativo
{
if(lati == 0) return;
forward(passi);
turn_right(90);
quadrato(passi, lati-1);
}
void poligono(int passi, int lati){
if(lati == 0) return;
forward(passi);
turn_right(360/lati);
poligono(passi, lati);
}
void poligono_iterativo(int passi, int lati){
for(int i=0; i<lati; i++) {
forward(passi);
turn_right(360/lati); }
}
int main()
{
turtle_init(800,600,"quadrato");
poligono(2, 360);
turtle_wait();
return 0;
}
///(Fine file: poligono.c)
///File: montagne.c
#include<stdio.h>
#include "turtle.h"
void montagne (int lato, int cime) {
if (cime == 0) {
return;
}
turn_left(80);
forward(lato);
turn_left(200);
forward(lato);
turn_left(80);
montagne(lato, cime - 1);
}
int main() {
turtle_init(800, 600, "montagne");
set_color(PURPLE);
go_to(0, 400);
pen_down();
montagne(200, 10);
turtle_wait();
}
///(Fine file: montagne.c)
///File: quadrato_rotante.c
#include "turtle.h" // Include la tua nuova libreria semplificata
#include <stdio.h>
void quadrato (int lato, int volte) {
if (volte == 0) {
return;
}
forward(lato);
turn_right(90);
quadrato(lato, volte - 1);
}
void quadratorotante(int lato, int volte, int rot) {
if (volte == 0) {
return;
}
quadrato(lato, 4);
turn_left(rot);
quadratorotante(lato, volte - 1, rot);
}
int main(void) {
printf("Lunghezza lato: ");
int lato;
scanf("%d", &lato);
printf("Numero rotazioni: ");
int i;
scanf("%d", &i);
float rot = 360 / i;
turtle_init(800, 600, "quadrato rotante");
set_color(PURPLE);
quadratorotante(lato, i, rot);
turtle_wait();
return 0;
}
///(Fine file: quadrato_rotante.c)
///File: stella.c
#include<stdio.h>
#include "turtle.h"
void stella(int passi, int punte) {
if(punte == 0){
return;
}
forward(passi);
turn_right(144);
stella(passi, punte -1);
}
int main() {
turtle_init(800, 600, "La mia Tartaruga in C");
set_color(PURPLE);
pen_down();
stella(350, 5);
turtle_wait();
}
///(Fine file: stella.c)