diff --git a/moveable.c b/moveable.c index a9b9740..c2cf3c9 100644 --- a/moveable.c +++ b/moveable.c @@ -3,6 +3,8 @@ #define MAX_PROJECTILES 2 #define MAX_ZOMBIES 1000 +#define MAX_ALIVE 10000 + int scrRows,scrCols; int viewportWinRows,viewportWinCols; @@ -12,8 +14,6 @@ WINDOW* viewportWin; WINDOW* scoreWin; - - struct Projectile{ int isAlive; char symbol; @@ -38,7 +38,8 @@ struct Weapon{ char symbols[8]; }; -struct Player { +struct Entity { + char *type; char symbol; int curYpos, curXpos; int nextYpos, nextXpos; @@ -48,20 +49,27 @@ struct Player { }; -struct Player player = {.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; +struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; -struct Player zombies[MAX_ZOMBIES]; -struct Player zombie = {.symbol='Z', .curYpos=5, .curXpos=5, .nextYpos=5, .nextXpos=5 ,.isAlive=1}; +struct Entity *zombies[MAX_ZOMBIES]; +struct Entity *allEntities[MAX_ALIVE]; +struct Entity zombie = {.type="zombie", .symbol='Z', .curYpos=5, .curXpos=5, .nextYpos=5, .nextXpos=5 ,.isAlive=1}; struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; -void collisionDetect(int objYpos, int objXpos){ - +struct Entity * collisionDetect(int objYpos, int objXpos){ + int i; + for(i=0; iisAlive){ + if(objYpos==allEntities[i]->curYpos && objXpos==allEntities[i]->curXpos){ + return allEntities[i]; + } + } + } } -void movePlayer(struct Player *playerRef); void moveProjectiles(){ int i; @@ -93,8 +101,15 @@ void moveProjectiles(){ } projectiles[i].distanceTraveled++; - collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos); mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol); + struct Entity * hitEntity = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos); + if(hitEntity){ + if(hitEntity->type=="zombie"){ + projectiles[i].isAlive=0; + hitEntity->isAlive=0; + mvwaddch(viewportWin, allEntities[i]->curYpos, allEntities[i]->curXpos, ' '); + } + } if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){ mvwaddch(viewportWin, projectiles[i].prevYpos, projectiles[i].prevXpos, ' '); } @@ -102,9 +117,11 @@ void moveProjectiles(){ projectiles[i].isAlive=0; mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' '); } - usleep(30000); } + else{ + mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' '); + } } } @@ -137,7 +154,7 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ } int i; for(i=0;iisAlive){ + mvwaddch(viewportWin, allEntities[i]->curYpos, allEntities[i]->curXpos, ' '); + mvwaddch(viewportWin, allEntities[i]->nextYpos, allEntities[i]->nextXpos, allEntities[i]->symbol); + allEntities[i]->curYpos = allEntities[i]->nextYpos; + allEntities[i]->curXpos = allEntities[i]->nextXpos; } + } wnoutrefresh(viewportWin); -} - -void movePlayer( struct Player *playerRef) { - mvwaddch(viewportWin, playerRef->curYpos, playerRef->curXpos, ' '); - mvwaddch(viewportWin, playerRef->nextYpos, playerRef->nextXpos, playerRef->symbol); - playerRef->curYpos = playerRef->nextYpos; - playerRef->curXpos = playerRef->nextXpos; - wnoutrefresh(viewportWin); + doupdate(); } void initializeWorld() { @@ -172,11 +190,18 @@ void initializeWorld() { viewportWin=newwin(scrRows-10,scrCols,0,0); getmaxyx(viewportWin,viewportWinRows,viewportWinCols); scoreWin=newwin(10,scrCols,scrRows-10,0); - mvwaddch(viewportWin, player.curYpos, player.curXpos, player.symbol); - mvwaddch(viewportWin, zombie.curYpos, zombie.curXpos, zombie.symbol); + + allEntities[0]=&player; + allEntities[1]=&zombie; + player.curYpos=10; + player.curXpos=10; + zombie.curYpos=rand()%viewportWinRows; + zombie.curYpos=rand()%viewportWinCols; } int main() { + + srand(time(NULL)); initscr(); cbreak(); keypad(stdscr, TRUE); @@ -201,7 +226,6 @@ int main() { if(player.nextYpos < 0){ player.nextYpos = 0; } - movePlayer(&player); } break; } @@ -212,7 +236,6 @@ int main() { if(player.nextYpos > viewportWinRows-1){ player.nextYpos = viewportWinRows-1; } - movePlayer(&player); } break; } @@ -223,7 +246,6 @@ int main() { if(player.nextXpos < 0){ player.nextXpos = 0; } - movePlayer(&player); } break; } @@ -234,7 +256,6 @@ int main() { if(player.nextXpos > viewportWinCols-1){ player.nextXpos = viewportWinCols-1; } - movePlayer(&player); } break; }