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(){
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();
}
}

@ -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<MAX_ENTITIES; i++){
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].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++){
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);
}
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, ' ');
}
if(mvwinch(viewportWin,allProjectiles[i].prevYpos, allProjectiles[i].prevXpos)==allProjectiles[i].symbol){

@ -17,56 +17,45 @@ void gameLoop(){
switch(ch){
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){
allEntities[0].nextYpos--;
allEntities[0].prevYpos=allEntities[0].curYpos;
allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].curYpos--;
};
break;
}
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){
allEntities[0].nextYpos++;
allEntities[0].prevYpos=allEntities[0].curYpos;
allEntities[0].prevXpos=allEntities[0].curXpos;
allEntities[0].curYpos++;
};
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':{
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){

@ -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;

@ -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;

@ -5,9 +5,11 @@ void moveProjectiles(){
int i;
for(i=0; i<MAX_PROJECTILES; i++){
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].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;

@ -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);
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.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;
}
}
}

Loading…
Cancel
Save