From df56f8a14a6e26b65a3c056d6d7b0e12319075f7 Mon Sep 17 00:00:00 2001 From: Jerry Aldrich Date: Tue, 14 Apr 2015 22:40:42 -0500 Subject: [PATCH] Do UI overhaul --- collisionDetection.c | 2 +- drawWindows.c | 118 +++++++++++++++++++++++++++++++++++++------ gameLoop.c | 4 +- initializeWorld.c | 14 ++--- world.h | 4 +- 5 files changed, 114 insertions(+), 28 deletions(-) diff --git a/collisionDetection.c b/collisionDetection.c index 1e860b1..e756a52 100644 --- a/collisionDetection.c +++ b/collisionDetection.c @@ -60,7 +60,7 @@ void checkPlayerCollision(){ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); if(collisionEvent.collidedWithEntity){ if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){ - drawViewport(); + updateViewportWin(); sleep(1); drawGameOverWin(); } diff --git a/drawWindows.c b/drawWindows.c index f7d7801..04abda6 100644 --- a/drawWindows.c +++ b/drawWindows.c @@ -3,7 +3,7 @@ #include #include -void drawViewport(){ +void updateViewportWin(){ mvwprintw(viewportWin,10,10,"++++"); mvwprintw(viewportWin,11,10,"+ +"); mvwprintw(viewportWin,12,10,"+ +"); @@ -41,33 +41,119 @@ void drawViewport(){ doupdate(); } -void drawScore(){ - werase(scoreWin); - mvwprintw(scoreWin, 1, 1, "Current Weapon: %s",allEntities[0].weapons[allEntities[0].curWeapon].type); - mvwprintw(scoreWin, 2, 1, "Ammo: %d/%d:%d",allEntities[0].weapons[allEntities[0].curWeapon].curCapacity,allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity,allEntities[0].weapons[allEntities[0].curWeapon].curMags); - mvwprintw(scoreWin,3,1,"Zombies Killed: %d",allEntities[0].killCount); - mvwprintw(scoreWin,4,1,"Projectiles Fired: %d",allEntities[0].projectilesFired); - mvwprintw(scoreWin,5,1,"Zombies Modifier: %d",zombieModifier); - mvwprintw(scoreWin,6,1,"Item Modifier: %d",itemModifier); - box(scoreWin, 0, 0); - wnoutrefresh(scoreWin); +void updateInfoWin(){ + werase(infoWin); + box(infoWin, 0, 0); + mvwaddch(infoWin, 0, 24, ACS_TTEE); + mvwaddch(infoWin, 1, 24, ACS_VLINE); + mvwaddch(infoWin, 2, 24, ACS_VLINE); + mvwaddch(infoWin, 3, 24, ACS_VLINE); + mvwaddch(infoWin, 4, 24, ACS_BTEE); + mvwaddch(infoWin, 0, 24, ACS_TTEE); + mvwaddch(infoWin, 0, 45, ACS_TTEE); + mvwaddch(infoWin, 1, 45, ACS_VLINE); + mvwaddch(infoWin, 2, 45, ACS_VLINE); + mvwaddch(infoWin, 3, 45, ACS_VLINE); + mvwaddch(infoWin, 4, 45, ACS_BTEE); + mvwaddch(infoWin, 0, 59, ACS_TTEE); + mvwaddch(infoWin, 1, 59, ACS_VLINE); + mvwaddch(infoWin, 2, 59, ACS_VLINE); + mvwaddch(infoWin, 3, 59, ACS_VLINE); + mvwaddch(infoWin, 4, 59, ACS_BTEE); + + mvwprintw(infoWin, 0, 6, "Current Weapon"); + mvwprintw(infoWin, 0, 32, "Weapons"); + mvwprintw(infoWin, 0, 50, "Items"); + mvwprintw(infoWin, 0, 68, "Other"); + + mvwprintw(infoWin, 1, 7, "Weapon: %s",allEntities[0].weapons[allEntities[0].curWeapon].type); + mvwprintw(infoWin, 2, 9, "Ammo: %d/%d:%d",allEntities[0].weapons[allEntities[0].curWeapon].curCapacity,allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity,allEntities[0].weapons[allEntities[0].curWeapon].curMags); + mvwprintw(infoWin, 3, 8, "Bombs: 0"); + + mvwaddch(infoWin, 1, 26, ACS_ULCORNER); + mvwaddch(infoWin, 2, 26, ACS_VLINE); + mvwaddch(infoWin, 3, 26, ACS_LLCORNER); + mvwaddch(infoWin, 1, 27, ACS_HLINE); + mvwprintw(infoWin, 2, 27, "1"); + mvwaddch(infoWin, 3, 27, ACS_HLINE); + mvwaddch(infoWin, 1, 28, ACS_URCORNER); + mvwaddch(infoWin, 2, 28, ACS_VLINE); + mvwaddch(infoWin, 3, 28, ACS_LRCORNER); + + mvwaddch(infoWin, 1, 31, ACS_ULCORNER); + mvwaddch(infoWin, 2, 31, ACS_VLINE); + mvwaddch(infoWin, 3, 31, ACS_LLCORNER); + mvwaddch(infoWin, 1, 32, ACS_HLINE); + mvwprintw(infoWin, 2, 32, "2"); + mvwaddch(infoWin, 3, 32, ACS_HLINE); + mvwaddch(infoWin, 1, 33, ACS_URCORNER); + mvwaddch(infoWin, 2, 33, ACS_VLINE); + mvwaddch(infoWin, 3, 33, ACS_LRCORNER); + + mvwaddch(infoWin, 1, 36, ACS_ULCORNER); + mvwaddch(infoWin, 2, 36, ACS_VLINE); + mvwaddch(infoWin, 3, 36, ACS_LLCORNER); + mvwaddch(infoWin, 1, 37, ACS_HLINE); + mvwprintw(infoWin, 2, 37, "3"); + mvwaddch(infoWin, 3, 37, ACS_HLINE); + mvwaddch(infoWin, 1, 38, ACS_URCORNER); + mvwaddch(infoWin, 2, 38, ACS_VLINE); + mvwaddch(infoWin, 3, 38, ACS_LRCORNER); + + mvwaddch(infoWin, 1, 41, ACS_ULCORNER); + mvwaddch(infoWin, 2, 41, ACS_VLINE); + mvwaddch(infoWin, 3, 41, ACS_LLCORNER); + mvwaddch(infoWin, 1, 42, ACS_HLINE); + mvwprintw(infoWin, 2, 42, "4"); + mvwaddch(infoWin, 3, 42, ACS_HLINE); + mvwaddch(infoWin, 1, 43, ACS_URCORNER); + mvwaddch(infoWin, 2, 43, ACS_VLINE); + mvwaddch(infoWin, 3, 43, ACS_LRCORNER); + + mvwaddch(infoWin, 1, 48, ACS_ULCORNER); + mvwaddch(infoWin, 2, 48, ACS_VLINE); + mvwaddch(infoWin, 3, 48, ACS_LLCORNER); + mvwaddch(infoWin, 1, 49, ACS_HLINE); + mvwprintw(infoWin, 2, 49, "Q"); + mvwaddch(infoWin, 3, 49, ACS_HLINE); + mvwaddch(infoWin, 1, 50, ACS_URCORNER); + mvwaddch(infoWin, 2, 50, ACS_VLINE); + mvwaddch(infoWin, 3, 50, ACS_LRCORNER); + + mvwaddch(infoWin, 1, 54, ACS_ULCORNER); + mvwaddch(infoWin, 2, 54, ACS_VLINE); + mvwaddch(infoWin, 3, 54, ACS_LLCORNER); + mvwaddch(infoWin, 1, 55, ACS_HLINE); + mvwprintw(infoWin, 2, 55, "E"); + mvwaddch(infoWin, 3, 55, ACS_HLINE); + mvwaddch(infoWin, 1, 56, ACS_URCORNER); + mvwaddch(infoWin, 2, 56, ACS_VLINE); + 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"); + + wnoutrefresh(infoWin); } void drawGameOverWin(){ - gameOverWin=newwin(viewportWinRows/2,viewportWinCols/2,viewportWinRows/4,viewportWinCols/4); + gameOverWin=newwin(11,39,viewportWinRows/4,viewportWinCols/4); int gameOverWinRows, gameOverWinCols; getmaxyx(gameOverWin,gameOverWinRows,gameOverWinCols); mvwprintw(gameOverWin,1,(gameOverWinCols-strlen("GAME OVER"))/2,"%s","GAME OVER"); - mvwprintw(gameOverWin,(gameOverWinRows/2)-1,1,"Shots Fired: %i",allEntities[0].projectilesFired); - mvwprintw(gameOverWin,(gameOverWinRows/2)-2,1,"Zombies Killed: %i",allEntities[0].killCount); + mvwprintw(gameOverWin,3,5,"Zombies Killed: %i",allEntities[0].killCount); + mvwprintw(gameOverWin,4,7,"Money Earned: 0"); + mvwprintw(gameOverWin,5,8,"Shots Fired: %i",allEntities[0].projectilesFired); if (allEntities[0].projectilesFired!=0){ float hitPercent = (((float)allEntities[0].hitCount/(float)allEntities[0].projectilesFired)*100); - mvwprintw(gameOverWin,(gameOverWinRows/2),1,"Accuracy: %.0f%%",hitPercent); + mvwprintw(gameOverWin,6,11,"Accuracy: %.0f%%",hitPercent); } else { - mvwprintw(gameOverWin,(gameOverWinRows/2),1,"Accuracy: N/A"); + mvwprintw(gameOverWin,6,11,"Accuracy: N/A"); } + mvwprintw(gameOverWin,7,15,"Time: 00:00"); 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/gameLoop.c b/gameLoop.c index 1d66359..bc9c577 100644 --- a/gameLoop.c +++ b/gameLoop.c @@ -6,8 +6,8 @@ void gameLoop(){ int lastPressed; while(1) { - drawScore(); - drawViewport(); + updateInfoWin(); + updateViewportWin(); moveProjectiles(); moveZombies(); randomEvents(); diff --git a/initializeWorld.c b/initializeWorld.c index f92adc5..ad5cbdf 100644 --- a/initializeWorld.c +++ b/initializeWorld.c @@ -23,20 +23,20 @@ void initializeWorld() { viewportWinRows = 19; viewportWinCols = 80; - scoreWinRows = 5; - scoreWinCols = 80; + infoWinRows = 5; + infoWinCols = 80; getmaxyx(stdscr,stdscrRows,stdscrCols); - if (stdscrRows < viewportWinRows+scoreWinRows || stdscrCols < viewportWinCols){ + if (stdscrRows < viewportWinRows+infoWinRows || stdscrCols < viewportWinCols){ endwin(); printf("ERROR: Terminal too small\n"); - printf("Minimum size is: %dx%d\n",viewportWinRows+scoreWinRows,viewportWinCols); + printf("Minimum size is: %dx%d\n",viewportWinRows+infoWinRows,viewportWinCols); printf("Terminal size is: %dx%d\n",stdscrRows,stdscrCols); exit(0); } viewportWin=newwin(viewportWinRows,viewportWinCols,0,0); - scoreWin=newwin(scoreWinRows,scoreWinCols,viewportWinRows,0); + infoWin=newwin(infoWinRows,infoWinCols,viewportWinRows,0); allEntities[0]=player; allEntities[0].curYpos=viewportWinRows/2; @@ -46,8 +46,8 @@ void initializeWorld() { allEntities[0].weapons[1]=pistol; allEntities[0].curWeapon=1; - drawScore(); - drawViewport(); + updateInfoWin(); + updateViewportWin(); int i; for(i=0;i