diff --git a/moveable.c b/moveable.c index c2cf3c9..db164b7 100644 --- a/moveable.c +++ b/moveable.c @@ -51,8 +51,8 @@ struct Entity { struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; -struct Entity *zombies[MAX_ZOMBIES]; -struct Entity *allEntities[MAX_ALIVE]; +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="-\\|/-\\|/"}; @@ -62,9 +62,9 @@ struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity= 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]; + if(allEntities[i].isAlive){ + if(objYpos==allEntities[i].curYpos && objXpos==allEntities[i].curXpos){ + return &allEntities[i]; } } } @@ -107,7 +107,7 @@ void moveProjectiles(){ if(hitEntity->type=="zombie"){ projectiles[i].isAlive=0; hitEntity->isAlive=0; - mvwaddch(viewportWin, allEntities[i]->curYpos, allEntities[i]->curXpos, ' '); + mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' '); } } if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){ @@ -132,8 +132,8 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ } projectile.isAlive=1; projectile.distanceTraveled=0; - projectile.curYpos=player.curYpos; - projectile.curXpos=player.curXpos; + projectile.curYpos=allEntities[0].curYpos; + projectile.curXpos=allEntities[0].curXpos; if(direction=="up"){ projectile.range*=.4; projectile.direction='w'; @@ -156,7 +156,7 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ 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; } + if(allEntities[i].isAlive){ + 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); doupdate(); @@ -191,10 +191,10 @@ void initializeWorld() { getmaxyx(viewportWin,viewportWinRows,viewportWinCols); scoreWin=newwin(10,scrCols,scrRows-10,0); - allEntities[0]=&player; - allEntities[1]=&zombie; - player.curYpos=10; - player.curXpos=10; + allEntities[0]=player; + allEntities[1]=zombie; + allEntities[0].curYpos=10; + allEntities[0].curXpos=10; zombie.curYpos=rand()%viewportWinRows; zombie.curYpos=rand()%viewportWinCols; } @@ -209,9 +209,8 @@ int main() { initializeWorld(); nodelay(stdscr, TRUE); int ch; - - player.weapons[0]=pistol; - player.curWeapon=0; + allEntities[0].weapons[0]=pistol; + allEntities[0].curWeapon=0; while(1) { drawScore(); drawViewport(); @@ -221,64 +220,64 @@ int main() { switch(ch){ case 'w': case 'W':{ - if(player.curYpos > 1){ - player.nextYpos--; - if(player.nextYpos < 0){ - player.nextYpos = 0; + if(allEntities[0].curYpos > 1){ + allEntities[0].nextYpos--; + if(allEntities[0].nextYpos < 0){ + allEntities[0].nextYpos = 0; } } break; } case 's': case 'S':{ - if(player.curYpos < viewportWinRows - 2){ - player.nextYpos++; - if(player.nextYpos > viewportWinRows-1){ - player.nextYpos = viewportWinRows-1; + if(allEntities[0].curYpos < viewportWinRows - 2){ + allEntities[0].nextYpos++; + if(allEntities[0].nextYpos > viewportWinRows-1){ + allEntities[0].nextYpos = viewportWinRows-1; } } break; } case 'a': case 'A':{ - if(player.curXpos > 1){ - player.nextXpos--; - if(player.nextXpos < 0){ - player.nextXpos = 0; + if(allEntities[0].curXpos > 1){ + allEntities[0].nextXpos--; + if(allEntities[0].nextXpos < 0){ + allEntities[0].nextXpos = 0; } } break; } case 'd': case 'D':{ - if(player.curXpos < scrCols-2){ - player.nextXpos++; - if(player.nextXpos > viewportWinCols-1){ - player.nextXpos = viewportWinCols-1; + if(allEntities[0].curXpos < scrCols-2){ + allEntities[0].nextXpos++; + if(allEntities[0].nextXpos > viewportWinCols-1){ + allEntities[0].nextXpos = viewportWinCols-1; } } break; } case KEY_UP:{ - if(player.weapons[player.curWeapon].curCapacity>0){ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&pistol, "up"); } break; } case KEY_LEFT:{ - if(player.weapons[player.curWeapon].curCapacity>0){ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&pistol, "left"); } break; } case KEY_DOWN:{ - if(player.weapons[player.curWeapon].curCapacity>0){ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&pistol, "down"); } break; } case KEY_RIGHT:{ - if(player.weapons[player.curWeapon].curCapacity>0){ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&pistol, "right"); } break;