From f330497bf5baa1772ecadfdaf656f00983e1891d Mon Sep 17 00:00:00 2001 From: Jerry Aldrich Date: Tue, 14 Apr 2015 19:23:11 -0500 Subject: [PATCH] Tweak drawViewport and remove nextXpos/nextYpos from Entities --- collisionDetection.c | 6 +++++- drawWindows.c | 14 ++++++++----- gameLoop.c | 47 +++++++++++++++++--------------------------- initializeWorld.c | 6 +++--- structs.h | 2 +- weaponsSystem.c | 11 +++++------ zombies.c | 22 ++++++++++----------- 7 files changed, 52 insertions(+), 56 deletions(-) diff --git a/collisionDetection.c b/collisionDetection.c index 686f0f0..1e860b1 100644 --- a/collisionDetection.c +++ b/collisionDetection.c @@ -51,13 +51,17 @@ void checkProjectileCollision(struct Projectile *projectileRef ){ } } } + else if(collisionEvent.collidedWithUnPassableChar==1 || collisionEvent.collidedWithBoundary==1){ + projectileRef->isAlive=0; + } } void checkPlayerCollision(){ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); if(collisionEvent.collidedWithEntity){ if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){ - collisionEvent.collidedWithEntity->isAlive=0; + drawViewport(); + sleep(1); drawGameOverWin(); } } diff --git a/drawWindows.c b/drawWindows.c index ee07f70..ea98e9a 100644 --- a/drawWindows.c +++ b/drawWindows.c @@ -12,20 +12,24 @@ void drawViewport(){ if(allItems[i].isAlive){ mvwaddch(viewportWin, allItems[i].curYpos, allItems[i].curXpos, allItems[i].symbol); } + else if(mvwinch(viewportWin,allItems[i].curYpos,allItems[i].curXpos)==allItems[i].symbol){ + mvwaddch(viewportWin, allItems[i].curYpos, allItems[i].curXpos, ' '); + } } for(i=0; i viewportWinRows-1){ - allEntities[0].nextYpos = viewportWinRows-1; - } - } - break; } case 'a': case 'A':{ - struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].nextXpos-1); + struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].curXpos-1); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ - allEntities[0].nextXpos--; + allEntities[0].prevYpos=allEntities[0].curYpos; + allEntities[0].prevXpos=allEntities[0].curXpos; + allEntities[0].prevXpos=allEntities[0].curXpos; + allEntities[0].curXpos--; }; break; - if(allEntities[0].curXpos > 1){ - allEntities[0].nextXpos--; - if(allEntities[0].nextXpos < 0){ - allEntities[0].nextXpos = 0; - } - } - break; } case 'd': case 'D':{ - struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].nextXpos+1); + struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].curXpos+1); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ - allEntities[0].nextXpos++; + allEntities[0].prevYpos=allEntities[0].curYpos; + allEntities[0].prevXpos=allEntities[0].curXpos; + allEntities[0].prevXpos=allEntities[0].curXpos; + allEntities[0].curXpos++; }; break; - if(allEntities[0].curXpos < stdscrCols-2){ - allEntities[0].nextXpos++; - if(allEntities[0].nextXpos > viewportWinCols-1){ - allEntities[0].nextXpos = viewportWinCols-1; - } - } - break; } case KEY_UP:{ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ diff --git a/initializeWorld.c b/initializeWorld.c index 3221f90..b1da790 100644 --- a/initializeWorld.c +++ b/initializeWorld.c @@ -15,7 +15,7 @@ void initializeWorld() { keypad(stdscr, TRUE); noecho(); - struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; + struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .prevYpos=1, .prevXpos=1 ,.isAlive=1}; struct Weapon pistol = {.type="Pistol", .isAlive=1, .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; passableChars="#"; @@ -41,8 +41,8 @@ void initializeWorld() { allEntities[0]=player; allEntities[0].curYpos=viewportWinRows/2; allEntities[0].curXpos=viewportWinCols/2; - allEntities[0].nextYpos=allEntities[0].curYpos; - allEntities[0].nextXpos=allEntities[0].curXpos; + allEntities[0].prevYpos=allEntities[0].curYpos; + allEntities[0].prevXpos=allEntities[0].curXpos; allEntities[0].weapons[1]=pistol; allEntities[0].curWeapon=1; diff --git a/structs.h b/structs.h index d6ae60f..4b3ff60 100644 --- a/structs.h +++ b/structs.h @@ -16,8 +16,8 @@ struct Entity { char *type; char *behavior; char symbol; + int prevYpos, prevXpos; int curYpos, curXpos; - int nextYpos, nextXpos; struct Weapon weapons[9]; int curWeapon; int isAlive; diff --git a/weaponsSystem.c b/weaponsSystem.c index 1f15de5..4df82ba 100644 --- a/weaponsSystem.c +++ b/weaponsSystem.c @@ -5,9 +5,11 @@ void moveProjectiles(){ int i; for(i=0; i=allProjectiles[i].range || allProjectiles[i].curYpos > viewportWinRows || allProjectiles[i].curYpos < 0 || allProjectiles[i].curXpos > viewportWinCols || allProjectiles[i].curXpos < 0){ + // allProjectiles[i].isAlive=0; + //} allProjectiles[i].prevYpos=allProjectiles[i].curYpos; allProjectiles[i].prevXpos=allProjectiles[i].curXpos; - checkProjectileCollision(&allProjectiles[i]); switch(allProjectiles[i].direction){ case 'w':{ allProjectiles[i].curYpos--; @@ -31,7 +33,8 @@ void moveProjectiles(){ } allProjectiles[i].distanceTraveled++; - if(allProjectiles[i].distanceTraveled>=allProjectiles[i].range || allProjectiles[i].curYpos > viewportWinRows || allProjectiles[i].curYpos < 0 || allProjectiles[i].curXpos > viewportWinCols || allProjectiles[i].curXpos < 0){ + checkProjectileCollision(&allProjectiles[i]); + if(allProjectiles[i].distanceTraveled>=allProjectiles[i].range){ allProjectiles[i].isAlive=0; } } @@ -50,23 +53,19 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ if(!strcmp(direction,"up")){ projectile.range*=.4; projectile.direction='w'; - projectile.curYpos--; projectile.symbol=weaponRef->symbols[2]; } if(!strcmp(direction,"left")){ projectile.direction='a'; - projectile.curXpos--; projectile.symbol=weaponRef->symbols[0]; } if(!strcmp(direction,"down")){ projectile.range*=.4; projectile.direction='s'; - projectile.curYpos++; projectile.symbol=weaponRef->symbols[6]; } if(!strcmp(direction,"right")){ projectile.direction='d'; - projectile.curXpos++; projectile.symbol=weaponRef->symbols[4]; } int i; diff --git a/zombies.c b/zombies.c index ae68402..ed84822 100644 --- a/zombies.c +++ b/zombies.c @@ -9,8 +9,8 @@ void addZombie(int y, int x){ struct Entity zombie; zombie.curYpos=y; zombie.curXpos=x; - zombie.nextYpos=y; - zombie.nextXpos=x; + zombie.prevYpos=y; + zombie.prevXpos=x; zombie.type="zombie"; zombie.symbol='Z'; zombie.isAlive=1; @@ -28,21 +28,21 @@ void moveZombies(){ if(allEntities[i].isAlive){ int moveCheck = rand()%20; if(moveCheck==1){ + getNextPos(allEntities[i].curYpos,allEntities[i].curXpos,allEntities[0].curYpos,allEntities[0].curXpos); - allEntities[i].nextYpos = nextPos.y; - allEntities[i].nextXpos = nextPos.x; - - struct CollisionEvent collisionEvent = collisionDetect(allEntities[i].nextYpos,allEntities[i].nextXpos); - + + struct CollisionEvent collisionEvent = collisionDetect(nextPos.y,nextPos.x); if(collisionEvent.collidedWithBoundary || collisionEvent.collidedWithUnPassableChar || collisionEvent.collidedWithItem || collisionEvent.collidedWithEntity){ if(collisionEvent.collidedWithEntity){ if(collisionEvent.collidedWithEntity->type,"zombie"){ - allEntities[i].nextYpos = allEntities[i].curYpos; - allEntities[i].nextXpos = allEntities[i].curXpos; } } - allEntities[i].nextYpos = allEntities[i].curYpos; - allEntities[i].nextXpos = allEntities[i].curXpos; + } + else{ + allEntities[i].prevYpos = allEntities[i].curYpos; + allEntities[i].prevXpos = allEntities[i].curXpos; + allEntities[i].curYpos = nextPos.y; + allEntities[i].curXpos = nextPos.x; } } }