Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    41

    ATOMIC linguaggio di programmazione in italiano

    Ciao,

    ho creato ATOMIC, un linguaggio di programmazione in italiano a scopo didattico.



    Con ATOMIC è possibile creare: esercizi di matematica, geometria, logica, grafica, disegno, musica... e creare piccole applicazioni generiche e giochi.

    Sto cercando prima di tutto dei feedback sul lavoro svolto e delle persone interessate a collaborare
    (Anche soltanto per la creazione di esempi e suggerimenti).

    Link download:
    http://www.bergame.eu/Atomic.rar (5,43 MB)
    Documentazione: http://www.bergame.eu/ATOMIC_MANUALE_v1.0.02.pdf

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    41
    Aggiornamento: disponibile nuova versione!

    - Corretti alcuni bug
    - Performance migliorate
    - Aggiunti nuovi esempi

    Ecco l'esempio di un semplice gioco creato con ATOMIC:

    Link immagine

    codice:
    INIZIA
    /*
    IL PROGETTO:
    - Il giocatore (cerchio blu) si muove con le frecce della tastiera
    - Oltre al giocatore c'è un nemico (cerchio rosso) che insegue automaticamente il giocatore
    - Quando il nemico tocca il giocatore il gioco finisce
    - Durante il gioco appare una moneta (cerchio oro) in una posizione casuale
    - L'obbiettivo del giocatore è raccogliere più monete possibili senza farsi prendere dal nemico
    - Ogni volta che il giocatore raccoglie una moneta il nemico diventa sempre più grosso
    - Se il giocatore oltrepassa i limiti della finestra viene teletrasportato nel lato opposto
    */
    
    
    
    
    // ------------------------- Variaibili del giocatore -------------------------
    x_del_giocatore= larghezza finestra /2// centro orizzontale
    y_del_giocatore= altezza finestra /2// centro verticale
    
    
    
    
    // ------------------------- Variabili del nemico -------------------------
    x_del_nemico = ottieni uno a caso di questi valori -->(VALORE 1:50)(VALORE 2: larghezza finestra -50)
    y_del_nemico = ottieni uno a caso di questi valori -->(VALORE 1:50)(VALORE 2: altezza finestra -50)
    //Il nemico parte da uno a caso dei quattro angoli
    raggio_nemico =20
    obbiettivo_x_del_nemico = x_del_giocatore
    obbiettivo_y_del_nemico = y_del_giocatore
    velocità_nemico =4
    margine_obbiettivo =4 
    //il margine evita la "vibrazione" del nemico quando raggiunge una coordinata (prova a scrivere 0 per vedere cosa succede!)
    //questo margine deve essere maggiore o uguale alla velocità del nemico
    tempo_aggiornamento_obbiettivo_nemico=0
    distanza_nemico = ottieni distanza tra due punti -->(X 1: x_del_giocatore)(Y 1: y_del_giocatore)(X 2: x_del_nemico)(Y 2: y_del_nemico) 
    
    
    
    
    
    // ------------------------- Variabili della moneta -------------------------
    x_della_moneta =-99 
    y_della_moneta =-99
    // -99 � un punto in cui non si vede, per non farla comparire fin dall'inizio
    tempo_moneta =0
    moneta_presa = vero 
    /*Considera la moneta già presa:
    - per non farla comparire all'inizio 
    - per far partire il contatore del tempo (tempo_moneta), in modo che compaia in seguito*/
    
    
    
    
    
    // ------------------------- Variabili del sistema -------------------------
    punteggio =0
    game_over = falso
    
    
    
    
    
    
    
    //La griglia non serve
    imposta griglia -->(VISIBILE: falso)
    
    
    
    
    
    
    
    CICLO CONTINUO 
    //Se il giocatore non ha ancora perso 
    se game_over = falso 
    {
    
    
    
    
    
    //Muovi il giocatore con le frecce della tastiera
    se tasto freccia su è premuto = vero allora diminuisci y_del_giocatore di 10. 
    se tasto freccia giu è premuto = vero allora aumenta y_del_giocatore di 10. 
    se tasto freccia destra è premuto = vero allora aumenta x_del_giocatore di 10. 
    se tasto freccia sinistra è premuto = vero allora diminuisci x_del_giocatore di 10. 
    //10 = velocità in pixel per 1/30 secondi
    
    
    
    
    
    
    
    //L'obbiettivo del nemico è la posizione del giocatore, minore è il tempo di aggiornamento più il gioco è difficile
    aumenta tempo_aggiornamento_obbiettivo_nemico di 1
    se tempo_aggiornamento_obbiettivo_nemico è maggiore di 15//più il tempo è alto e più il nemico è stupido, ricorda: 30 = 1 secondo
    {
    obbiettivo_x_del_nemico = x_del_giocatore
    obbiettivo_y_del_nemico = y_del_giocatore
    tempo_aggiornamento_obbiettivo_nemico =0//riporta a zero per iniziare una nuova attesa
    }
    
    
    
    
    
    
    
    //Controlla se il giocatore ha preso la moneta 
    distanza_moneta = ottieni distanza tra due punti -->(X 1: x_del_giocatore)(Y 1: y_del_giocatore)(X 2: x_della_moneta)(Y 2: y_della_moneta) 
    se distanza_moneta<40//40 perché è la somma del raggio del giocatore (20) e del raggio della moneta (20)
    {
    //sposta la moneta in una zona irraggiungibile e invisibile al giocatore (come se scomparisse)
    x_della_moneta =-99
    y_della_moneta =-99
    se moneta_presa = falso //se la moneta non è ancora considerata presa
    {
    aumenta punteggio di 1 
    aumenta raggio_nemico di 5 
    suona -->(SUONO: suono beep2)
    moneta_presa = vero //ora considera la moneta presa (in questo modo il codice viene eseguito una sola volta)
    }
    } 
    
    
    
    
    
    
    
    // Fai ricomparire la moneta dopo un po' di tempo che è stata presa
    se moneta_presa = vero
    {
    aumenta tempo_moneta di 1
    se tempo_moneta >60//ricorda: 30 = 1 secondo
    {
    moneta_presa =0//ripristina moneta_presa (la moneta si può di nuovo prendere)
    //Fai comparire la moneta in un punto casuale della finestra
    x_della_moneta = ottieni un valore intero compreso tra questi -->(VALORE 1:0)(VALORE 2: larghezza finestra)
    y_della_moneta = ottieni un valore intero compreso tra questi -->(VALORE 1:0)(VALORE 2: altezza finestra)
    tempo_moneta =0//ripristina tempo di attesa per la ricomparsa della moneta
    }
    }
    
    
    
    
    
    
    //Controlla collisone con il nemico (Game over!)
    distanza_nemico = ottieni distanza tra due punti -->(X 1: x_del_giocatore)(Y 1: y_del_giocatore)(X 2: x_del_nemico)(Y 2: y_del_nemico) 
    se distanza_nemico <20+ raggio_nemico
    {
    suona -->(SUONO: suono errore)
    game_over = vero
    }
    
    
    
    
    
    //Programma il movimento del nemico in base al suo obbiettivo
    se x_del_nemico è minore di obbiettivo_x_del_nemico + margine_obbiettivo allora aumenta x_del_nemico di velocità_nemico .
    se x_del_nemico è maggiore di obbiettivo_x_del_nemico - margine_obbiettivo allora diminuisci x_del_nemico di velocità_nemico .
    se y_del_nemico è minore di obbiettivo_y_del_nemico + margine_obbiettivo allora aumenta y_del_nemico di velocità_nemico .
    se y_del_nemico è maggiore di obbiettivo_y_del_nemico - margine_obbiettivo allora diminuisci y_del_nemico di velocità_nemico .
    
    
    
    
    
    
    
    //Teletrasporta il giocatore dall'altro lato se supera i limiti della finestra
    se x_del_giocatore è maggiore di larghezza finestra allora x_del_giocatore =0. 
    se x_del_giocatore è minore di 0 allora x_del_giocatore = larghezza finestra . 
    se y_del_giocatore è maggiore di altezza finestra allora y_del_giocatore =0. 
    se y_del_giocatore è minore di 0 allora y_del_giocatore = altezza finestra .
    
    
    
    
    
    
    
    //Disegna tutta la grafica del gioco
    disegna cerchio -->(RAGGIO:20)(X: x_del_giocatore)(Y: y_del_giocatore)(COLORE: blu)
    disegna cerchio -->(X: x_della_moneta)(Y: y_della_moneta)(COLORE: oro)(RAGGIO:20)
    disegna cerchio -->(X: x_del_nemico)(Y: y_del_nemico)(COLORE: rosso)(RAGGIO: raggio_nemico)
    testo = ottieni testo combinato -->(TESTO 1:"PUNTEGGIO: ")(TESTO 2: punteggio)
    disegna testo -->(X:10)(Y:10)(TESTO: testo)
    
    
    
    
    }// <-- fine del blocco "se game_over = falso"
    
    
    
    
    //Programma la schermata di game over
    se game_over = vero
    {
    colore sfondo = nero
    testo = ottieni testo combinato -->(TESTO 1:"GAME OVER! 
    Hai raggiunto il punteggio di ")(TESTO 2: punteggio)(TESTO 3:"
    Premi il tasto INVIO per iniziare una nuova partita!"
    disegna testo -->(X: larghezza finestra/2)(Y:320)(TESTO: testo)(COLORE: bianco)(ALLINEAMENTO ORIZZONTALE: al centro) 
    se tasto invio è stato premuto = vero allora riavvia il programma .
    }


    Spero possa interessare a qualcuno

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Bel lavoro ma... perchè in italiano? Non si può vedere "se qualcosa = vero"

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    41
    Ciao, grazie per l'interessamento, ti rispondo con una citazione dal manuale:

    Un linguaggio in italiano al giorno d’oggi non è in controtendenza? In questi anni si assiste ad un’internazionalizzazione sempre più spinta e l’inglese viene insegnato sempre “di più e prima” (ormai a partire dalla scuola dell’infanzia!) tuttavia la propria lingua madre è indubbiamente la migliore per imparare concetti nuovi. La logica della programmazione per alcuni può risultare difficile,apprenderla direttamente in inglese di certo non migliora le cose e inoltre presuppone una buona conoscenza della lingua, cosa che non è scontata, soprattutto in età evolutiva. In questo modo si separano due competenze specifiche: la comprensione di una lingua, e la comprensione di una sintassi, una maniera di scrivere propedeutica alla programmazione.
    E poi perché "if something = true" è per forza migliore di "se qualcosa = vero"?
    Probabilmente se suona meglio è solo questione di abitudine.
    Dal mio punto di vista che i linguaggi di programmazione siano in inglese è un caso voluto dalla storia.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dire che è un caso vuol dire non conoscere la storia dell'informatica ...

    Una volta, per chi si ricorda, Nuova Elettronica tirò fuori un Basic in italiano per il suo NEZ80 ma era veramente una "attrazione da baraccone" ... infatti non fu mai usato ...

    Immagina "il resto del mondo" che usa un linguaggio di programmazione in italiano ...

    E poi, scusa, la coerenza? Perché ATOMIC e non ATOMICO ?
    Ultima modifica di oregon; 04-06-2017 a 16:07
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    41
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Dire che è un caso vuol dire non conoscere la storia dell'informatica ...

    Una volta, per chi si ricorda, Nuova Elettronica tirò fuori un Basic in italiano per il suo NEZ80 ma era veramente una "attrazione da baraccone" ... infatti non fu mai usato ...

    Immagina "il resto del mondo" che usa un linguaggio di programmazione in italiano ...

    E poi, scusa, la coerenza? Perché ATOMIC e non ATOMICO ?
    Il discorso sul "è un caso" è un discorso molto più generale riguardo la storia, a partire da almeno 5 secoli fa

    Il fatto che i linguaggi di programmazione siano in inglese non è perché in generale la "scienza e la tecnica" possono essere espressi seriamente solo in inglese ma poiché la cultura anglosassone è stata (e lo è tuttora) quella dominante (perlomeno su molti aspetti culturali, economici e tecnologici).

    Se per assurdo un'altra cultura avesse dominato mezzo mondo negli ultimi secoli oggi i linguaggi di programmazione sarebbero scritti in un'altra lingua; non vedo cosa ci sia di strano.

    Altro esempio: immaginate una civiltà aliena avanzata... I loro programmatori programmano in inglese?

    Perchè ATOMIC e non ATOMICO? Ci ho pensato, semplicemente l'italiano è una lingua di partenza, volendo può essere tradotto in più lingue, inglese compreso.

    Ad ogni modo ribadisco che è un linguaggio a scopo didattico, non lavorativo. Per un bambino/ragazzo è molto più facile apprendere concetti nella propria lingua madre che in una lingua straniera.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Permettimi di non essere d'accordo praticamente su nulla di quello che hai scritto. Ciò non vuol dire che tu non lo possa dire e che io non apprezzi l'originalità del tuo lavoro, ma mi fermo qui.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    41
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Permettimi di non essere d'accordo praticamente su nulla di quello che hai scritto. Ciò non vuol dire che tu non lo possa dire e che io non apprezzi l'originalità del tuo lavoro, ma mi fermo qui.
    Ok. (Anche se mi avrebbe fatto piacere conoscere le tue argomentazioni ).

    Comunque Atomic non è il primo del suo genere: in ambito didattico esiste già Lexico per lo spagnolo (https://it.wikipedia.org/wiki/Lexico) e Karel (https://it.wikipedia.org/wiki/Karel) che è stato tradotto in Ceco e in Tedesco.

    Inoltre ci sono un sacco di linguaggi non basati sull'inglese, anche non didattici: https://it.wikipedia.org/wiki/Lingua...sull%27inglese

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.