diff --git a/main.cpp b/main.cpp index 28781f6..870b7e7 100644 --- a/main.cpp +++ b/main.cpp @@ -48,9 +48,10 @@ void room(int start_x, int start_y, int end_x, int end_y); void corridor(int start_x, int start_y, int end_x, int end_y, bool verticale); void generate(); void tick(); +void attack(int x, int y); Enemy* find(int x, int y); -//Classe entità generica, sia nemico sia giocatore +//Classe entità generica, sia nemico sia giocatore class Entity { protected: @@ -61,7 +62,7 @@ class Entity int x; int y; int move(); - //Cura di x l'entità + //Cura di x l'entità void heal(int x) { if(hp + x > hp_max) @@ -73,7 +74,7 @@ class Entity hp += x; } } - //Danneggia di x l'entità + //Danneggia di x l'entità void damage(int x) { if(hp - x <= 0) @@ -85,7 +86,7 @@ class Entity hp -= x; } } - //Uccide ed elimina l'entità + //Uccide ed elimina l'entità void kill() { hp = 0; @@ -136,7 +137,7 @@ class Player : public Entity target = &map[x][y-1]; dir = 1; break; - case 80: //Freccia giù, 2 + case 80: //Freccia giù, 2 target = &map[x][y+1]; dir = 2; break; @@ -148,7 +149,7 @@ class Player : public Entity target = &map[x+1][y]; dir = 4; break; - default: //Pag su, pag giù, skippa + default: //Pag su, pag giù, skippa target = &map[x][y]; //Un po' hackerino, ma... break; //Aggiungere gestione del caso che non sia una delle quattro frecce @@ -198,6 +199,41 @@ class Player : public Entity //Torna alla mappa draw(); } + else if(input == 'a') //A + { + if(getch() == 224) + { + char atk=getch(); + switch(atk) + { + + case 72: //ATK SU + if(map[x][y-1]==ENEMY) + { + attack(x, y-1); + } + break; + case 80: //ATK GIU + if(map[x][y+1]==ENEMY) + { + attack(x, y+1); + } + break; + case 75: //ATK SX + if(map[x-1][y]==ENEMY) + { + attack(x-1, y); + } + break; + case 77: //ATK DX + if(map[x+1][y]==ENEMY) + { + attack(x+1, y); + } + break; + } + } + } //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) @@ -233,7 +269,7 @@ class Enemy : public Entity { if(alive) { - //Se intorno c'è il giocatore + //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... @@ -241,7 +277,7 @@ class Enemy : public Entity } else { - //Se il giocatore è vicino, muoviti verso di lui + //Se il giocatore è vicino, muoviti verso di lui if(map[x-2][y] == PLAYER && map[x-1][y] == EMPTY) //Due a sinistra { map[x][y] = EMPTY; @@ -260,7 +296,7 @@ class Enemy : public Entity map[x][y-1] = ENEMY; y--; } - else if(map[x][y+2] == PLAYER && map[x][y+1] == EMPTY) //Due in giù + else if(map[x][y+2] == PLAYER && map[x][y+1] == EMPTY) //Due in giù { map[x][y] = EMPTY; map[x][y+1] = ENEMY; @@ -326,7 +362,7 @@ class Enemy : public Entity x++; } } - //Il giocatore non è vicino + //Il giocatore non è vicino else { if(map[x-1][y] == EMPTY || map[x+1][y] == EMPTY || map[x][y-1] == EMPTY || map[x][y+1] == EMPTY) @@ -365,7 +401,7 @@ class Enemy : public Entity moving = false; } break; - case 3: //Giù + case 3: //Giù if(map[x][y+1] == EMPTY) { map[x][y] = EMPTY; @@ -582,7 +618,7 @@ void generate(int enemies_to_place) int start_x = rand() % (X_MAX - size_x - 2) + 1; int start_y = rand() % (Y_MAX - size_y - 2) + 1; room(start_x, start_y, start_x + size_x, start_y + size_y); - //Se non è la prima stanza, crea un corridoio che connetta quella appena generata con quella precedente + //Se non è la prima stanza, crea un corridoio che connetta quella appena generata con quella precedente if(r > 0) { int link_x = rand() % size_x + 1 + start_x; @@ -591,7 +627,7 @@ void generate(int enemies_to_place) } corridor_x = rand() % size_x + start_x; corridor_y = rand() % size_y + start_y; - //Posiziona il giocatore se è l'ultima stanza + //Posiziona il giocatore se è l'ultima stanza if(r == ROOMS - 1) { map[corridor_x][corridor_y] = PLAYER; @@ -669,7 +705,7 @@ Enemy* find(int x, int y) { for(int e=0; ex == x && list[e]->y == y && list[e]->alive) { return list[e]; @@ -677,7 +713,10 @@ Enemy* find(int x, int y) } return NULL; } - +void attack(int x, int y) +{ + find(x,y)->damage(50); +} int main() { int seed; //Seed casuale per generare il livello