PDA

Visualizza la versione completa : ATOMIC nuovo linguaggio di programmazione in italiano


FRK91
11-05-2017, 20:01
Ciao,

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

http://www.bergame.eu/atomic_screen.png

la versione attuale è il lavoro di circa quattro mesi.
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).
Il progetto non ha fini di lucro.

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

FRK91
04-06-2017, 12:42
Disponibile nuova versione!

- Corretti alcuni bug
- Performance migliorate
- Aggiunti nuovi esempi

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

Link immagine (http://www.bergame.eu/esempio_gioco_atomic.png)


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 :ciauz:

LeleFT
05-06-2017, 15:39
Visto che hai creato un'altra discussione (http://forum.html.it/forum/showthread.php?threadid=2955408) (quando avevi già questa aperta) e che l'altra è stata effettivamente movimentata, chiudo questa e si prosegua in quella nuova.


Ciao. :ciauz:

Loading