Newsgroup: it.comp.ia
Titolo: [gnammy] una modesta proposta

Questa e' la mia modesta proposta per quanto riguarda un tipo di Gnammy
Land, che ho chiamato
rope land visto che credo che si discosti un poco dall'idea originale.
Se vi interessa ho buttato giu' anche un abbozzo di grammatica per il
linguaggio
macchina e quello ad alto livello.
Ho preso idee dal crobots, corewars e dal progetto Gnammy. Per adesso sono
ancora all'inizio
della programmazione. Credo che non faro la grafica tra l'altro.
Per critiche e commenti scrivetemi a 
robert...@inferentia.it
Ciao, Roberto
Rope Land:
spazio bidimensionale LATO * LATO formato da caselle(x,y)
Caselle:
ogni casella e' caratterizzata da
-posizione
-oggetto contenuto
-segnali presenti (parlato udibile)
Oggetti in RL:
ogni oggetto e' definito dal suo
-id
-data creazione
-id padre (id = GOD se non esiste un padre )
-tipo in (carnivori, erbivori, massi,piante)
-peso in ropeton (intero positivo)
-posizione (x,y) in [0..LATO-1]
gli oggetti viventi (carnivori, erbivori,piante)
-energia in ropeton (intero positivo)
-status (vivo, morto)
-comportamento
il programma e definitito
-stato
-programma
*i viventi muoiono di famequando la loro energia va a zero
*i viventi una volta morti se il valore di energia e' diverso da 0
perdono energia progressivamente sino a scomparire
----------------------------------------------------------------------
La grammatica del linguaggio ropelang 'e nel file "rope.grm"
esempio:
begin;
if (c1+(b2-c2));
  move(NORDEST);
endif;
end;
la grammatica del linguaggio ropelm (linguaggio macchina)
e' nel file ropelm
esempio:
0:load 0 1
1:load 1 1
2:do move 0
3:if 1 1
4:halt
-----------------------------------------------------------------------
Semantica comandi:
*sinopsi:  move ( MDIR ) ;
*descrizione: si muove nella direzione indicata se lo spazio e' libero o se
riesce a
  spostare l'elemento bloccante, se qualcosa blocca il passaggio l'energia
  (misurata in ropeton) viene trasferita all'oggetto bloccante
  NB energia viene qui e nel seguito usata in modo improprio e riassume in
se' il significato
  di *energia* vera e propria (in particolare cinetica) e *forza*.
  La fisica di ropeland deve essere meglio definita in particolare per
quanto riguarda
  gli urti e i movimenti (attriti, conservazione dell'energia, inerzia, urti
elastici e
  anelastici)
*restituisce: vero se si e' effettivamente mosso
*sinopsi speak ( WHAT , DISTANCE) ;
*descrizione: dice qualcosa contenuto in una variabile diffondendolo sino a
una certa distanza
NB da meglio definire
*restituisce: nulla ;
*sinopsi: ear ( ) ;
*descrizione: legge i segnali presenti nella posizione corrente
*restituisce: segnale
*sinopsi: see ( SDIR ) ;
*descrizione: guarda in direzione SDIR
le direzioni sono le otto direzioni MDIR piu' altre due sotto direzioni
per ognuna di queste
----
l01
l01
*
----
234
234
*4
----
555
*666
777
----
*8
d98
d98
----
etc
*restituisce: quanto visto (la prima cosa incontrata che nasconde quanto
dietro)
che e' diviso in
-livrea (dipendente dal programma, checksum del programma)
-distanza (in caselle)
-id oggetto visto (se abbastanza vicino)
*sinopsi: dup ( MDIR , ENERGY) ;
*descrizione: duplica l'oggetto nella direzione indicata fornendogli una
certa energia
iniziale, il parto prevede uno spreco di energia pari alla lunghezza del
programma
piu' l'energia fornita al figlio
*restituisce: vero se andato a buon fine (energia usata se non andato a buon
fine?)
*sinopsi:  eatv ( MDIR ) ; // solo per animali erbivori
  eatm ( MDIR ) ;  // solo per animali carnivori
  eatl ( ) ;  |     // solo per vegetali
*descrizione: mangia quanto a destra, se c'e' qualcosa a destra e se e' del
giusto tipo
  se l'oggetto che mangia e' del giusto tipo
*restituisce: ropeton di energia prelevati (0 se fallito cioe' falso)
*sinopsi:  feed ( MDIR , ENERGY) ;
*descrizione: passa dell'energia (ropeton) a quanto a destra
*restituisce: nulla
le variabili sono solo interi positivi
MDIR -> NORD  @
MDIR -> SUD  @
MDIR -> EST  @
MDIR -> OVEST  @
MDIR -> NORDEST  @
MDIR -> NORDOVEST  @
MDIR -> SUDOVEST  @
MDIR -> SUDEST  @
SDIR -> DIGIT  @ [0..23]
alle funzioni si passano solo variabili singole non espressioni
----------------------------------------------------------------------------
----------
*La fisica di ropeland (da migliorare)
gli urti sono (??)
-elastici se l'energia applicata ad un oggetto e' maggiore del suo peso
-anelastici
deve esser possibile:
-lanciare pietre
-prendere a *capocciate* oggetti danneggiandoli (sino ad ucciderli)
-il peso degli oggetti e' proporzionale alla lunghezza del loro programma
e dell'energia che possiedono (grassezza)
-per spostarsi si consuma energia
-imovimenti sono sempre soggetti ad attriti che tendono a fermarli
-tutti gli oggetti sono opachi
-ogni operazione compiuta prevede un consumo di energia
-due oggetti non possono avere la stessa posizione







