1
Fork 0
mirror of https://github.com/Steffo99/iiiiil-gioco.git synced 2024-11-21 23:44:21 +00:00

Le entità possono morire ora! 💀

This commit is contained in:
Steffo 2016-01-10 16:50:57 +01:00
parent b49d6858c2
commit 6a939b3782

457
main.cpp
View file

@ -38,6 +38,7 @@ void inventory();
class Entity class Entity
{ {
public: public:
bool alive = true;
int x; int x;
int y; int y;
int hp = HP_MAX; int hp = HP_MAX;
@ -60,14 +61,20 @@ class Entity
{ {
if(hp - x < 0) if(hp - x < 0)
{ {
//entità zombi kill();
hp = 0;
} }
else else
{ {
hp -= x; hp -= x;
} }
} }
//Uccide ed elimina l'entità
void kill()
{
hp = 0;
alive = false;
map[x][y] = EMPTY;
}
}; };
//Classe del giocatore //Classe del giocatore
@ -87,103 +94,106 @@ class Player : public Entity
int pozioni_vita_grandi = 1; int pozioni_vita_grandi = 1;
int move() int move()
{ {
bool waiting = true; if(alive)
unsigned char* starting = &map[x][y]; //Casella attuale
unsigned char* target; //Bersaglio del movimento
//Rileva i tasti freccia
while(waiting)
{ {
unsigned char input = getch(); bool waiting = true;
short int dir = 0; //Direzione del movimento, per modificare x e y. unsigned char* starting = &map[x][y]; //Casella attuale
if(input == 224) unsigned char* target; //Bersaglio del movimento
//Rileva i tasti freccia
while(waiting)
{ {
switch(getch()) unsigned char input = getch();
short int dir = 0; //Direzione del movimento, per modificare x e y.
if(input == 224)
{ {
case 72: //Freccia su, 1 switch(getch())
target = &map[x][y-1]; {
dir = 1; case 72: //Freccia su, 1
break; target = &map[x][y-1];
case 80: //Freccia giù, 2 dir = 1;
target = &map[x][y+1]; break;
dir = 2; case 80: //Freccia giù, 2
break; target = &map[x][y+1];
case 75: //Freccia sinistra, 3 dir = 2;
target = &map[x-1][y]; break;
dir = 3; case 75: //Freccia sinistra, 3
break; target = &map[x-1][y];
case 77: //Freccia destra, 4 dir = 3;
target = &map[x+1][y]; break;
dir = 4; case 77: //Freccia destra, 4
break; target = &map[x+1][y];
default: //Pag su, pag giù, skippa dir = 4;
target = &map[x][y]; //Un po' hackerino, ma... break;
break; default: //Pag su, pag giù, skippa
//Aggiungere gestione del caso che non sia una delle quattro frecce target = &map[x][y]; //Un po' hackerino, ma...
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;
}
} }
//Muoviti e agisci! else if(input == 's') //S
if(*target == EMPTY)
{ {
*starting = EMPTY; //Salta un turno
*target = PLAYER;
waiting = false; waiting = false;
} }
else if(*target == ITEM_SMALL_POTION) else if(input == 'i') //I
{ {
*starting = EMPTY; //Apri l'inventario
*target = PLAYER; inventory();
pozioni_vita_piccole++; //Torna alla mappa
waiting = false; draw();
} }
else if(*target == ITEM_MEDIUM_POTION) //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)
{ {
*starting = EMPTY; if(dir == 1)
*target = PLAYER; {
pozioni_vita_medie++; y--;
waiting = false; }
} else if(dir == 2)
else if(*target == ITEM_BIG_POTION) {
{ y++;
*starting = EMPTY; }
*target = PLAYER; else if(dir == 3)
pozioni_vita_grandi++; {
waiting = false; x--;
} }
else if(*target == EXIT) else if(dir == 4)
{ {
return 1; x++;
} }
}
else if(input == 's') //S
{
//Salta un turno
waiting = false;
}
else if(input == 'i') //I
{
//Apri l'inventario
inventory();
//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++;
} }
} }
} }
@ -197,147 +207,150 @@ class Enemy : public Entity
public: public:
int move() int move()
{ {
//Se intorno c'è il giocatore if(alive)
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... //Se intorno c'è il giocatore
player.damage(rand() % 5 + 1); if(map[x-1][y] == PLAYER || map[x+1][y] == PLAYER || map[x][y-1] == PLAYER || map[x][y+1] == PLAYER)
}
else
{
//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; //Forse sarebbe meglio fare una funzione per togliere vita che controlla anche se va a 0...
map[x-1][y] = ENEMY; player.damage(rand() % 5 + 1);
x--;
} }
else if(map[x+2][y] == PLAYER && map[x+1][y] == EMPTY) //Due a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
else if(map[x][y-2] == PLAYER && map[x][y-1] == EMPTY) //Due in su
{
map[x][y] = EMPTY;
map[x][y-1] = ENEMY;
y--;
}
else if(map[x][y+2] == PLAYER && map[x][y+1] == EMPTY) //Due in giù
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x-1][y-1] == PLAYER) //In alto a sinistra
{
if(map[x][y-1] == EMPTY) //Vai in alto
{
map[x][y] = EMPTY;
map[x][y-1] = ENEMY;
y--;
}
else if(map[x-1][y] == EMPTY) //Vai a sinistra
{
map[x][y] = EMPTY;
map[x-1][y] = ENEMY;
x--;
}
}
else if(map[x-1][y+1] == PLAYER) //In basso a sinistra
{
if(map[x][y+1] == EMPTY) //Vai in basso
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x-1][y] == EMPTY) //Vai a sinistra
{
map[x][y] = EMPTY;
map[x-1][y] = ENEMY;
x--;
}
}
else if(map[x+1][y-1] == PLAYER) //In alto a destra
{
if(map[x][y-1] == EMPTY) //Vai in alto
{
map[x][y] = EMPTY;
map[x][y-1] = ENEMY;
y--;
}
else if(map[x+1][y] == EMPTY) //Vai a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
}
else if(map[x+1][y+1] == PLAYER) //In basso a destra
{
if(map[x][y+1] == EMPTY) //Vai in basso
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x+1][y] == EMPTY) //Vai a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
}
//Il giocatore non è vicino
else else
{ {
if(map[x-1][y] == EMPTY || map[x+1][y] == EMPTY || map[x][y-1] == EMPTY || map[x][y+1] == EMPTY) //Se il giocatore è vicino, muoviti verso di lui
if(map[x-2][y] == PLAYER && map[x-1][y] == EMPTY) //Due a sinistra
{ {
//Muoviti in una direzione casuale map[x][y] = EMPTY;
bool moving = true; map[x-1][y] = ENEMY;
while(moving) x--;
}
else if(map[x+2][y] == PLAYER && map[x+1][y] == EMPTY) //Due a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
else if(map[x][y-2] == PLAYER && map[x][y-1] == EMPTY) //Due in su
{
map[x][y] = EMPTY;
map[x][y-1] = ENEMY;
y--;
}
else if(map[x][y+2] == PLAYER && map[x][y+1] == EMPTY) //Due in giù
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x-1][y-1] == PLAYER) //In alto a sinistra
{
if(map[x][y-1] == EMPTY) //Vai in alto
{ {
int direction = rand() % 4; map[x][y] = EMPTY;
switch(direction) map[x][y-1] = ENEMY;
y--;
}
else if(map[x-1][y] == EMPTY) //Vai a sinistra
{
map[x][y] = EMPTY;
map[x-1][y] = ENEMY;
x--;
}
}
else if(map[x-1][y+1] == PLAYER) //In basso a sinistra
{
if(map[x][y+1] == EMPTY) //Vai in basso
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x-1][y] == EMPTY) //Vai a sinistra
{
map[x][y] = EMPTY;
map[x-1][y] = ENEMY;
x--;
}
}
else if(map[x+1][y-1] == PLAYER) //In alto a destra
{
if(map[x][y-1] == EMPTY) //Vai in alto
{
map[x][y] = EMPTY;
map[x][y-1] = ENEMY;
y--;
}
else if(map[x+1][y] == EMPTY) //Vai a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
}
else if(map[x+1][y+1] == PLAYER) //In basso a destra
{
if(map[x][y+1] == EMPTY) //Vai in basso
{
map[x][y] = EMPTY;
map[x][y+1] = ENEMY;
y++;
}
else if(map[x+1][y] == EMPTY) //Vai a destra
{
map[x][y] = EMPTY;
map[x+1][y] = ENEMY;
x++;
}
}
//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)
{
//Muoviti in una direzione casuale
bool moving = true;
while(moving)
{ {
case 0: //Sinistra int direction = rand() % 4;
if(map[x-1][y] == EMPTY) switch(direction)
{ {
map[x][y] = EMPTY; case 0: //Sinistra
map[x-1][y] = ENEMY; if(map[x-1][y] == EMPTY)
x--; {
moving = false; map[x][y] = EMPTY;
} map[x-1][y] = ENEMY;
break; x--;
case 1: //Destra moving = false;
if(map[x+1][y] == EMPTY) }
{ break;
map[x][y] = EMPTY; case 1: //Destra
map[x+1][y] = ENEMY; if(map[x+1][y] == EMPTY)
x++; {
moving = false; map[x][y] = EMPTY;
} map[x+1][y] = ENEMY;
break; x++;
case 2: //Su moving = false;
if(map[x][y-1] == EMPTY) }
{ break;
map[x][y] = EMPTY; case 2: //Su
map[x][y-1] = ENEMY; if(map[x][y-1] == EMPTY)
y--; {
moving = false; map[x][y] = EMPTY;
} map[x][y-1] = ENEMY;
break; y--;
case 3: //Giù moving = false;
if(map[x][y+1] == EMPTY) }
{ break;
map[x][y] = EMPTY; case 3: //Giù
map[x][y+1] = ENEMY; if(map[x][y+1] == EMPTY)
y++; {
moving = false; map[x][y] = EMPTY;
} map[x][y+1] = ENEMY;
break; y++;
moving = false;
}
break;
}
} }
} }
} }