Guest

Untitled

By: a guest on Jan 28th, 2012  |  syntax: None  |  size: 6.74 KB  |  hits: 27  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. //questo è un commento
  2. //non si usa il ;
  3. //niente parentesi graffe, ogni riga un'istruzione, si va di indentazione per la lettura decente
  4.  
  5. var num variabile_numerica
  6. var str variabile_stringa
  7.  
  8. func str funzione1(num numero1, str stringa1, num numero2=10, <user_type> tipo_definito_utente, num* puntatore1)                //le variabili in cui non è indicato hanno di default valore 0
  9.  
  10.         var num numero3 = 37    //dichiara una variabile dentro la sua area di lavoro(la funzione)
  11.         numero1 = numero2 + 3
  12.         stringa1 -= numero1     //elimina le ultime <numero> lettere della stringa
  13.         numero1 = numero2 *= numero3            //la precedenza in questo caso parte da destra verso sinistra per eseguire l'istruzione, su questa cosa non ne sono sicuro, le strutture temporanee sono un po complicate da gestire e con il rischio di bug. Bisogna pensarci un po su.
  14.  
  15.         puntatore1 = 30;                //il passaggio per indirizzo alle funzioni è molto basilare passare una variabile dove è richiesto un puntatore fa si che viene automaticamente passato come indirizzo. Sistema utile solo a permettere che una funzione modifichi una variabile creata da te.
  16.        
  17.         var num numero4
  18.         numero4 = puntatore1    //copia il valore della variabile puntata
  19.  
  20.         var num* puntatore2     //errore! i puntatori possono essere usati dall'utente solo come passaggio tramite argomenti per facilità d'uso e quidni permettere alla funzione la modifica della variabile stessa oltre che all'uso. I puntatori saranno completamente automatici. Durante la conversione in codice c++ si vedrà se gli oggetti usati sono modificati o semplicemente usati per la lettura e di conseguenza lo usa automaticamente come puntatore se la funzione legge i valori e basta(per velocità)
  21.  
  22.         return stringa1;
  23.  
  24. endef
  25.  
  26. //endef (end+def) termina una definizione (funzione, classe ecc), end termina un costrutto(if, while ecc)
  27. //le funzioni possono usare l'overloading
  28.  
  29.  
  30. //semplice definizione di una classe
  31. type mio_tipo
  32.  
  33.         res spr miosprite
  34.  
  35.         func draw()
  36.  
  37.                 draw_sprite(10, 10, miosprite)
  38.  
  39.         endef
  40.  
  41. endef
  42.  
  43.  
  44. num array | 10 | 20 |   //crea un'array bidimensionale di 10x20 elementi
  45. array += | 30 |    //ingrandisce l'array di 30 elementi (diventa 30x20)
  46. array -= | 0 | 5 |              //rimpicciolisce l'array di 5 elementi secondo il vettore indicato quidni da 30x20 diventa 30x15
  47. array | 2 | 8 | = 27    //la cella 2/8 diventa 27
  48. array | 0$10 | 5$12 | += 6      //con il num$num si indica un gruppo di celle quindi tutto il quadrante 0-10 x 5-12 diventa 6
  49. array | 5 | 4 | += | 2 | 3 |            //aggiunge 2 colonne e 3 righe inserendole al punto indicato quindi tutto cio che è prima di 4-5 resta invariato, ciò che cè dopo si sposta facendo spazio alle nuove celle
  50.  
  51.  
  52.  
  53. //gli oggetti "pensanti" sono una cosa molto importante secondo me ed infatti è una cosa che usano anche engine professionali come UE3 e cryeingine3
  54. ovviamente gli oggetti avranno anche loro solo 3 eventi, creazione, step e distruzione. Creazione e distruzione avvengono nell'esatto momento in cui vengono chiamati mentre step viene chiamato ciclicamente
  55. avevo in mente anche l'evento "definizione" dove devi definire variabili e funzioni dell'oggetto(che poi sarà una classe che usa l'ereditarietà per aggiungerci le cose fondamentali come gli eventi) così da poter usare facilmente la struttura un po alla game maker con l'intellisense. Tutte le variabili definite all'interno degli eventi saranno automaticamente temporanee e varranno solo per quell'evento specifico.
  56. L'evento step che va eseguito ogni coclo è dipendente dall'ordine di id, ce la caviamo con un semplice richiamo alla funzione step della nostra lista di oggetti.
  57.  
  58. il draw non verrà mai chiamato direttamente, lo gestiremo noi per intero per questioni di velocità e semplicità in una maniera molto simile ad ogre, lo stesso vale per il 2d. Nel 2d (che sarà anche overlay) si usa la depth per definire l'ordine di disegno degli sprite ed altri elementi, ovviamente dobbiamo anche mettere la possibilità di usare blend modes e tutto il resto.
  59.  
  60.  
  61. //definizione di uno sprite
  62.  
  63. res spr sprite1 = LoadSprite("file")    //carica uno sprite e ne restituisce l'indice
  64.  
  65.  
  66. //esempio di definizione di un'oggetto(che poi probabilmente andranno creati via ide)
  67.  
  68. ogg mio_oggetto
  69.  
  70.         definition
  71.        
  72.                 var num mio_numero = 16 //le variabili non inizializzate saranno automaticamente impostate a 0 o "" se stringhe
  73.                 res spr mio_sprite      //in questo caso lo sprite è NULL cioè nessuno sprite
  74.                 var num istanza_sprite = CreateSpriteEntity(mio_sprite)         //l'istanza dello sprite che verrà usata per la gestione delle varie impostazioni, verrà usato un sistema creazione/gestione/distruzione come ogre3d anzichè il disegno diretto come game maker, questo anche per tenere una certa coerenza tra 3d e 2d. Il 2d sarà disegnato sempre come overlay rispetto al 3d, 2d e 3d saranno la stessa identica cosa, basta usare/non usare certe funzionalità, non esistequindi nessun passaggio da 2d a 3d e viceversa. Tuttavia questa riga è un'errore poichè si possono impostare solo numeri e stringhe all'inizializzazione.
  75.  
  76.                 var str testo = "ciao"
  77.                 var num istanza_testo
  78.  
  79.         endef
  80.  
  81.         creation
  82.  
  83.                 mio_numero += 28
  84.                 aumenta_mio_numero( 20 )
  85.                 mio_sprite = LoadSprite("file") //carica uno sprite in tempo reale
  86.                 istanza_sprite = CreateSpriteEntity(mio_sprite)         //prima era un'errore nel codice, bisogna usare le funzioni nel create.
  87.                 SpriteEntitySetBlendMode(bm_add)        //dice che al momento del disegno dello sprite verrà usato un particolare blend mode
  88.                 SpriteEntitySetColour(c_red)    //dice che al momento del disegno dello sprite verrà usato un particolare colore
  89.  
  90.                 istanza_testo = CreateTextEntity(testo)         //l'argomento è un puntatore alla variabile quindi passandogli la variabile testo con questo sistema la si passa automaticamente come puntatore, cambiando la variabile testo cambia il testo disegnato.
  91.                 TextEntitySetPosision(istanza_testo, 50,40,-1)
  92.  
  93.         endef
  94.  
  95.         step
  96.  
  97.                 mio_numero *= 0.98
  98.                 SpriteEntitySetPosition(istanza_sprite, mio_numero, 10, 0)      //argomenti: istanza dello sprite; x; y; depth(per l'ordine di disegno degli sprite, testo, oggetti bidimensionali in generale)
  99.                 SpriteEntitySetIndex(istanza_sprite, mio_numero * 20)           //argomenti: istanza dello sprite; subimage attuale da renderizzare
  100.  
  101.         endef
  102.  
  103.         //gli eventi non sono necessari da definire, infatti non definisco l'end in questo caso ma potevo metterlo ad esempio per distruggere l'istanza dello sprite.
  104.  
  105.         func aumenta_mio_numero(num valore)             //nel codice c++ la variabile valore in realtà sarà un puntatore a alla variabile che si passa come argomento alla funzione poichè tanto non la modifica. L'ordine di definizione delle funzioni non conta ma chiaramente è buona norma tenere tutte le funzioni create dall'utente assieme. Ma questi son cazzi dell'utente.
  106.  
  107.                 mio_numero += valore
  108.  
  109.         endef
  110.  
  111. endogg          //termina la definizione di un'oggetto