Add addZombie() and getOpenPos()

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

@ -3,7 +3,7 @@
#define MAX_PROJECTILES 2
#define MAX_ZOMBIES 1000
#define MAX_ALIVE 10000
#define MAX_ALIVE 10
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 zombies[MAX_ZOMBIES];
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="-\\|/-\\|/"};
@ -178,12 +177,74 @@ void drawViewport(){
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; }
allEntities[i].curXpos = allEntities[i].nextXpos;
}
}
wnoutrefresh(viewportWin);
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() {
curs_set(0);
getmaxyx(stdscr,scrRows,scrCols);
@ -192,11 +253,17 @@ void initializeWorld() {
scoreWin=newwin(10,scrCols,scrRows-10,0);
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[0].curYpos=10;
allEntities[0].curXpos=10;
zombie.curYpos=rand()%viewportWinRows;
zombie.curYpos=rand()%viewportWinCols;
allEntities[1].curYpos=(rand()%(viewportWinRows-2))+1;
allEntities[1].curXpos=(rand()%(viewportWinCols-2))+1;
11;
allEntities[1].nextYpos=allEntities[1].curYpos;
allEntities[1].nextXpos=allEntities[1].curXpos;
}
int main() {
@ -214,6 +281,7 @@ int main() {
while(1) {
drawScore();
drawViewport();
addZombie();
moveProjectiles();
doupdate();
ch = getch();
@ -258,6 +326,11 @@ int main() {
}
break;
}
case 'z':
case 'Z':{
addZombie();
break;
}
case KEY_UP:{
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "up");
@ -290,9 +363,8 @@ int main() {
struct Entity * hitEntity = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
if(hitEntity){
if(hitEntity->type=="zombie"){
mvwprintw(viewportWin,1,1,"TEST");
mvwprintw(viewportWin,1,10,"TEST");
allEntities[0].isAlive=0;
hitEntity->isAlive=0;
mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' ');
}
}

Loading…
Cancel
Save