Salve a tutti,
sono nuovo, mi presento.. grigion studente!!
Devo consegnare un progetto che prevede la creazione di un RPG testuale. Sono veramente una schiappa come sviluppatore e ho bisogno di un aiuto nel capire come iniziare ad organizzare il lavoro... vi illustro il da farsi:
Si deve implementare un'architettura client-server per un RPG testuale multiplayer (\real-time", non a turni" o altro). Il progetto comprende la realizzazione sia del server che del client. Il client fornisce l'interfaccia per consentire all'utente di interagire col server. Al primo avvio il client deve concordare con il server i parametri di funzionamento (nome-utente, password). L'interazione successiva avviene attraverso comandi immessi dall'utente. Il server gestisce la creazione di nuove utenze, l'interazione dei personaggi giocatore (nel seguito \PG") tra di loro e con entita gestite dal server stesso (nel seguito \mostri") e in generale con il mondo virtuale.
I PG uccidendo mostri ottengono denaro ed esperienza, informazioni di cui il server deve tenere traccia (memorizzando i dati dei PG su disco). Un PG non ha bisogno di bere, mangiare o dormire; non invecchia (ne muore di vecchiaia). Il server e concorrente, quindi puo gestire piu PG contemporaneamente. Il mondo virtuale in cui si svolge l'azione e diviso in stanze, in genere due entita interagiranno tra loro solo se si trovano nella stessa stanza (es. un PG non puo attaccare un mostro in una stanza diversa dalla sua). Non e previsto il combattimento tra PG (il server non e \PvP"), l'unica interazione possibile tra di loro e la chat (comando \talk(who,msg)"). Quando un utente si collega al server, il suo PG parte da una stanza predenita e poi si sposta per il mondo cercando altri PG con cui attaccare i mostri presenti.
Lo stato delle stanze (mostri ed oggetti presenti) viene resettato periodicamente: ad intervalli di tempo predeniti (es. ogni 10 min) i mostri uccisi sono ricreati (in seguito \respawn"), tranne nel caso ci sia un combattimento in corso (bisogna aspettare almeno 5 min dalla ne del combattimento prima del reset, per dar tempo ai PG di prendere gli oggetti). Invece, quando un PG viene ucciso, ovvero se i suoi punti ferita scendono a zero, viene spostato in una stanza speciale denominata \tempio" e viene riportato in vita, ma subisce una penalita sui punti esperienza accumulati (l'esperienza puo scendere al massimo a zero, non e prevista la perdita di livelli).
All'avvio il server deve leggere un file di congurazione dove vengono fissati i parametri di funzionamento e caricare le informazioni sull'ambiente virtuale. Chi opera il server (in seguito Game Master o GM) puo mandare un messaggio in chat ad un PG o a tutti (comando \talk(who,msg)" o \talkall(msg)") e visualizzare l'elenco degli utenti connessi (comando \who()"), le informazioni relative ad un PG (comando \show(who)"). Il GM puo manifestarsi nel mondo virtuale (comandi \appear(room)" e \vanish()") o osservare cosa succede senza essere presente (comando \peek(room)"). Il GM non puo ferire le altre entita o essere ferito; invece puo bandire un PG, cioe disconnettere un utente ed impedire che si ricolleghi per un certo intervallo di tempo (comando \ban(who,time=1)"), per default un'ora. Infine, il GM ha un comando \quit()" per interrompere il servizio. Le funzionalita vanno implementate scegliendo quale sintassi adottare (in particolare, non è detto che ci sia corrispondenza 1:1 tra funzionalita/comandi e metodi).
Ora senza perderci in codice che mi sembra ancora prematuro, vorrei quindi capire:
- come strutturare le funzionalità de client
- come strutturare le funzionalità de server
- cosa devo far fare all'uno e all'altro e come farlo ( architettura, macchine virtuali, consigli di varia natura di chi ci è già passato magari)
- Come faccio a creare un "mondo" con le "stanze" e dove deve risiedere (client o server)
- cosa devo inziare a sviluppare
chiaramente le specifiche sono molte di più ma le proprietà degli oggetti e dei metodi per ora sono talmente lontani che li ho chiaramente evitati.
Spero in una piacevole risposta o chiacchierata con qualcuno disposto a spiegarmi da dove iniziare e come organizzarmi!!! Grazie a chi ci sarà!