Completato

Note

Errore

Session expiration Your session is going to expireClick here to extend

Budget:

Piccolo progetto <800

Pubblicato il

02/03/17 11.14

Cliente

all***

Questo progetto è scaduto

Pubblica un progetto simile e ricevi velocemente offerte non vincolanti.

Pubblica ora il tuo progetto simile

Descrizione

Lo scopo del progetto è di sviluppare in linguaggio C un gioco interattivo nel quale il giocatore guida un personaggio nell'esplorazione di un labirinto. L'area del gioco prevede uno o piu labirinti.

Ogni labirinto contiene a sua volta delle porte girevoli che al passaggio del personaggio ruotano di 90° rispetto al loro asse centrale,liberando il passaggio di un corridoio e bloccandone un altro perpendicolare.I corridoi del labirinto sono, inoltre, disseminati di oggetti che il personaggio deve raccogliere

al fine poter accedere al labirinto successivo. Durante il gioco compaiono nel labirinto degli

avversari che tentano di catturare il personaggio, impedendogli di raccogliere gli oggetti e

uscire dal labirinto. Il personaggio può sfruttare le porte girevoli per bloccare il passaggio

degli avversari che lo inseguono. Infatti, solo il personaggio può oltrepassare le porte

facendole ruotare. Per gli avversari le porte sono indistinguibili dai muri del labirinto.

Nel labirinto possono essere presenti (o comparire e scomparire a intervalli casuali) oggetti

speciali che, se raccolti dal personaggio, gli forniscono capacità di difesa dagli avversari (ad

esempio scudi) o di attacco (ad esempio, armi). In avversario eventualmente eliminato dal

personaggio utilizzando un’arma, scompare per un intervallo prestabilito di tempo e viene

sostituito da un altro dopo un altro intervallo di tempo.

Una volta recuperati tutti gli oggetti non speciali, una porta di uscita dal labirinto rende

visibile. Raggiunta la porta di uscita, il personaggio può procedere al livello successivo

accedendo a un nuovo labirinto. L’utente governa il personaggio tramite tastiera (ad es. coi

tasti freccia in alto, in basso, verso destra e verso sinistra, ecc.). Esso può fermarsi nella

posizione in cui si trova quando il giocatore preme il tasto “barra spaziatrice”, altrimenti

procede nella direzione corrente.

Il gioco è organizzato come segue:

 uno o più labirinti ad assetto variabile in cui, cioè, sono presenti porte girevoli che

cambiano orientazione al passaggio del personaggio, aprendo un corridoio prima bloccato

e bloccandone uno perpendicolare prima aperto come in Figura 1;

 gli avversari tentano di catturare il personaggio per imprigionarlo in un’apposita cella

contenuta nella labirinto per un tempo limitato oppure per eliminarlo, utilizzando armi di

varia natura e pericolosità;

 avversari differenti nello stesso livello di gioco e in livelli differenti possono muoversi a

velocità diversa, avere a disposizione armamenti di diverso tipo per combattere il

personaggio e avere differente attitudine di difesa (maggiore o minore aggressività nei

confronti del personaggio);

 il personaggio del gioco può attaccare o difendersi dagli avversari se in possesso di armi

di offesa o di difesa raccolte durante l’esplorazione del labirinto;

 la scelta delle tipologie di armi di difesa e di offesa e il loro effetto nel gioco è lasciato

come libera scelta al candidato. Alcuni esempi sono: scudi, pozioni di invincibilità, pozioni

di invisibilità, pozioni che aumentano il livello del personaggio, archi, balestre, pistole,

frecce, proiettili, dardi magici (che inseguono un avversario tra i corridoi per una durata

prefissata e dipendente dal dardo o dal livello raggiunto dal personaggio), ecc.

Durante il gioco, gli avversari cercano di impedire al personaggio di recuperare tutti gli oggetti

presenti. A tal fine possono perseguire strategie differenti: quando il personaggio si trova a

una distanza da un avversario inferiore a una quantità massima stabilita e dipendente dal

guardiano, questo entrerà in modalità inseguimento e tenterà di intercettarlo. Se il

personaggio viene intercettato da un avversario, il personaggio viene penalizzato in qualche

modo: può essere spostato in una posizione speciale all’interno del labirinto (es. una prigione

temporanea); gli possono venir requisiti gli oggetti preziosi che ha raccolto; può essere

ucciso. Altre possibili penalizzazioni sono a discrezione del progettista. Gli avversari,

generalmente, non sono in grado di modificare l’assetto delle porte girevoli.

COMPORTAMENTO DEGLI AVVERSARI

Ogni avversario, in modalità pattugliamento (la modalità di default), si muove casualmente

nel labirinto. Ad ogni avversario è associato un riquadro di guardia (in esso centrato). Un

avversario si può accorgere della presenza del personaggio solo se esso entra nel suo

riquadro di guardia. Le dimensioni dei riquadri di guardia (individuate dalla lunghezza dei suoi

lati) possono variare da avversario ad avversario. Non appena il personaggio entra in un

riquadro di guardia, l’avversario coinvolto entra in modalità inseguimento e inizia a inseguire

il personaggio. Quando un avversario è in questa modalità, può abbandonarla solo se il

personaggio si allontana a sufficienza (a discrezione dello sviluppatore) dall’avversario stesso.

Alcuni avversari possono anche inseguire il personaggio fino a che non lo catturano, non

perdono un combattimento o il personaggio termina il livello. Se e quando un avversario

abbandona la modalità inseguimento, torna immediatamente alla modalità pattugliamento.

STRATEGIE AVVERSARI PER L’INTERCETTAZIONE DEL PERSONAGGIO

In modalità inseguimento ogni avversario può adottare una diversa strategia di inseguimento

del personaggio. Si deve, quindi, prevedere che ad avversari differenti si possano associare

diverse funzioni di movimento, a seconda della strategia che si vuole adottino. Un esempio

di strategia di inseguimento è quella che prevede di seguire il percorso minimo dalla

posizione corrente del guardiano alla posizione corrente del personaggio. Un’alternativa

potrebbe essere quello di dotare alcuni avversari della possibilità di anticipare, basandosi alla

posizione e direzione corrente del personaggio, le mosse del personaggio e seguire, quindi, il

percorso minimo che porti alla locazione in cui il personaggio potrebbe trovarsi dopo alcuni

passi lungo quella direzione. Un altro esempio, che rende la strategia più debole, potrebbe

essere quello di obbligare l’avversario a eseguire una o più movimenti casuali, ogni k

movimenti lungo il percorso minimo (per un qualche valore di k). Altre strategie possono

essere definite e realizzate a discrezione dei candidati.

DESCRIZIONE DI DETTAGLIO DEL PROGETTO

Il progetto deve prevedere:

1. livelli di difficoltà crescenti del gioco (ad esempio aumentando la velocità degli

avversari, includendo trappole (vedi punto 3), aumentando la dimensione e la

complessità del labirinto, potenziando le strategie di intercettazione del personaggio,

ecc.;

2. possibilità di cambiare i labirinti di gioco. I labirinti possono essere generati in maniera

casuale e/o letti da file, sia su richiesta del giocatore che al variare dei livelli di

difficoltà;

3. possibilità di inserire, all’aumentare della difficoltà dei livelli, delle trappole che

compaiono (in modo permanente o per periodi di tempo prefissati) durante il gioco

nel labirinto e che, ad esempio, possano rallentare temporaneamente la velocità del

personaggio, aumentare la velocità degli avversari, o che spostino il personaggio in

locazioni diverse all’interno del labirinto (ma sempre in un corridoio), oppure altri tipi

di penalizzazioni a discrezione dello sviluppatore;

4. possibilità di accrescere, all’aumentare della difficoltà dei livelli, il numero e le

tipologie di oggetti e avversari e/o la potenza delle loro strategie di gioco;

5. la comparsa di bonus che, ad esempio, aumentino temporaneamente la velocità del

personaggio, lo rendano invincibile per un periodo di tempo prestabilito, ecc;

6. la componente grafica del gioco è a discrezione dello sviluppatore. Verrà, comunque,

fornita dal docente una libreria minimale di funzioni per la gestione della simulazione

ASCII della componente grafica, per i movimenti dei personaggi nell’area di gioco e per

l’input asincrono da tastiera;

7. una relazione scritta che descriva nel dettaglio:

- il funzionamento del gioco sviluppato;

- le funzionalità previste;

- le diverse strategie delle guardie implementate;

- gli algoritmi sviluppati e le strutture dati principali;

- le scelte implementative attuate.

8. allegati al progetto dovranno essere consegnati tutti i sorgenti e i diversi esempi di

labirinto su cui testare l’applicazione.

Per lo sviluppo del progetto dovranno essere utilizzate:

Le librerie ncurses (Unix) e PDCurses(Windows).

Librerie relative alla gestione di strutture dati(code a priorità,grafi,ecc.) Inviate da noi.

Il software deve compilare e girare su entrambe le piattaforme(Windows e Linux).

Sarebbe gradita una relazione che descrivi dettagliatamente il progetto e dei commenti nel codice sorgente. Non sono richieste ulteriori funzionalità oltre a quelle descritte.