You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.9 KiB
220 lines
7.9 KiB
#include <world.h>
|
|
#include <initializeWorld.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <weaponsSystem.h>
|
|
void updateViewportWin(){
|
|
int i;
|
|
for(i=0; i<MAX_ITEMS; i++){
|
|
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_PROJECTILES; i++){
|
|
if(allProjectiles[i].isAlive && mvwinch(viewportWin,allProjectiles[i].curYpos,allProjectiles[i].curXpos)==' '){
|
|
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, allProjectiles[i].symbol);
|
|
}
|
|
if(allProjectiles[i].isAlive && mvwinch(viewportWin,allProjectiles[i].prevYpos, allProjectiles[i].prevXpos)==allProjectiles[i].symbol){
|
|
mvwaddch(viewportWin, allProjectiles[i].prevYpos, allProjectiles[i].prevXpos, ' ');
|
|
}
|
|
else if(!allProjectiles[i].isAlive && mvwinch(viewportWin,allProjectiles[i].prevYpos,allProjectiles[i].prevXpos)==allProjectiles[i].symbol){
|
|
mvwaddch(viewportWin, allProjectiles[i].prevYpos, allProjectiles[i].prevXpos, ' ');
|
|
}
|
|
}
|
|
for(i=0; i<MAX_ENTITIES; i++){
|
|
if(allEntities[i].isAlive && mvwinch(viewportWin,allEntities[i].curYpos,allEntities[i].curXpos)==' '){
|
|
mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, allEntities[i].symbol);
|
|
}
|
|
if(allEntities[i].isAlive && mvwinch(viewportWin,allEntities[i].prevYpos, allEntities[i].prevXpos)==allEntities[i].symbol){
|
|
if(allEntities[i].prevYpos != allEntities[i].curYpos || allEntities[i].prevXpos != allEntities[i].curXpos){
|
|
mvwaddch(viewportWin, allEntities[i].prevYpos, allEntities[i].prevXpos, ' ');
|
|
}
|
|
}
|
|
else if(!allEntities[i].isAlive && mvwinch(viewportWin,allEntities[i].prevYpos,allEntities[i].prevXpos)==allEntities[i].symbol){
|
|
mvwaddch(viewportWin, allEntities[i].prevYpos, allEntities[i].prevXpos, ' ');
|
|
}
|
|
}
|
|
|
|
box(viewportWin,0,0);
|
|
wnoutrefresh(viewportWin);
|
|
doupdate();
|
|
}
|
|
|
|
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, "Info");
|
|
|
|
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);
|
|
|
|
mvwaddch(infoWin, 1, 26, ACS_ULCORNER);
|
|
mvwaddch(infoWin, 2, 26, ACS_VLINE);
|
|
mvwaddch(infoWin, 3, 26, ACS_LLCORNER);
|
|
mvwaddch(infoWin, 1, 27, ACS_HLINE);
|
|
if(!strcmp(allEntities[0].weapons[1].type,"Pistol") && allEntities[0].weapons[1].isAlive){
|
|
if(allEntities[0].curWeapon==1){
|
|
wattron(infoWin,A_BOLD);
|
|
mvwprintw(infoWin, 2, 27, "1" );
|
|
wattroff(infoWin,A_BOLD);
|
|
}
|
|
else{
|
|
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);
|
|
if(!strcmp(allEntities[0].weapons[2].type,"Shotgun") && allEntities[0].weapons[2].isAlive){
|
|
if(allEntities[0].curWeapon==2){
|
|
wattron(infoWin,A_BOLD);
|
|
mvwprintw(infoWin, 2, 32, "2" );
|
|
wattroff(infoWin,A_BOLD);
|
|
}
|
|
else{
|
|
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);
|
|
if(allEntities[0].weapons[3].type && !strcmp(allEntities[0].weapons[3].type,"Rifle")){
|
|
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);
|
|
if(allEntities[0].weapons[4].type && !strcmp(allEntities[0].weapons[4].type,"Laser")){
|
|
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, " ");
|
|
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, " ");
|
|
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, 65, "Kills: %d", allEntities[0].killCount);
|
|
int mins=secsElapsed/60;
|
|
int secs=(int)secsElapsed%60;
|
|
mvwprintw(infoWin,2,66,"Time: %02d:%02d",mins,secs);
|
|
wnoutrefresh(infoWin);
|
|
}
|
|
|
|
void drawGameStartWin(){
|
|
gameStartWin=newwin(11,39,viewportWinRows/4,viewportWinCols/4);
|
|
int gameStartWinRows, gameStartWinCols;
|
|
getmaxyx(gameStartWin,gameStartWinRows,gameStartWinCols);
|
|
|
|
mvwprintw(gameStartWin,1,(gameStartWinCols-strlen("HOW TO PLAY"))/2,"%s","HOW TO PLAY");
|
|
|
|
mvwprintw(gameStartWin,3,13,"WASD | MOVE");
|
|
mvwprintw(gameStartWin,4,11,"ARROWS | ATTACK");
|
|
mvwprintw(gameStartWin,5,13,"1234 | SELECT WEAPON");
|
|
mvwprintw(gameStartWin,6,16,"R | RELOAD");
|
|
mvwprintw(gameStartWin,7,15,"QE | USE ITEM");
|
|
|
|
mvwprintw(gameStartWin,(gameStartWinRows)-2,(gameStartWinCols-strlen("Press any key to start or 'q' to quit"))/2,"%s","Press any key to start or 'q' to quit");
|
|
|
|
box(gameStartWin,0,0);
|
|
wnoutrefresh(gameStartWin);
|
|
doupdate();
|
|
|
|
char input = wgetch(gameStartWin);
|
|
switch(input){
|
|
case 'q':
|
|
case 'Q':
|
|
endwin();
|
|
exit(0);
|
|
default:
|
|
nodelay(stdscr, TRUE);
|
|
return;
|
|
}
|
|
}
|
|
|
|
void drawGameOverWin(){
|
|
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,3,5,"Zombies Killed: %i",allEntities[0].killCount);
|
|
mvwprintw(gameOverWin,4,8,"Shots Fired: %i",allEntities[0].projectilesFired);
|
|
int mins=secsElapsed/60;
|
|
int secs=(int)secsElapsed%60;
|
|
mvwprintw(gameOverWin,5,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);
|
|
wnoutrefresh(gameOverWin);
|
|
doupdate();
|
|
while(true){
|
|
char input = getch();
|
|
if (input == 'q' || input == 'Q'){
|
|
endwin();
|
|
exit(0);
|
|
}
|
|
if (input == 'r' || input == 'R'){
|
|
restartGame();
|
|
}
|
|
}
|
|
}
|
|
|