From 70c511c26e275717c0227dc9aac0a4022c1288b7 Mon Sep 17 00:00:00 2001 From: Jerry Aldrich Date: Wed, 15 Apr 2015 20:52:29 -0500 Subject: [PATCH] Add timer and remove usleep --- drawWindows.c | 11 +++++++---- events.c | 11 ++++------- events.h | 2 +- gameLoop.c | 11 +++++++++-- initializeWorld.c | 8 +++++++- nZombies.c | 1 + structs.h | 10 +++++++--- weaponsSystem.c | 12 +++++------- world.h | 2 ++ zombies.c | 8 +++++--- 10 files changed, 48 insertions(+), 28 deletions(-) diff --git a/drawWindows.c b/drawWindows.c index ebfbe16..42ad48f 100644 --- a/drawWindows.c +++ b/drawWindows.c @@ -142,9 +142,10 @@ void updateInfoWin(){ mvwaddch(infoWin, 3, 56, ACS_LRCORNER); mvwprintw(infoWin, 1, 66, "Cash: 0"); - mvwprintw(infoWin, 2, 64, "Killed: %d", allEntities[0].killCount); - mvwprintw(infoWin, 3, 66, "Time: 00:00"); - + //mvwprintw(infoWin, 2, 65, "Kills: %d", allEntities[0].killCount); + int mins=secsElapsed/60; + int secs=(int)secsElapsed%60; + //mvwprintw(infoWin,3,66,"Time: %02d:%02d",mins,secs); wnoutrefresh(infoWin); } @@ -164,7 +165,9 @@ void drawGameOverWin(){ else { mvwprintw(gameOverWin,6,11,"Accuracy: N/A"); } - mvwprintw(gameOverWin,7,15,"Time: 00:00"); + int mins=secsElapsed/60; + int secs=(int)secsElapsed%60; + mvwprintw(gameOverWin,7,15,"Time: %02d:%02d",mins,secs); mvwprintw(gameOverWin,(gameOverWinRows)-2,(gameOverWinCols-strlen("Press 'q' to quit or 'r' to restart"))/2,"%s","Press 'q' to quit or 'r' to restart"); nodelay(stdscr, FALSE); box(gameOverWin,0,0); diff --git a/events.c b/events.c index a3cbf94..b933232 100644 --- a/events.c +++ b/events.c @@ -6,9 +6,6 @@ #include #include -int zombieModifer=10; -int itemModifier=0; - void addItem(char *type, int yPos, int xPos){ if(!strcmp(type,"Pistol Magazine")){ struct Item pistolMag = {.type="Pistol Magazine", .symbol='=', .isAlive=1, .curXpos=xPos, .curYpos=yPos}; @@ -21,15 +18,15 @@ void addItem(char *type, int yPos, int xPos){ } } } -void randomEvents(){ - int eventTrigger = rand()%1000+1; - if (eventTrigger < 2+itemModifier){ + +void tryRandomEvent(){ + int eventTrigger = (rand()%100)+1; + if (eventTrigger < 10+itemModifier){ struct OpenPos openPos = getOpenPos(); addItem("Pistol Magazine", openPos.y, openPos.x); } if (eventTrigger < 10+zombieModifier){ struct OpenPos openPos = getOpenPos(); addZombie(openPos.y, openPos.x); - zombieModifier++; } } diff --git a/events.h b/events.h index b359cf7..f9022a6 100644 --- a/events.h +++ b/events.h @@ -2,5 +2,5 @@ #define _EVENTS void addItem(char *type, int yPos, int xPos); - +void randomEvent(); #endif diff --git a/gameLoop.c b/gameLoop.c index 5688c1b..6c66a6c 100644 --- a/gameLoop.c +++ b/gameLoop.c @@ -6,8 +6,15 @@ void gameLoop(){ while(1) { + secsElapsed = (float)(clock() - startTime)/CLOCKS_PER_SEC; moveProjectiles(); - randomEvents(); + if((float)(clock() - timerStart)/CLOCKS_PER_SEC > 1){ + tryRandomEvent(); + timerStart=clock(); + } + if((int)secsElapsed%10){ + zombieModifier++; + } moveZombies(); updateInfoWin(); updateViewportWin(); @@ -91,7 +98,7 @@ void gameLoop(){ break; } checkPlayerCollision(); - usleep(30000); +// usleep(30000); updateInfoWin(); updateViewportWin(); } diff --git a/initializeWorld.c b/initializeWorld.c index afa395e..dfedf5f 100644 --- a/initializeWorld.c +++ b/initializeWorld.c @@ -7,6 +7,9 @@ void initializeWorld() { + startTime=clock(); + timerStart=clock(); + srand(time(NULL)); initscr(); curs_set(0); @@ -14,9 +17,12 @@ void initializeWorld() { nodelay(stdscr, TRUE); keypad(stdscr, TRUE); noecho(); + + zombieModifier=0; + itemModifier=0; struct Entity player = {.type="player", .symbol='@', .isAlive=1}; - struct Weapon pistol = {.type="Pistol", .isAlive=1, .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; + struct Weapon pistol = {.type="Pistol", .isAlive=1, .projectileRange=10, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/", .projectileSpeed=.02}; passableChars="#"; unpassableChars="+\\|"; diff --git a/nZombies.c b/nZombies.c index 4d7bf5a..3857d22 100644 --- a/nZombies.c +++ b/nZombies.c @@ -1,3 +1,4 @@ +#include int main() { initializeWorld(); gameLoop(); diff --git a/structs.h b/structs.h index 4b3ff60..8b20b55 100644 --- a/structs.h +++ b/structs.h @@ -1,15 +1,16 @@ #ifndef _STRUCTS #define _STRUCTS - +#include struct Weapon{ char *type; int isAlive; - int range; + int projectileRange; int maxCapacity; int curCapacity; int curMags; char projectileSymbol; char symbols[8]; + float projectileSpeed; }; struct Entity { @@ -24,7 +25,8 @@ struct Entity { int hitCount; int killCount; int projectilesFired; - + clock_t lastMoveClock; + float speed; }; struct Item{ @@ -48,6 +50,8 @@ struct Projectile{ int range; char direction; int distanceTraveled; + clock_t lastMoveClock; + float speed; }; struct CollisionEvent{ diff --git a/weaponsSystem.c b/weaponsSystem.c index 4df82ba..6b87543 100644 --- a/weaponsSystem.c +++ b/weaponsSystem.c @@ -4,10 +4,7 @@ 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; - //} + if(allProjectiles[i].isAlive && ((float)(clock() - allProjectiles[i].lastMoveClock)/CLOCKS_PER_SEC) > allProjectiles[i].speed){ allProjectiles[i].prevYpos=allProjectiles[i].curYpos; allProjectiles[i].prevXpos=allProjectiles[i].curXpos; switch(allProjectiles[i].direction){ @@ -37,19 +34,20 @@ void moveProjectiles(){ if(allProjectiles[i].distanceTraveled>=allProjectiles[i].range){ allProjectiles[i].isAlive=0; } + allProjectiles[i].lastMoveClock = clock(); } } } void fireWeapon(struct Weapon *weaponRef, char *direction){ struct Projectile projectile; - if (!strcmp(weaponRef->type,"Pistol")){ - projectile.range=20; - } + projectile.range=weaponRef->projectileRange; + projectile.speed=weaponRef->projectileSpeed; projectile.isAlive=1; projectile.distanceTraveled=0; projectile.curYpos=allEntities[0].curYpos; projectile.curXpos=allEntities[0].curXpos; + projectile.lastMoveClock=clock(); if(!strcmp(direction,"up")){ projectile.range*=.4; projectile.direction='w'; diff --git a/world.h b/world.h index adfe591..33ca53b 100644 --- a/world.h +++ b/world.h @@ -7,6 +7,8 @@ #include #include +clock_t startTime, timerStart, timerEnd; +float secsElapsed; WINDOW* viewportWin; WINDOW* infoWin; diff --git a/zombies.c b/zombies.c index 5b752d3..dac17b6 100644 --- a/zombies.c +++ b/zombies.c @@ -14,6 +14,8 @@ void addZombie(int y, int x){ zombie.type="zombie"; zombie.symbol='Z'; zombie.isAlive=1; + zombie.lastMoveClock = clock(); + zombie.speed = (float)((rand()%10)+3)/10; allEntities[i]=zombie; break; } @@ -25,12 +27,11 @@ void addZombie(int y, int x){ void moveZombies(){ int i; for(i=1;i allEntities[i].speed ){ getNextPos(allEntities[i].curYpos,allEntities[i].curXpos,allEntities[0].curYpos,allEntities[0].curXpos); struct CollisionEvent collisionEvent = collisionDetect(nextPos.y,nextPos.x); @@ -44,6 +45,7 @@ void moveZombies(){ allEntities[i].curYpos = nextPos.y; allEntities[i].curXpos = nextPos.x; } + allEntities[i].lastMoveClock=clock(); } } }