From bd8de3e71a2c0e33c35f53d7dd25e11a554ddda3 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 17:19:40 +0100 Subject: [PATCH 1/9] Spostato il giocatore in oggetto, ma... Non va la definizione di x e y alla generazione. --- main.cpp | 495 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 253 insertions(+), 242 deletions(-) diff --git a/main.cpp b/main.cpp index 03b92ff..7af3ffa 100644 --- a/main.cpp +++ b/main.cpp @@ -39,71 +39,6 @@ int pozioni_vita_piccole = 3; int pozioni_vita_medie = 2; int pozioni_vita_grandi = 1; -//Classe dei nemici -class Enemy -{ - public: - int x; - int y; - void move() - { - //Se intorno c'è il giocatore - if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER) - { - //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0... - hp--; - } - else - { - //Muoviti in una direzione casuale - bool moving = true; - while(moving) - { - int direction = rand() % 4; - switch(direction) - { - case 0: //Sinistra - if(map[x-1][y] == EMPTY) - { - map[x][y] = EMPTY; - map[x-1][y] = ENEMY; - x--; - moving = false; - } - break; - case 1: //Destra - if(map[x+1][y] == EMPTY) - { - map[x][y] = EMPTY; - map[x+1][y] = ENEMY; - x++; - moving = false; - } - break; - case 2: //Su - if(map[x][y-1] == EMPTY) - { - map[x][y] = EMPTY; - map[x][y-1] = ENEMY; - y--; - moving = false; - } - break; - case 3: //Giù - if(map[x][y+1] == EMPTY) - { - map[x][y] = EMPTY; - map[x][y+1] = ENEMY; - y++; - moving = false; - } - break; - } - } - } - } -}; - //Cura il giocatore di x void heal(int x) { @@ -202,187 +137,259 @@ void draw() cout << "Piano: " << depth << ' ' << "Vita: " << hp << "/" << HP_MAX << '\n'; } -//Fai muovere il giocatore -int move(int player[2]) +//Classe entità generica, sia nemico sia giocatore +class Entity { - int player_x = player[0]; - int player_y = player[1]; - bool waiting = true; - //Rileva i tasti freccia - while(waiting) - { - unsigned char input = getch(); - if(input == 224) + public: + int x; + int y; + int move(); +}; + +//Classe del giocatore +class Player : public Entity +{ + public: + int move() { - switch(getch()) + bool waiting = true; + //Rileva i tasti freccia + while(waiting) { - case 72: //Freccia su - if(map[player_x][player_y-1] == EMPTY) + unsigned char input = getch(); + if(input == 224) + { + switch(getch()) { - map[player_x][player_y] = EMPTY; - map[player_x][player_y-1] = PLAYER; - player_y--; - waiting = false; + case 72: //Freccia su + if(map[x][y-1] == EMPTY) + { + map[x][y] = EMPTY; + map[x][y-1] = PLAYER; + y--; + waiting = false; + } + else if(map[x][y-1] == ITEM_SMALL_POTION) + { + map[x][y] = EMPTY; + map[x][y-1] = PLAYER; + y--; + pozioni_vita_piccole++; + waiting = false; + } + else if(map[x][y-1] == ITEM_MEDIUM_POTION) + { + map[x][y] = EMPTY; + map[x][y-1] = PLAYER; + y--; + pozioni_vita_medie++; + waiting = false; + } + else if(map[x-1][y-1] == ITEM_BIG_POTION) + { + map[x][y] = EMPTY; + map[x][y-1] = PLAYER; + y--; + pozioni_vita_grandi++; + waiting = false; + } + else if(map[x][y-1] == EXIT) + { + return 1; + } + break; + case 80: //Freccia giù + if(map[x][y+1] == EMPTY) + { + map[x][y] = EMPTY; + map[x][y+1] = PLAYER; + y++; + waiting = false; + } + else if(map[x][y+1] == ITEM_SMALL_POTION) + { + map[x][y] = EMPTY; + map[x][y+1] = PLAYER; + y++; + pozioni_vita_piccole++; + waiting = false; + } + else if(map[x][y+1] == ITEM_MEDIUM_POTION) + { + map[x][y] = EMPTY; + map[x][y+1] = PLAYER; + y++; + pozioni_vita_medie++; + waiting = false; + } + else if(map[x-1][y] == ITEM_BIG_POTION) + { + map[x][y] = EMPTY; + map[x][y+1] = PLAYER; + y++; + pozioni_vita_grandi++; + waiting = false; + } + else if(map[x][y+1] == EXIT) + { + return 1; + } + break; + case 75: //Freccia sinistra + if(map[x-1][y] == EMPTY) + { + map[x][y] = EMPTY; + map[x-1][y] = PLAYER; + x--; + waiting = false; + } + else if(map[x-1][y] == ITEM_SMALL_POTION) + { + map[x][y] = EMPTY; + map[x-1][y] = PLAYER; + x--; + pozioni_vita_piccole++; + waiting = false; + } + else if(map[x-1][y] == ITEM_MEDIUM_POTION) + { + map[x][y] = EMPTY; + map[x-1][y] = PLAYER; + x--; + pozioni_vita_medie++; + waiting = false; + } + else if(map[x-1][y] == ITEM_BIG_POTION) + { + map[x][y] = EMPTY; + map[x-1][y] = PLAYER; + x--; + pozioni_vita_grandi++; + waiting = false; + } + else if(map[x-1][y] == EXIT) + { + return 1; + } + break; + case 77: //Freccia destra + if(map[x+1][y] == EMPTY) + { + map[x][y] = EMPTY; + map[x+1][y] = PLAYER; + x++; + waiting = false; + } + else if(map[x+1][y] == ITEM_SMALL_POTION) + { + map[x][y] = EMPTY; + map[x+1][y] = PLAYER; + x++; + pozioni_vita_piccole++; + waiting = false; + } + else if(map[x+1][y] == ITEM_MEDIUM_POTION) + { + map[x][y] = EMPTY; + map[x+1][y] = PLAYER; + x++; + pozioni_vita_medie++; + waiting = false; + } + else if(map[x+1][y] == ITEM_BIG_POTION) + { + map[x][y] = EMPTY; + map[x+1][y] = PLAYER; + x++; + pozioni_vita_grandi++; + waiting = false; + } + else if(map[x+1][y] == EXIT) + { + return 1; + } + break; } - else if(map[player_x][player_y-1] == ITEM_SMALL_POTION) + } + else if(input == 's') //S + { + //Salta un turno + waiting = false; + } + else if(input == 'i') //I + { + //Apri l'inventario + inventory(); + //Torna alla mappa + draw(); + } + } + return 0; + } +}; + +//Classe dei nemici +class Enemy : public Entity +{ + public: + int move() + { + //Se intorno c'è il giocatore + if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER) + { + //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0... + hp--; + } + else + { + //Muoviti in una direzione casuale + bool moving = true; + while(moving) + { + int direction = rand() % 4; + switch(direction) { - map[player_x][player_y] = EMPTY; - map[player_x][player_y-1] = PLAYER; - player_y--; - pozioni_vita_piccole++; - waiting = false; + case 0: //Sinistra + if(map[x-1][y] == EMPTY) + { + map[x][y] = EMPTY; + map[x-1][y] = ENEMY; + x--; + moving = false; + } + break; + case 1: //Destra + if(map[x+1][y] == EMPTY) + { + map[x][y] = EMPTY; + map[x+1][y] = ENEMY; + x++; + moving = false; + } + break; + case 2: //Su + if(map[x][y-1] == EMPTY) + { + map[x][y] = EMPTY; + map[x][y-1] = ENEMY; + y--; + moving = false; + } + break; + case 3: //Giù + if(map[x][y+1] == EMPTY) + { + map[x][y] = EMPTY; + map[x][y+1] = ENEMY; + y++; + moving = false; + } + break; } - else if(map[player_x][player_y-1] == ITEM_MEDIUM_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y-1] = PLAYER; - player_y--; - pozioni_vita_medie++; - waiting = false; - } - else if(map[player_x-1][player_y-1] == ITEM_BIG_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y-1] = PLAYER; - player_y--; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[player_x][player_y-1] == EXIT) - { - return 1; - } - break; - case 80: //Freccia giù - if(map[player_x][player_y+1] == EMPTY) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y+1] = PLAYER; - player_y++; - waiting = false; - } - else if(map[player_x][player_y+1] == ITEM_SMALL_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y+1] = PLAYER; - player_y++; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[player_x][player_y+1] == ITEM_MEDIUM_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y+1] = PLAYER; - player_y++; - pozioni_vita_medie++; - waiting = false; - } - else if(map[player_x-1][player_y] == ITEM_BIG_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x][player_y+1] = PLAYER; - player_y++; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[player_x][player_y+1] == EXIT) - { - return 1; - } - break; - case 75: //Freccia sinistra - if(map[player_x-1][player_y] == EMPTY) - { - map[player_x][player_y] = EMPTY; - map[player_x-1][player_y] = PLAYER; - player_x--; - waiting = false; - } - else if(map[player_x-1][player_y] == ITEM_SMALL_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x-1][player_y] = PLAYER; - player_x--; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[player_x-1][player_y] == ITEM_MEDIUM_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x-1][player_y] = PLAYER; - player_x--; - pozioni_vita_medie++; - waiting = false; - } - else if(map[player_x-1][player_y] == ITEM_BIG_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x-1][player_y] = PLAYER; - player_x--; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[player_x-1][player_y] == EXIT) - { - return 1; - } - break; - case 77: //Freccia destra - if(map[player_x+1][player_y] == EMPTY) - { - map[player_x][player_y] = EMPTY; - map[player_x+1][player_y] = PLAYER; - player_x++; - waiting = false; - } - else if(map[player_x+1][player_y] == ITEM_SMALL_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x+1][player_y] = PLAYER; - player_x++; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[player_x+1][player_y] == ITEM_MEDIUM_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x+1][player_y] = PLAYER; - player_x++; - pozioni_vita_medie++; - waiting = false; - } - else if(map[player_x+1][player_y] == ITEM_BIG_POTION) - { - map[player_x][player_y] = EMPTY; - map[player_x+1][player_y] = PLAYER; - player_x++; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[player_x+1][player_y] == EXIT) - { - return 1; - } - break; + } } } - else if(input == 's') //S - { - //Salta un turno - waiting = false; - } - else if(input == 'i') //I - { - //Apri l'inventario - inventory(); - //Torna alla mappa - draw(); - } - } - player[0] = player_x; - player[1] = player_y; - return 0; -} +}; //Funzioni per la generazione della mappa //Inizializza la mappa con spazi vuoti @@ -477,7 +484,7 @@ void corridor(int start_x, int start_y, int end_x, int end_y, bool verticale) } //Genera il livello -void generate(int player[2], Enemy* list[ENEMIES_IN_LEVEL]) +void generate(Player* player, Enemy* list[ENEMIES_IN_LEVEL]) { int corridor_x; int corridor_y; @@ -501,9 +508,11 @@ void generate(int player[2], Enemy* list[ENEMIES_IN_LEVEL]) //Posiziona il giocatore se è l'ultima stanza if(r == ROOMS - 1) { - player[0] = corridor_x; - player[1] = corridor_y; map[corridor_x][corridor_y] = PLAYER; + Player* created = new Player(); + created->x = corridor_x; + created->y = corridor_y; + player = created; } } //Posizionamento nemici @@ -573,7 +582,7 @@ void tick(Enemy* list[ENEMIES_IN_LEVEL]) int main() { - int player[2]; + Player* player; //Puntatore all'oggetto Giocatore Enemy* list[ENEMIES_IN_LEVEL]; //Lista di tutti i nemici nel livello srand(0); //TODO: Rendere il seed modificabile...? //Ciclo del gioco @@ -582,14 +591,16 @@ int main() init(); generate(player, list); draw(); + cout << player->x << '|' << player->y; //Ciclo di un livello while(true) { - int trigger = move(player); + int trigger = player->move(); if(trigger == 1) //Uscita toccata { break; } + cout << "ENEMY"; tick(list); draw(); } From d732d781b0c36bcfbfebc1ad8609fe668575d73d Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 17:34:20 +0100 Subject: [PATCH 2/9] Sistemato il problema del generatore. --- main.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/main.cpp b/main.cpp index 7af3ffa..baf2a00 100644 --- a/main.cpp +++ b/main.cpp @@ -326,7 +326,7 @@ class Player : public Entity } return 0; } -}; +} player; //Classe dei nemici class Enemy : public Entity @@ -484,7 +484,7 @@ void corridor(int start_x, int start_y, int end_x, int end_y, bool verticale) } //Genera il livello -void generate(Player* player, Enemy* list[ENEMIES_IN_LEVEL]) +void generate(Enemy* list[ENEMIES_IN_LEVEL]) { int corridor_x; int corridor_y; @@ -509,10 +509,8 @@ void generate(Player* player, Enemy* list[ENEMIES_IN_LEVEL]) if(r == ROOMS - 1) { map[corridor_x][corridor_y] = PLAYER; - Player* created = new Player(); - created->x = corridor_x; - created->y = corridor_y; - player = created; + player.x = corridor_x; + player.y = corridor_y; } } //Posizionamento nemici @@ -569,6 +567,7 @@ void generate(Player* player, Enemy* list[ENEMIES_IN_LEVEL]) placed_potions++; } } + cout << player.x << '|' << player.y; } //Processa il resto di un turno, dopo il movimento del giocatore. @@ -582,20 +581,19 @@ void tick(Enemy* list[ENEMIES_IN_LEVEL]) int main() { - Player* player; //Puntatore all'oggetto Giocatore Enemy* list[ENEMIES_IN_LEVEL]; //Lista di tutti i nemici nel livello srand(0); //TODO: Rendere il seed modificabile...? //Ciclo del gioco while(true) { init(); - generate(player, list); - draw(); - cout << player->x << '|' << player->y; + generate(list); + //draw(); + cout << ' ' << player.x << '|' << player.y; //Ciclo di un livello while(true) { - int trigger = player->move(); + int trigger = player.move(); if(trigger == 1) //Uscita toccata { break; From aba7415dacb9e39c93e3bf8fcb2ab23ea5864ece Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 17:35:26 +0100 Subject: [PATCH 3/9] Rimosse informazioni di debug. --- main.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index baf2a00..e98a73b 100644 --- a/main.cpp +++ b/main.cpp @@ -588,8 +588,7 @@ int main() { init(); generate(list); - //draw(); - cout << ' ' << player.x << '|' << player.y; + draw(); //Ciclo di un livello while(true) { @@ -598,7 +597,6 @@ int main() { break; } - cout << "ENEMY"; tick(list); draw(); } From 72852346c28009b20834e5472774359580514b71 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 17:43:02 +0100 Subject: [PATCH 4/9] Spostata la vita alla classe madre. --- main.cpp | 206 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 104 insertions(+), 102 deletions(-) diff --git a/main.cpp b/main.cpp index e98a73b..d91d0c4 100644 --- a/main.cpp +++ b/main.cpp @@ -27,115 +27,17 @@ using namespace std; //Mappa del gioco unsigned char map[X_MAX][Y_MAX]; -//Tutta sta roba non si potrebbe mettere in una classe giocatore o qualcosa del genere? //Numero del piano raggiunto dal giocatore int depth = 1; -//Salute del giocatore -int hp = HP_MAX; - //Inventario del giocatore int pozioni_vita_piccole = 3; int pozioni_vita_medie = 2; int pozioni_vita_grandi = 1; -//Cura il giocatore di x -void heal(int x) -{ - if(hp + x > HP_MAX) - { - hp = HP_MAX; - } - else - { - hp += x; - } -} - -//Visualizza l'inventario -void inventory() -{ - system("cls"); - cout << "Piano: " << depth << ' ' << "Vita: " << hp << "/" << HP_MAX << "\n"; - for(int i = 0; i < X_MAX; i++) - { - cout << (char) DOUBLELINE; - } - //Anche qui, credo si possa migliorare qualcosa... - if(pozioni_vita_piccole > 0) - { - cout << pozioni_vita_piccole << "x Pozione di Vita (p)iccola\tRipristina 10 Vita\n"; - } - else - { - cout << '\n'; - } - if(pozioni_vita_medie > 0) - { - cout << pozioni_vita_medie << "x Pozione di Vita (n)ormale\tRipristina 20 Vita\n"; - } - else - { - cout << '\n'; - } - if(pozioni_vita_grandi > 0) - { - cout << pozioni_vita_grandi << "x Pozione di Vita (m)aggiore\tRipristina 50 Vita\n"; - } - else - { - cout << '\n'; - } - //Selezione dell'oggetto da usare. - cout << "Scrivi la lettera corrispondente all'oggetto che vuoi usare.\n"; - while(true) - { - //Effetto degli oggetti - unsigned char selezione = getch(); - if(selezione == 112) //p - { - if(pozioni_vita_piccole > 0) - { - pozioni_vita_piccole--; - heal(10); - break; - } - } - else if(selezione == 110) //n - { - if(pozioni_vita_medie > 0) - { - pozioni_vita_medie--; - heal(20); - break; - } - } - else if(selezione == 109) //m - { - if(pozioni_vita_grandi > 0) - { - pozioni_vita_grandi--; - heal(50); - break; - } - } - } -} - -//Aggiorna la console con la situazione corrente del gioco. -void draw() -{ - //Svuota lo schermo della console. Sono sicuro che ci sia un modo molto migliore per farlo, ma non mi viene in mente... - system("cls"); - for(int y=0; y HP_MAX) + { + player.hp = HP_MAX; + } + else + { + player.hp += x; + } +} + +//Aggiorna la console con la situazione corrente del gioco. +void draw() +{ + //Svuota lo schermo della console. Sono sicuro che ci sia un modo molto migliore per farlo, ma non mi viene in mente... + system("cls"); + for(int y=0; y 0) + { + cout << pozioni_vita_piccole << "x Pozione di Vita (p)iccola\tRipristina 10 Vita\n"; + } + else + { + cout << '\n'; + } + if(pozioni_vita_medie > 0) + { + cout << pozioni_vita_medie << "x Pozione di Vita (n)ormale\tRipristina 20 Vita\n"; + } + else + { + cout << '\n'; + } + if(pozioni_vita_grandi > 0) + { + cout << pozioni_vita_grandi << "x Pozione di Vita (m)aggiore\tRipristina 50 Vita\n"; + } + else + { + cout << '\n'; + } + //Selezione dell'oggetto da usare. + cout << "Scrivi la lettera corrispondente all'oggetto che vuoi usare.\n"; + while(true) + { + //Effetto degli oggetti + unsigned char selezione = getch(); + if(selezione == 112) //p + { + if(pozioni_vita_piccole > 0) + { + pozioni_vita_piccole--; + heal(10); + break; + } + } + else if(selezione == 110) //n + { + if(pozioni_vita_medie > 0) + { + pozioni_vita_medie--; + heal(20); + break; + } + } + else if(selezione == 109) //m + { + if(pozioni_vita_grandi > 0) + { + pozioni_vita_grandi--; + heal(50); + break; + } + } + } +} + //Funzioni per la generazione della mappa //Inizializza la mappa con spazi vuoti void init() From 70a35cc17ce113a12dd42daf1453b29054a5d98f Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 17:45:52 +0100 Subject: [PATCH 5/9] =?UTF-8?q?Spostata=20la=20cura=20all'interno=20delle?= =?UTF-8?q?=20entit=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/main.cpp b/main.cpp index d91d0c4..7a46f91 100644 --- a/main.cpp +++ b/main.cpp @@ -46,7 +46,20 @@ class Entity int x; int y; int hp; + int hp_max; int move(); + //Cura di x l'entità + void heal(int x) + { + if(hp + x > HP_MAX) + { + hp = HP_MAX; + } + else + { + hp += x; + } + } }; //Classe del giocatore @@ -54,6 +67,7 @@ class Player : public Entity { public: int hp = HP_MAX; + int hp_max = HP_MAX; int move() { bool waiting = true; @@ -295,19 +309,6 @@ class Enemy : public Entity } }; -//Cura il giocatore di x -void heal(int x) -{ - if(player.hp + x > HP_MAX) - { - player.hp = HP_MAX; - } - else - { - player.hp += x; - } -} - //Aggiorna la console con la situazione corrente del gioco. void draw() { @@ -368,7 +369,7 @@ void inventory() if(pozioni_vita_piccole > 0) { pozioni_vita_piccole--; - heal(10); + player.heal(10); break; } } @@ -377,7 +378,7 @@ void inventory() if(pozioni_vita_medie > 0) { pozioni_vita_medie--; - heal(20); + player.heal(20); break; } } @@ -386,7 +387,7 @@ void inventory() if(pozioni_vita_grandi > 0) { pozioni_vita_grandi--; - heal(50); + player.heal(50); break; } } From 6ab095acd68c34e9738483135d4dfb1c47ab6d6f Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 18:20:13 +0100 Subject: [PATCH 6/9] Semplificata la funzione del movimento. --- main.cpp | 215 ++++++++++++++++++------------------------------------- 1 file changed, 70 insertions(+), 145 deletions(-) diff --git a/main.cpp b/main.cpp index 7a46f91..6327f03 100644 --- a/main.cpp +++ b/main.cpp @@ -71,162 +71,66 @@ class Player : public Entity int move() { bool waiting = true; + unsigned char* starting = &map[x][y]; //Casella attuale + unsigned char* target; //Bersaglio del movimento //Rileva i tasti freccia while(waiting) { unsigned char input = getch(); + short int dir = 0; //Direzione del movimento, per modificare x e y. if(input == 224) { switch(getch()) { - case 72: //Freccia su - if(map[x][y-1] == EMPTY) - { - map[x][y] = EMPTY; - map[x][y-1] = PLAYER; - y--; - waiting = false; - } - else if(map[x][y-1] == ITEM_SMALL_POTION) - { - map[x][y] = EMPTY; - map[x][y-1] = PLAYER; - y--; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[x][y-1] == ITEM_MEDIUM_POTION) - { - map[x][y] = EMPTY; - map[x][y-1] = PLAYER; - y--; - pozioni_vita_medie++; - waiting = false; - } - else if(map[x-1][y-1] == ITEM_BIG_POTION) - { - map[x][y] = EMPTY; - map[x][y-1] = PLAYER; - y--; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[x][y-1] == EXIT) - { - return 1; - } + case 72: //Freccia su, 1 + target = &map[x][y-1]; + dir = 1; break; - case 80: //Freccia giù - if(map[x][y+1] == EMPTY) - { - map[x][y] = EMPTY; - map[x][y+1] = PLAYER; - y++; - waiting = false; - } - else if(map[x][y+1] == ITEM_SMALL_POTION) - { - map[x][y] = EMPTY; - map[x][y+1] = PLAYER; - y++; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[x][y+1] == ITEM_MEDIUM_POTION) - { - map[x][y] = EMPTY; - map[x][y+1] = PLAYER; - y++; - pozioni_vita_medie++; - waiting = false; - } - else if(map[x-1][y] == ITEM_BIG_POTION) - { - map[x][y] = EMPTY; - map[x][y+1] = PLAYER; - y++; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[x][y+1] == EXIT) - { - return 1; - } + case 80: //Freccia giù, 2 + target = &map[x][y+1]; + dir = 2; break; - case 75: //Freccia sinistra - if(map[x-1][y] == EMPTY) - { - map[x][y] = EMPTY; - map[x-1][y] = PLAYER; - x--; - waiting = false; - } - else if(map[x-1][y] == ITEM_SMALL_POTION) - { - map[x][y] = EMPTY; - map[x-1][y] = PLAYER; - x--; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[x-1][y] == ITEM_MEDIUM_POTION) - { - map[x][y] = EMPTY; - map[x-1][y] = PLAYER; - x--; - pozioni_vita_medie++; - waiting = false; - } - else if(map[x-1][y] == ITEM_BIG_POTION) - { - map[x][y] = EMPTY; - map[x-1][y] = PLAYER; - x--; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[x-1][y] == EXIT) - { - return 1; - } + case 75: //Freccia sinistra, 3 + target = &map[x-1][y]; + dir = 3; break; - case 77: //Freccia destra - if(map[x+1][y] == EMPTY) - { - map[x][y] = EMPTY; - map[x+1][y] = PLAYER; - x++; - waiting = false; - } - else if(map[x+1][y] == ITEM_SMALL_POTION) - { - map[x][y] = EMPTY; - map[x+1][y] = PLAYER; - x++; - pozioni_vita_piccole++; - waiting = false; - } - else if(map[x+1][y] == ITEM_MEDIUM_POTION) - { - map[x][y] = EMPTY; - map[x+1][y] = PLAYER; - x++; - pozioni_vita_medie++; - waiting = false; - } - else if(map[x+1][y] == ITEM_BIG_POTION) - { - map[x][y] = EMPTY; - map[x+1][y] = PLAYER; - x++; - pozioni_vita_grandi++; - waiting = false; - } - else if(map[x+1][y] == EXIT) - { - return 1; - } + case 77: //Freccia destra, 4 + target = &map[x+1][y]; + dir = 4; break; + //Aggiungere gestione del caso che non sia una delle quattro frecce + } + //Muoviti e agisci! + if(*target == EMPTY) + { + *starting = EMPTY; + *target = PLAYER; + waiting = false; + } + else if(*target == ITEM_SMALL_POTION) + { + *starting = EMPTY; + *target = PLAYER; + pozioni_vita_piccole++; + waiting = false; + } + else if(*target == ITEM_MEDIUM_POTION) + { + *starting = EMPTY; + *target = PLAYER; + pozioni_vita_medie++; + waiting = false; + } + else if(*target == ITEM_BIG_POTION) + { + *starting = EMPTY; + *target = PLAYER; + pozioni_vita_grandi++; + waiting = false; + } + else if(*target == EXIT) + { + return 1; } } else if(input == 's') //S @@ -241,6 +145,27 @@ class Player : public Entity //Torna alla mappa draw(); } + //Se ti sei mosso, controlla in che direzione e aggiorna correttamente la x e la y. + //Non mi veniva in mente un modo per farlo meglio. + if(!waiting) + { + if(dir == 1) + { + y--; + } + else if(dir == 2) + { + y++; + } + else if(dir == 3) + { + x--; + } + else if(dir == 4) + { + x++; + } + } } return 0; } @@ -321,7 +246,7 @@ void draw() cout << map[x][y]; } } - cout << "Piano: " << depth << ' ' << "Vita: " << player.hp << "/" << HP_MAX << '\n'; + cout << "Piano: " << depth << ' ' << "Vita: " << player.hp << "/" << HP_MAX << ' ' << player.x << '|' << player.y << '\n'; } //Visualizza l'inventario From 21e64ddfabfd9feeb4249b833bf1e38292317305 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 18:42:01 +0100 Subject: [PATCH 7/9] Cambiato l'algoritmo per i danni subiti. --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 6327f03..b6ef932 100644 --- a/main.cpp +++ b/main.cpp @@ -181,7 +181,7 @@ class Enemy : public Entity if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER) { //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0... - player.hp--; + hp -= rand() % 5 + 1; } else { From e5e737a221f140734812bb64dd77d989239b1d02 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 19:02:19 +0100 Subject: [PATCH 8/9] Spostato l'inventario nella classe Player MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Non so perchè, ma ho un brutto presentimento... --- main.cpp | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/main.cpp b/main.cpp index b6ef932..16bb002 100644 --- a/main.cpp +++ b/main.cpp @@ -30,11 +30,6 @@ unsigned char map[X_MAX][Y_MAX]; //Numero del piano raggiunto dal giocatore int depth = 1; -//Inventario del giocatore -int pozioni_vita_piccole = 3; -int pozioni_vita_medie = 2; -int pozioni_vita_grandi = 1; - //Devo mettere due volte draw perchè ha bisogno della classe Player, a cui però serve la funzione draw. Idem per l'inventario... void draw(); void inventory(); @@ -45,15 +40,15 @@ class Entity public: int x; int y; - int hp; - int hp_max; + int hp = HP_MAX; + int hp_max = HP_MAX; int move(); //Cura di x l'entità void heal(int x) { - if(hp + x > HP_MAX) + if(hp + x > hp_max) { - hp = HP_MAX; + hp = hp_max; } else { @@ -66,8 +61,9 @@ class Entity class Player : public Entity { public: - int hp = HP_MAX; - int hp_max = HP_MAX; + int pozioni_vita_piccole = 3; + int pozioni_vita_medie = 2; + int pozioni_vita_grandi = 1; int move() { bool waiting = true; @@ -181,7 +177,7 @@ class Enemy : public Entity if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER) { //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0... - hp -= rand() % 5 + 1; + player.hp -= rand() % 5 + 1; } else { @@ -259,25 +255,25 @@ void inventory() cout << (char) DOUBLELINE; } //Anche qui, credo si possa migliorare qualcosa... - if(pozioni_vita_piccole > 0) + if(player.pozioni_vita_piccole > 0) { - cout << pozioni_vita_piccole << "x Pozione di Vita (p)iccola\tRipristina 10 Vita\n"; + cout << player.pozioni_vita_piccole << "x Pozione di Vita (p)iccola\tRipristina 10 Vita\n"; } else { cout << '\n'; } - if(pozioni_vita_medie > 0) + if(player.pozioni_vita_medie > 0) { - cout << pozioni_vita_medie << "x Pozione di Vita (n)ormale\tRipristina 20 Vita\n"; + cout << player.pozioni_vita_medie << "x Pozione di Vita (n)ormale\tRipristina 20 Vita\n"; } else { cout << '\n'; } - if(pozioni_vita_grandi > 0) + if(player.pozioni_vita_grandi > 0) { - cout << pozioni_vita_grandi << "x Pozione di Vita (m)aggiore\tRipristina 50 Vita\n"; + cout << player.pozioni_vita_grandi << "x Pozione di Vita (m)aggiore\tRipristina 50 Vita\n"; } else { @@ -291,27 +287,27 @@ void inventory() unsigned char selezione = getch(); if(selezione == 112) //p { - if(pozioni_vita_piccole > 0) + if(player.pozioni_vita_piccole > 0) { - pozioni_vita_piccole--; + player.pozioni_vita_piccole--; player.heal(10); break; } } else if(selezione == 110) //n { - if(pozioni_vita_medie > 0) + if(player.pozioni_vita_medie > 0) { - pozioni_vita_medie--; + player.pozioni_vita_medie--; player.heal(20); break; } } else if(selezione == 109) //m { - if(pozioni_vita_grandi > 0) + if(player.pozioni_vita_grandi > 0) { - pozioni_vita_grandi--; + player.pozioni_vita_grandi--; player.heal(50); break; } From 06eb2a6eb47c622c2b0bd30a3386b56ee363c77c Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 3 Jan 2016 19:12:55 +0100 Subject: [PATCH 9/9] =?UTF-8?q?Aggiunta=20una=20funzione=20per=20danneggia?= =?UTF-8?q?re=20un'entit=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 16bb002..d2595fe 100644 --- a/main.cpp +++ b/main.cpp @@ -55,6 +55,19 @@ class Entity hp += x; } } + //Danneggia di x l'entità + void damage(int x) + { + if(hp - x < 0) + { + //entità zombi + hp = 0; + } + else + { + hp -= x; + } + } }; //Classe del giocatore @@ -177,7 +190,7 @@ class Enemy : public Entity if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER) { //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0... - player.hp -= rand() % 5 + 1; + player.damage(rand() % 5 + 1); } else {