Tweak drawViewport and remove nextXpos/nextYpos from Entities

main
Jerry Aldrich 11 years ago
parent 78a4a99ca8
commit f330497bf5
  1. 6
      collisionDetection.c
  2. 14
      drawWindows.c
  3. 47
      gameLoop.c
  4. 6
      initializeWorld.c
  5. 2
      structs.h
  6. 11
      weaponsSystem.c
  7. 20
      zombies.c

@ -51,13 +51,17 @@ void checkProjectileCollision(struct Projectile *projectileRef ){
} }
} }
} }
else if(collisionEvent.collidedWithUnPassableChar==1 || collisionEvent.collidedWithBoundary==1){
projectileRef->isAlive=0;
}
} }
void checkPlayerCollision(){ void checkPlayerCollision(){
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
if(collisionEvent.collidedWithEntity){ if(collisionEvent.collidedWithEntity){
if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){ if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
collisionEvent.collidedWithEntity->isAlive=0; drawViewport();
sleep(1);
drawGameOverWin(); drawGameOverWin();
} }
} }

@ -12,20 +12,24 @@ void drawViewport(){
if(allItems[i].isAlive){ if(allItems[i].isAlive){
mvwaddch(viewportWin, allItems[i].curYpos, allItems[i].curXpos, allItems[i].symbol); 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<MAX_ENTITIES; i++){ for(i=0; i<MAX_ENTITIES; i++){
if(allEntities[i].isAlive){ if(allEntities[i].isAlive){
mvwaddch(viewportWin, allEntities[i].prevYpos, allEntities[i].prevXpos, ' ');
mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, allEntities[i].symbol);
}
else if(mvwinch(viewportWin,allEntities[i].curYpos,allEntities[i].curXpos)==allEntities[i].symbol){
mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' '); 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;
} }
} }
for(i=0; i<MAX_PROJECTILES; i++){ for(i=0; i<MAX_PROJECTILES; i++){
if(allProjectiles[i].isAlive){ if(allProjectiles[i].isAlive && mvwinch(viewportWin,allProjectiles[i].curYpos,allProjectiles[i].curXpos)==' '){
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, allProjectiles[i].symbol); mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, allProjectiles[i].symbol);
} }
else if(mvwinch(viewportWin,allProjectiles[i].curYpos,allProjectiles[i].curXpos)==allProjectiles[i].symbol){ else if(!allProjectiles[i].isAlive && mvwinch(viewportWin,allProjectiles[i].curYpos,allProjectiles[i].curXpos)==allProjectiles[i].symbol){
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, ' '); mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, ' ');
} }
if(mvwinch(viewportWin,allProjectiles[i].prevYpos, allProjectiles[i].prevXpos)==allProjectiles[i].symbol){ if(mvwinch(viewportWin,allProjectiles[i].prevYpos, allProjectiles[i].prevXpos)==allProjectiles[i].symbol){

@ -17,56 +17,45 @@ void gameLoop(){
switch(ch){ switch(ch){
case 'w': case 'w':
case 'W':{ case 'W':{
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].nextYpos-1,allEntities[0].curXpos); struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos-1,allEntities[0].curXpos);
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
allEntities[0].nextYpos--; allEntities[0].prevYpos=allEntities[0].curYpos;
allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].curYpos--;
}; };
break; break;
} }
case 's': case 's':
case 'S':{ case 'S':{
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].nextYpos+1,allEntities[0].curXpos); struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos+1,allEntities[0].curXpos);
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
allEntities[0].nextYpos++; allEntities[0].prevYpos=allEntities[0].curYpos;
allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].curYpos++;
}; };
break; break;
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':
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){ 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; break;
if(allEntities[0].curXpos > 1){
allEntities[0].nextXpos--;
if(allEntities[0].nextXpos < 0){
allEntities[0].nextXpos = 0;
}
}
break;
} }
case 'd': case 'd':
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){ 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; 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:{ case KEY_UP:{
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){

@ -15,7 +15,7 @@ void initializeWorld() {
keypad(stdscr, TRUE); keypad(stdscr, TRUE);
noecho(); 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="-\\|/-\\|/"}; struct Weapon pistol = {.type="Pistol", .isAlive=1, .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"};
passableChars="#"; passableChars="#";
@ -41,8 +41,8 @@ void initializeWorld() {
allEntities[0]=player; allEntities[0]=player;
allEntities[0].curYpos=viewportWinRows/2; allEntities[0].curYpos=viewportWinRows/2;
allEntities[0].curXpos=viewportWinCols/2; allEntities[0].curXpos=viewportWinCols/2;
allEntities[0].nextYpos=allEntities[0].curYpos; allEntities[0].prevYpos=allEntities[0].curYpos;
allEntities[0].nextXpos=allEntities[0].curXpos; allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].weapons[1]=pistol; allEntities[0].weapons[1]=pistol;
allEntities[0].curWeapon=1; allEntities[0].curWeapon=1;

@ -16,8 +16,8 @@ struct Entity {
char *type; char *type;
char *behavior; char *behavior;
char symbol; char symbol;
int prevYpos, prevXpos;
int curYpos, curXpos; int curYpos, curXpos;
int nextYpos, nextXpos;
struct Weapon weapons[9]; struct Weapon weapons[9];
int curWeapon; int curWeapon;
int isAlive; int isAlive;

@ -5,9 +5,11 @@ void moveProjectiles(){
int i; int i;
for(i=0; i<MAX_PROJECTILES; i++){ for(i=0; i<MAX_PROJECTILES; i++){
if(allProjectiles[i].isAlive){ if(allProjectiles[i].isAlive){
//if(allProjectiles[i].distanceTraveled>=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].prevYpos=allProjectiles[i].curYpos;
allProjectiles[i].prevXpos=allProjectiles[i].curXpos; allProjectiles[i].prevXpos=allProjectiles[i].curXpos;
checkProjectileCollision(&allProjectiles[i]);
switch(allProjectiles[i].direction){ switch(allProjectiles[i].direction){
case 'w':{ case 'w':{
allProjectiles[i].curYpos--; allProjectiles[i].curYpos--;
@ -31,7 +33,8 @@ void moveProjectiles(){
} }
allProjectiles[i].distanceTraveled++; 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; allProjectiles[i].isAlive=0;
} }
} }
@ -50,23 +53,19 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
if(!strcmp(direction,"up")){ if(!strcmp(direction,"up")){
projectile.range*=.4; projectile.range*=.4;
projectile.direction='w'; projectile.direction='w';
projectile.curYpos--;
projectile.symbol=weaponRef->symbols[2]; projectile.symbol=weaponRef->symbols[2];
} }
if(!strcmp(direction,"left")){ if(!strcmp(direction,"left")){
projectile.direction='a'; projectile.direction='a';
projectile.curXpos--;
projectile.symbol=weaponRef->symbols[0]; projectile.symbol=weaponRef->symbols[0];
} }
if(!strcmp(direction,"down")){ if(!strcmp(direction,"down")){
projectile.range*=.4; projectile.range*=.4;
projectile.direction='s'; projectile.direction='s';
projectile.curYpos++;
projectile.symbol=weaponRef->symbols[6]; projectile.symbol=weaponRef->symbols[6];
} }
if(!strcmp(direction,"right")){ if(!strcmp(direction,"right")){
projectile.direction='d'; projectile.direction='d';
projectile.curXpos++;
projectile.symbol=weaponRef->symbols[4]; projectile.symbol=weaponRef->symbols[4];
} }
int i; int i;

@ -9,8 +9,8 @@ void addZombie(int y, int x){
struct Entity zombie; struct Entity zombie;
zombie.curYpos=y; zombie.curYpos=y;
zombie.curXpos=x; zombie.curXpos=x;
zombie.nextYpos=y; zombie.prevYpos=y;
zombie.nextXpos=x; zombie.prevXpos=x;
zombie.type="zombie"; zombie.type="zombie";
zombie.symbol='Z'; zombie.symbol='Z';
zombie.isAlive=1; zombie.isAlive=1;
@ -28,21 +28,21 @@ void moveZombies(){
if(allEntities[i].isAlive){ if(allEntities[i].isAlive){
int moveCheck = rand()%20; int moveCheck = rand()%20;
if(moveCheck==1){ 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); getNextPos(allEntities[i].curYpos,allEntities[i].curXpos,allEntities[0].curYpos,allEntities[0].curXpos);
struct CollisionEvent collisionEvent = collisionDetect(nextPos.y,nextPos.x);
if(collisionEvent.collidedWithBoundary || collisionEvent.collidedWithUnPassableChar || collisionEvent.collidedWithItem || collisionEvent.collidedWithEntity){ if(collisionEvent.collidedWithBoundary || collisionEvent.collidedWithUnPassableChar || collisionEvent.collidedWithItem || collisionEvent.collidedWithEntity){
if(collisionEvent.collidedWithEntity){ if(collisionEvent.collidedWithEntity){
if(collisionEvent.collidedWithEntity->type,"zombie"){ 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;
} }
} }
} }

Loading…
Cancel
Save