Add Zombie and collision detection

main
Jerry Aldrich 11 years ago
parent 8e877539fb
commit cdd853e840
  1. 71
      moveable.c

@ -3,6 +3,8 @@
#define MAX_PROJECTILES 2
#define MAX_ZOMBIES 1000
#define MAX_ALIVE 10000
int scrRows,scrCols;
int viewportWinRows,viewportWinCols;
@ -12,8 +14,6 @@ WINDOW* viewportWin;
WINDOW* scoreWin;
struct Projectile{
int isAlive;
char symbol;
@ -38,7 +38,8 @@ struct Weapon{
char symbols[8];
};
struct Player {
struct Entity {
char *type;
char symbol;
int curYpos, curXpos;
int nextYpos, nextXpos;
@ -48,20 +49,27 @@ struct Player {
};
struct Player 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 Player zombies[MAX_ZOMBIES];
struct Player zombie = {.symbol='Z', .curYpos=5, .curXpos=5, .nextYpos=5, .nextXpos=5 ,.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 Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"};
void collisionDetect(int objYpos, int objXpos){
struct Entity * collisionDetect(int objYpos, int objXpos){
int i;
for(i=0; i<MAX_ALIVE; i++){
if(allEntities[i] && allEntities[i]->isAlive){
if(objYpos==allEntities[i]->curYpos && objXpos==allEntities[i]->curXpos){
return allEntities[i];
}
}
}
}
void movePlayer(struct Player *playerRef);
void moveProjectiles(){
int i;
@ -93,8 +101,15 @@ void moveProjectiles(){
}
projectiles[i].distanceTraveled++;
collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos);
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol);
struct Entity * hitEntity = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos);
if(hitEntity){
if(hitEntity->type=="zombie"){
projectiles[i].isAlive=0;
hitEntity->isAlive=0;
mvwaddch(viewportWin, allEntities[i]->curYpos, allEntities[i]->curXpos, ' ');
}
}
if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){
mvwaddch(viewportWin, projectiles[i].prevYpos, projectiles[i].prevXpos, ' ');
}
@ -102,9 +117,11 @@ void moveProjectiles(){
projectiles[i].isAlive=0;
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' ');
}
usleep(30000);
}
else{
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' ');
}
}
}
@ -137,7 +154,7 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
}
int i;
for(i=0;i<MAX_PROJECTILES;i++){
if(projectiles[i].isAlive==0 && projectiles[i+1].isAlive==0){
if(!projectiles[i].isAlive && !projectiles[i+1].isAlive){
projectiles[i]=projectile;
player.weapons[player.curWeapon].curCapacity--;
break;
@ -155,15 +172,16 @@ void drawScore(){
void drawViewport(){
box(viewportWin,0,0);
wnoutrefresh(viewportWin);
int i;
for(i=0; i<MAX_ALIVE; i++){
if(allEntities[i] && 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; }
}
void movePlayer( struct Player *playerRef) {
mvwaddch(viewportWin, playerRef->curYpos, playerRef->curXpos, ' ');
mvwaddch(viewportWin, playerRef->nextYpos, playerRef->nextXpos, playerRef->symbol);
playerRef->curYpos = playerRef->nextYpos;
playerRef->curXpos = playerRef->nextXpos;
wnoutrefresh(viewportWin);
doupdate();
}
void initializeWorld() {
@ -172,11 +190,18 @@ void initializeWorld() {
viewportWin=newwin(scrRows-10,scrCols,0,0);
getmaxyx(viewportWin,viewportWinRows,viewportWinCols);
scoreWin=newwin(10,scrCols,scrRows-10,0);
mvwaddch(viewportWin, player.curYpos, player.curXpos, player.symbol);
mvwaddch(viewportWin, zombie.curYpos, zombie.curXpos, zombie.symbol);
allEntities[0]=&player;
allEntities[1]=&zombie;
player.curYpos=10;
player.curXpos=10;
zombie.curYpos=rand()%viewportWinRows;
zombie.curYpos=rand()%viewportWinCols;
}
int main() {
srand(time(NULL));
initscr();
cbreak();
keypad(stdscr, TRUE);
@ -201,7 +226,6 @@ int main() {
if(player.nextYpos < 0){
player.nextYpos = 0;
}
movePlayer(&player);
}
break;
}
@ -212,7 +236,6 @@ int main() {
if(player.nextYpos > viewportWinRows-1){
player.nextYpos = viewportWinRows-1;
}
movePlayer(&player);
}
break;
}
@ -223,7 +246,6 @@ int main() {
if(player.nextXpos < 0){
player.nextXpos = 0;
}
movePlayer(&player);
}
break;
}
@ -234,7 +256,6 @@ int main() {
if(player.nextXpos > viewportWinCols-1){
player.nextXpos = viewportWinCols-1;
}
movePlayer(&player);
}
break;
}

Loading…
Cancel
Save