Codici
Zork

Zork

Zork è uno dei più famosi videogiochi della storia. Lo è per vari motivi:

  • perché è una delle prime avventure testuali (anche se la prima in assoluto è Colossal Cave)
  • perché è uno dei primi software "portabili", cioè eseguibili su sistemi operativi diversi e su macchine diverse
  • perché è uno dei giochi più divertenti, umoristici e godibili
Ogni codice sorgente è scritto in un certo linguaggio. Per farlo eseguire da un computer nella maniera più veloce possibile, il codice viene compilato, cioè tradotto dal linguaggio originale (che comprende istruzione astratte, come "conta fino a 10") in linguaggio macchina (che comprende solo istruzioni semplici, come "aggiungi 1 al valore contenuto in questo registro").

Ma di linguaggi macchina ce ne sono diversi, a seconda della tipologia di processore. Per cui un codice compilato per essere eseguito su un computer Intel 8086 non sarà eseguibile da un Motorola 68000.

Questa situazione fa sì che per scrivere un programma che sia eseguibile su N computer con processori diversi occorre compilarlo in N versioni diverse. Oppure no?

No. La soluzione alternativa è quella della "macchina virtuale". Per macchina virtuale in generale si intende un software che gira in un sistema operativo X ma simula il comportamento di un'altra macchina, eventualmente con un altro sistema operativo. Usando una macchina virtuale si può eseguire un programma scritto originariamente per un diverso sistema operativo e per un diverso processore. Oggi questa pratica è molto comune e in pratica tutto il software che gira "in cloud" viene eseguito in questo modo.

Ma all'epoca l'idea di Tim Anderson, Marc Blank, Bruce Daniels e Dave Lebling, gli inventori di Zork, era parecchio innovativa. All'origne Zork era scritto in MDL, un dialetto Lisp creato al MIT di cui esisteva un interprete per il computer PDP-10, che era un mainframe, cioè uno di quei computer enormi che occupavano i laboratori delle Università statunitensi. Un frammento di Zork scritto in MDL lo trovate nell'immagine del pannello.

Per evitare di dover ricompilare il gioco per ogni diverso sistema esistente, nel 1979 Joel Berez e Marc Blank decidono di realizzare una macchina virtuale, la Z-machine, per ognuno dei principali processori disponibili. I giochi, invece, venivano compilati in un formato unico, eseguibile da tutte le Z-machine. Questo sistema permise di far circolare Zork in tutto il mondo e alla società Infocom di crescere enormemente, fino ad ad avere 100 dipendenti e un valore stimato di dieci milioni di dollari.

Ma stava arrivando la grafica nei video giochi, e i PC IBM stavano diventando uno standard. Infocom viene venduta, poi chiusa nel 1989, lasciando il mondo dei giocatori di Zork a bocca asciutta.

Quattro anni dopo Graham Nelson - uno strano tipo di matematico poeta amante delle finzioni interattive - decide di riportare in vita Zork scrivendo un proprio compilatore - basato su un linguaggio completamente differente - ma in grado di generare Z-files compatibili; mentre altri scrivevano degli interpreti per i nuovi computer.

Ancora oggi esistono interpreti in grado di eseguire Z-files su Linux, Windows e persino su IPhone.

Nelson ha scritto in seguito diverse finzioni interattivi, alcune delle quali sono diventate famose, come Curses.

Questo è un esempio di codice Inform, tratto dalla relativa pagina di Wikipedia Inform:

Constant Story "HELLO WIKIPEDIA";
Constant Headline "^An Interactive Example^";

Include "Parser";
Include "VerbLib";

[ Initialise;
    location = Living_Room;
    "Hello World";
];

Object Living_Room "Living Room"
    with
        description "A comfortably furnished living room.",
        n_to Kitchen,
        s_to Frontdoor,
    has light;

Object -> Salesman "insurance salesman"
    with
        name 'insurance' 'salesman' 'man',
        description "An insurance salesman in a tacky polyester
              suit.  He seems eager to speak to you.",
        before [;
            Listen:
                move Insurance_Paperwork to player;
                "The salesman bores you with a discussion
                 of life insurance policies.  From his
                 briefcase he pulls some paperwork which he
                 hands to you.";
        ],
    has animate;

Object -> -> Briefcase "briefcase"
    with
        name 'briefcase' 'case',
        description "A slightly worn, black briefcase.",
    has container;

Object -> -> -> Insurance_Paperwork "insurance paperwork"
    with
        name 'paperwork' 'papers' 'insurance' 'documents' 'forms',
        description "Page after page of small legalese.";

Include "Grammar";

Torna su

Prossimo pannello:  TAUmus