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