Add addZombie() and getOpenPos()

main
Jerry Aldrich 11 years ago
parent 7959464bab
commit 907a0ba51f
  1. 94
      moveable.c

@ -3,7 +3,7 @@
#define MAX_PROJECTILES 2 #define MAX_PROJECTILES 2
#define MAX_ZOMBIES 1000 #define MAX_ZOMBIES 1000
#define MAX_ALIVE 10000 #define MAX_ALIVE 10
int scrRows,scrCols; int scrRows,scrCols;
@ -50,10 +50,9 @@ struct Entity {
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, .nextYpos=1, .nextXpos=1 ,.isAlive=1};
struct Entity zombies[MAX_ZOMBIES]; struct Entity zombies[MAX_ZOMBIES];
struct Entity allEntities[MAX_ALIVE]; struct Entity allEntities[MAX_ALIVE];
struct Entity zombie = {.type="zombie", .symbol='Z', .curYpos=5, .curXpos=5, .nextYpos=5, .nextXpos=5 ,.isAlive=1}; struct Entity zombie = {.type="zombie", .symbol='A', .curYpos=5, .curXpos=5, .nextYpos=5, .nextXpos=5 ,.isAlive=1};
struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"};
@ -178,12 +177,74 @@ void drawViewport(){
mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' '); mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' ');
mvwaddch(viewportWin, allEntities[i].nextYpos, allEntities[i].nextXpos, allEntities[i].symbol); mvwaddch(viewportWin, allEntities[i].nextYpos, allEntities[i].nextXpos, allEntities[i].symbol);
allEntities[i].curYpos = allEntities[i].nextYpos; allEntities[i].curYpos = allEntities[i].nextYpos;
allEntities[i].curXpos = allEntities[i].nextXpos; } allEntities[i].curXpos = allEntities[i].nextXpos;
}
} }
wnoutrefresh(viewportWin); wnoutrefresh(viewportWin);
doupdate(); doupdate();
} }
struct possiblePos{
int x;
int y;
}openPos;
int getOpenPos(){
int chooseAnother=1;
while(chooseAnother){
spaceExists:
openPos.y=(rand()%(viewportWinRows-1)+1);
openPos.x=(rand()%(viewportWinCols-1)+1);
if(mvwinch(viewportWin,openPos.y,openPos.x)==' '){
int i;
for(i=1;i<MAX_ALIVE;i++){
if(allEntities[i].isAlive && allEntities[i].curYpos==openPos.y && allEntities[i].curXpos==openPos.x){
chooseAnother=1;
}
else{
chooseAnother=0;
}
}
}
else{
int x,y;
for(y=0;y<viewportWinRows;y++){
for(x=0;x<viewportWinCols;x++){
if(mvwinch(viewportWin,y,x)==' '){
chooseAnother=1;
goto spaceExists;
}
}
}
return 0;
}
}
return 1;
}
void addZombie(){
if(getOpenPos()){
int i;
for(i=0;i<MAX_ALIVE-1;i++){
if(!allEntities[i].isAlive){
struct Entity zombie;
zombie.curYpos=openPos.y;
zombie.curXpos=openPos.x;
zombie.nextYpos=openPos.y;
zombie.nextXpos=openPos.x;
zombie.type="zombie";
zombie.symbol='Z';
zombie.isAlive=1;
allEntities[i]=zombie;
mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, allEntities[i].symbol);
wnoutrefresh(viewportWin);
doupdate();
break;
}
}
}
}
void initializeWorld() { void initializeWorld() {
curs_set(0); curs_set(0);
getmaxyx(stdscr,scrRows,scrCols); getmaxyx(stdscr,scrRows,scrCols);
@ -192,11 +253,17 @@ void initializeWorld() {
scoreWin=newwin(10,scrCols,scrRows-10,0); scoreWin=newwin(10,scrCols,scrRows-10,0);
allEntities[0]=player; allEntities[0]=player;
allEntities[0].curYpos=(rand()%(viewportWinRows-2))+1;
allEntities[0].curXpos=(rand()%(viewportWinCols-2))+1;
10;
allEntities[0].nextYpos=allEntities[0].curYpos;
allEntities[0].nextXpos=allEntities[0].curXpos;
allEntities[1]=zombie; allEntities[1]=zombie;
allEntities[0].curYpos=10; allEntities[1].curYpos=(rand()%(viewportWinRows-2))+1;
allEntities[0].curXpos=10; allEntities[1].curXpos=(rand()%(viewportWinCols-2))+1;
zombie.curYpos=rand()%viewportWinRows; 11;
zombie.curYpos=rand()%viewportWinCols; allEntities[1].nextYpos=allEntities[1].curYpos;
allEntities[1].nextXpos=allEntities[1].curXpos;
} }
int main() { int main() {
@ -210,10 +277,11 @@ int main() {
nodelay(stdscr, TRUE); nodelay(stdscr, TRUE);
int ch; int ch;
allEntities[0].weapons[0]=pistol; allEntities[0].weapons[0]=pistol;
allEntities[0].curWeapon=0; allEntities[0].curWeapon=0;
while(1) { while(1) {
drawScore(); drawScore();
drawViewport(); drawViewport();
addZombie();
moveProjectiles(); moveProjectiles();
doupdate(); doupdate();
ch = getch(); ch = getch();
@ -258,6 +326,11 @@ int main() {
} }
break; break;
} }
case 'z':
case 'Z':{
addZombie();
break;
}
case KEY_UP:{ case KEY_UP:{
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "up"); fireWeapon(&pistol, "up");
@ -290,9 +363,8 @@ int main() {
struct Entity * hitEntity = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); struct Entity * hitEntity = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
if(hitEntity){ if(hitEntity){
if(hitEntity->type=="zombie"){ if(hitEntity->type=="zombie"){
mvwprintw(viewportWin,1,1,"TEST"); mvwprintw(viewportWin,1,10,"TEST");
allEntities[0].isAlive=0; allEntities[0].isAlive=0;
hitEntity->isAlive=0;
mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' '); mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' ');
} }
} }

Loading…
Cancel
Save