Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [INFORM] Gioco del tris

Ciao.
Non ho trovato nulla a riguardo sul manifesto, quindi suppongo che sia IT
postare codice INFORM anche se non strettamente legato alle AT.
Questo è il mio primo programma in INFORM. Si tratta del gioco del tris, che
ho intenzione di integrare nella mia prima avventura. Cosa pensate del
codice? In particolare avete suggerimenti sulla "grafica" o sulla routine
DaNumeroATesto?
Ignazio
*** Inizio codice ***
Array Caselle->9;
[DaNumeroATesto numero;
    switch (Caselle->numero) {
        ! Possibile non ci sia altro modo senza strings.h?
        0: switch (numero) {
            0: return "1 ";
            1: return "2 ";
            2: return "3 ";
            3: return "4 ";
            4: return "5 ";
            5: return "6 ";
            6: return "7 ";
            7: return "8 ";
            8: return "9 ";
        }
        1: return " X";
        2: return " O";
    }
];
[DisegnaCampo;
    font off;
    print (string)DaNumeroATesto(0), " |",
          (string)DaNumeroATesto(1), " |",
          (string)DaNumeroATesto(2), "^";
    print "---+---+---^";
    print (string)DaNumeroATesto(3), " |",
          (string)DaNumeroATesto(4), " |",
          (string)DaNumeroATesto(5), "^";
    print "---+---+---^";
    print (string)DaNumeroATesto(6), " |",
          (string)DaNumeroATesto(7), " |",
          (string)DaNumeroATesto(8), "^";
    print "^";
    font on;
];
Array text_array -> 4;
[ChiediMossa n;
    .EP;
    text_array->0 = 1;
    print "Fai la tua mossa (1-9): ";
    read text_array 0;
    n = text_array->2 - '1';
    if (text_array->1 == 0 || n < 0 || n > 8) {
        print "Errore: inserisci un numero tra 1 e 9.^";
        ! Uso jump anche se deprecated... In fin dei conti, in questo caso,
è il sistema più elegante.
        jump EP;
   } else {
        print "^";
        return n;
   }
];
[ControllaRiga a b c;
    if ((Caselle->a == Caselle->b) && (Caselle->b == Caselle->c)) return
Caselle->a;
    return 0;
];
[ControllaTris c;
    c = ControllaRiga(0, 1, 2); if (c ~= 0) return c;
    c = ControllaRiga(3, 4, 5); if (c ~= 0) return c;
    c = ControllaRiga(6, 7, 8); if (c ~= 0) return c;
    c = ControllaRiga(0, 3, 6); if (c ~= 0) return c;
    c = ControllaRiga(1, 4, 7); if (c ~= 0) return c;
    c = ControllaRiga(2, 5, 8); if (c ~= 0) return c;
    c = ControllaRiga(0, 4, 8); if (c ~= 0) return c;
    c = ControllaRiga(6, 4, 2); if (c ~= 0) return c;
    return 0;
];
[ScegliMossa x c;
    ! Controlla i tris del computer
    for (x = 0 : x < 9 : x++) {
        if (Caselle->x == 0) {
            Caselle->x = 2;
            c = ControllaTris();
            Caselle->x = 0;
            if (c == 2) return x;
        }
    }
    ! Controlla i tris dell'avversario
    for (x = 0 : x < 9 : x++) {
        if (Caselle->x == 0) {
            Caselle->x = 1;
            c = ControllaTris();
            Caselle->x = 0;
            if (c == 1) return x;
        }
    }
    ! Controlla se il centro è libero
    if (Caselle->4 == 0) return 4;
    ! Controlla se gli angoli sono liberi
    if (Caselle->0 == 0 || Caselle->2 == 0 ||
        Caselle->0 == 6 || Caselle->8 == 0) {
        do {
            x = random(4);
            switch (x) {
                1: x = 0;
                2: x = 2;
                3: x = 6;
                4: x = 8;
            }
        } until (Caselle->x == 0);
        return x;
    }
    ! Sceglie a caso
    do {
        x = random(9) - 1;
    } until (Caselle->x == 0);
    return x;
];
[Gioca m usate;
    DisegnaCampo();
    for(::) {
        ! Mossa del giocatore
        do {
            m = ChiediMossa();
            if (Caselle->m ~= 0)
                print "La casella è già occupata.^";
        } until (Caselle->m == 0);
        Caselle->m = 1;
        usate = usate + 1;
        DisegnaCampo();
        ! Controlla tris
        if (ControllaTris() == 1) return 1;
        if (usate == 9) return 0;
        ! Mossa del computer
        m = ScegliMossa();
        Caselle->m = 2;
        usate = usate + 1;
        DisegnaCampo();
        ! Controlla tris
        if (ControllaTris() == 2) return 0;
        if (usate == 9) return 0;
    }
];
[Main;
    if (Gioca() == 1)
        print "Hai vinto!^";
    else
        print "Hai perso!^";
];

 che ho intenzione di integrare nella mia prima avventura.
Se e' integrato nell' avventura, va benisimo, ma per caritŕ niente abusi 
della Z-machine !
Vorrei fondare l' ADZM (Associazione Difesa Z-Machine ;)))
Saluti,
Dott. Piergiorgio.

della Z-machine !
Mah, gli abuse non sono poi così male... è proprio da uno di quelli
che ho capito come fare a scrivere la funzione Getnumber. Devo dire
che a livello di codice possono essere molto interessanti anche
loro...
Ciao da
Vincenzo

Salve a tutti,
ho ripreso a lavorare al manuale, per la precisione all'appendice A2
che illustra tutti (o quasi) i messaggi di sistema delle librerie
italiane. Ah, Giovanni, sto scoprendo un po' di errori in Infit (spazi
inutili, punti che mancano e cosě via): vuoi che li raccolga in un
file di testo e te li invii?
Per quanto riguarda la presunta appendice A3 (quella cioč che dovrebbe
illustrare il funzionamento delle funzioni interne di Infit), ho
deciso per ora di lasciar perdere, su consiglio dello stesso Giovanni;
se in effetti e prossime versioni di Infit subiranno cosě tanti
cambiamenti rispetto a quella attuale č meglio aspettare. Quando poi
avete completato la traduzione dell'IBG con le specifiche di Infit,
vedrň di dargli un'occhiata, giusto per evitare di scrivere cose
"doppie"...
Ciao da
Vincenzo  

 Mah, gli abuse non sono poi così male...
Nell'IF Archive c'e' un genere proprio per questo tipo di "giochi".
Non a caso il genere si chiama "Abuse".
Mi sembra di aver visto un "Tetris" fatto da Plotkin, se
non sbaglio.
Rob
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

non sbaglio.
Si, è così. Comunque gli abuse sono IMHO la dimostrazione che qualcosa
di interattivo si può fare con Inform...
Ciao da
Vincenzo

ho ripreso a lavorare al manuale, per la precisione all'appendice A2
ottimo!
max "torredifuoco" bianchi

ottimo!
Grazie. Appena verrà rilasciata una versione stabile dell'editor di
Schillaci, vedrò di dargli un'occchiata per rifare eventualmente il
capitolo 1 (IF-IDE mi piace sempre meno, se non altro per gli errori
che causa)... :))
Ciao da
Vincenzo

 Vincenzo
Ciao
ci sto ancora lavorando......
Ho aggiunto la gestione dell'albero degli oggetti, relativamente alle
classi create dall'utente, ora è possibile cliccare su di una nuova classe
e il cursore viene automaticamente posizionato sulla definizione della
classe (e su tutti gli oggetti derivati da essa).
Ho notato un problema con IF-IDE quando creo una nuova classe e voglio
posizionare il cursore sulla definizione usando l'albero degli oggetti...
Sono ancora un po indietro, sto finendo di scrivere i files di
configurazione e una piccola guida per l'installazione (che resta simile a
quella di inform, con l'aggiunta che bisogna installare una JDK o almeno
un ambiente JRE per eseguire il programma scritto -lo ricordo- in java).
Farò avere notizie.
Ciao 
Alessandro
PS: C'è qlc che mi possa dare una mano?????!!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it