From 307309e8a3e00487095a8f8115418fdb30634d58 Mon Sep 17 00:00:00 2001 From: Jerry Aldrich Date: Sat, 28 Mar 2015 21:31:00 -0500 Subject: [PATCH] Add moveZombies(); --- nZombies.c | 439 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 nZombies.c diff --git a/nZombies.c b/nZombies.c new file mode 100644 index 0000000..1da9ab0 --- /dev/null +++ b/nZombies.c @@ -0,0 +1,439 @@ +#include +#include +#include +#define MAX_PROJECTILES 2 +#define MAX_ZOMBIES 1000 +#define MAX_ALIVE 10 + +int scrRows,scrCols; +int viewportWinRows,viewportWinCols; +int lastPressed; + +WINDOW* viewportWin; + +WINDOW* scoreWin; + +struct Projectile{ + int isAlive; + char symbol; + int curXpos; + int curYpos; + int prevYpos; + int prevXpos; + int nextYpos; + int nextXpos; + int range; + char direction; + int distanceTraveled; +}; +struct Projectile projectiles[MAX_PROJECTILES]; + +struct Weapon{ + char name[10]; + int range; + int maxCapacity; + int curCapacity; + char projectileSymbol; + char symbols[8]; +}; + +struct Entity { + char *type; + char symbol; + int curYpos, curXpos; + int nextYpos, nextXpos; + struct Weapon weapons[8]; + int curWeapon; + int isAlive; +}; + + +struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; +struct Entity allEntities[MAX_ALIVE]; + +struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; + + +struct Entity * collisionDetect(int objYpos, int objXpos){ + int i; + for(i=1; itype,"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, ' '); + } + if(projectiles[i].distanceTraveled>=projectiles[i].range || projectiles[i].curYpos > viewportWinRows || projectiles[i].curYpos < 0 || projectiles[i].curXpos > viewportWinCols || projectiles[i].curXpos < 0){ + projectiles[i].isAlive=0; + mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' '); + } + usleep(30000); + } + else{ + mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' '); + } + } +} + +void fireWeapon(struct Weapon *weaponRef, char *direction){ + struct Projectile projectile; + if (!strcmp(weaponRef->name,"Pistol")){ + projectile.range=20; + } + projectile.isAlive=1; + projectile.distanceTraveled=0; + projectile.curYpos=allEntities[0].curYpos; + projectile.curXpos=allEntities[0].curXpos; + if(!strcmp(direction,"up")){ + projectile.range*=.4; + projectile.direction='w'; + projectile.symbol=weaponRef->symbols[2]; + } + if(!strcmp(direction,"left")){ + projectile.direction='a'; + projectile.symbol=weaponRef->symbols[0]; + } + if(!strcmp(direction,"down")){ + projectile.range*=.4; + projectile.direction='s'; + projectile.symbol=weaponRef->symbols[6]; + } + if(!strcmp(direction,"right")){ + projectile.direction='d'; + projectile.symbol=weaponRef->symbols[4]; + } + int i; + for(i=0;i0){ + dx1 = 1; + } + if (h<0){ + dy1 = -1; + } + else if(h>0){ + dy1 = 1; + } + if (w<0){ + dx2 = -1; + } + else if(w>0){ + dx2 = 1; + } + int longest = abs(w); + int shortest = abs(h); + if (!(longest>shortest)) { + longest = abs(h); + shortest = abs(w); + if (h<0){ + dy2 = -1; + } + else if (h>0){ + dy2 = 1; + } + dx2 = 0; + } + int numerator = longest >> 1; + numerator += shortest; + if (!(numeratorviewportWinRows-2){ + allEntities[i].nextYpos = allEntities[i].curYpos; + } + if(allEntities[i].nextXpos < 1 || allEntities[i].nextXpos>viewportWinCols-2){ + allEntities[i].nextXpos = allEntities[i].curXpos; + } + } + } + } +} + +int main() { + srand(time(NULL)); + initscr(); + cbreak(); + keypad(stdscr, TRUE); + noecho(); + initializeWorld(); + nodelay(stdscr, TRUE); + int ch; + allEntities[0].weapons[0]=pistol; + allEntities[0].curWeapon=0; + while(1) { + drawScore(); + drawViewport(); + //addZombie(); + moveProjectiles(); + moveZombies(); + doupdate(); + + ch = getch(); + switch(ch){ + case 'w': + case 'W':{ + if(allEntities[0].curYpos > 1){ + allEntities[0].nextYpos--; + if(allEntities[0].nextYpos < 0){ + allEntities[0].nextYpos = 0; + } + } + break; + } + case 's': + case 'S':{ + 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(allEntities[0].curXpos > 1){ + allEntities[0].nextXpos--; + if(allEntities[0].nextXpos < 0){ + allEntities[0].nextXpos = 0; + } + } + break; + } + case 'd': + case 'D':{ + if(allEntities[0].curXpos < scrCols-2){ + allEntities[0].nextXpos++; + if(allEntities[0].nextXpos > viewportWinCols-1){ + allEntities[0].nextXpos = viewportWinCols-1; + } + } + break; + } + case 'z': + case 'Z':{ + addZombie(); + break; + } + case KEY_UP:{ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ + fireWeapon(&pistol, "up"); + } + break; + } + case KEY_LEFT:{ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ + fireWeapon(&pistol, "left"); + } + break; + } + case KEY_DOWN:{ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ + fireWeapon(&pistol, "down"); + } + break; + } + case KEY_RIGHT:{ + if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ + fireWeapon(&pistol, "right"); + } + break; + } + + default: + if (ch != ERR) {lastPressed=ch;}; + break; + } + struct Entity * hitEntity = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); + if(hitEntity){ + if(!strcmp(hitEntity->type,"zombie")){ + mvwprintw(viewportWin,1,10,"TEST"); + allEntities[0].isAlive=0; + mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' '); + } + } + + } + return 0; +}