One of my first programming projects. I tried to learn C and use curses...it is quite embarrassing looking back at it now :D
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.
 
 

80 lines
3.2 KiB

#include <world.h>
#include <screen.h>
#include <stdlib.h>
#include <string.h>
#include <weaponsSystem.h>
void drawViewport(){
// box(viewportWin,0,0);
int i;
for(i=0; i<MAX_ITEMS; i++){
if(allItems[i].isAlive){
mvwaddch(viewportWin, allItems[i].curYpos, allItems[i].curXpos, allItems[i].symbol);
}
}
for(i=0; i<MAX_ENTITIES; i++){
if(allEntities[i].isAlive){
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){
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, allProjectiles[i].symbol);
}
else if(mvwinch(viewportWin,allProjectiles[i].curYpos,allProjectiles[i].curXpos)==allProjectiles[i].symbol){
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, ' ');
}
checkProjectileCollision(&allProjectiles[i]);
if(mvwinch(viewportWin,allProjectiles[i].prevYpos, allProjectiles[i].prevXpos)==allProjectiles[i].symbol){
mvwaddch(viewportWin, allProjectiles[i].prevYpos, allProjectiles[i].prevXpos, ' ');
}
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;
mvwaddch(viewportWin, allProjectiles[i].curYpos, allProjectiles[i].curXpos, ' ');
}
}
box(viewportWin,0,0);
wnoutrefresh(viewportWin);
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 drawGameOverWin(){
getmaxyx(stdscr,scrRows,scrCols);
gameOverWin=newwin(scrRows/2,scrCols/2,scrRows/4,scrCols/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),1,"Zombies Killed: %i",allEntities[0].killCount);
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();
}
}
}