Move Entities and Player

All Entities now in allEntities
Player should be in allEntities[0].
main
Jerry Aldrich 11 years ago
parent cdd853e840
commit 611a46bdd7
  1. 85
      moveable.c

@ -51,8 +51,8 @@ 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='Z', .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="-\\|/-\\|/"};
@ -62,9 +62,9 @@ struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=
struct Entity * collisionDetect(int objYpos, int objXpos){ struct Entity * collisionDetect(int objYpos, int objXpos){
int i; int i;
for(i=0; i<MAX_ALIVE; i++){ for(i=0; i<MAX_ALIVE; i++){
if(allEntities[i] && allEntities[i]->isAlive){ if(allEntities[i].isAlive){
if(objYpos==allEntities[i]->curYpos && objXpos==allEntities[i]->curXpos){ if(objYpos==allEntities[i].curYpos && objXpos==allEntities[i].curXpos){
return allEntities[i]; return &allEntities[i];
} }
} }
} }
@ -107,7 +107,7 @@ void moveProjectiles(){
if(hitEntity->type=="zombie"){ if(hitEntity->type=="zombie"){
projectiles[i].isAlive=0; projectiles[i].isAlive=0;
hitEntity->isAlive=0; hitEntity->isAlive=0;
mvwaddch(viewportWin, allEntities[i]->curYpos, allEntities[i]->curXpos, ' '); mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' ');
} }
} }
if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){ if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){
@ -132,8 +132,8 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
} }
projectile.isAlive=1; projectile.isAlive=1;
projectile.distanceTraveled=0; projectile.distanceTraveled=0;
projectile.curYpos=player.curYpos; projectile.curYpos=allEntities[0].curYpos;
projectile.curXpos=player.curXpos; projectile.curXpos=allEntities[0].curXpos;
if(direction=="up"){ if(direction=="up"){
projectile.range*=.4; projectile.range*=.4;
projectile.direction='w'; projectile.direction='w';
@ -156,7 +156,7 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
for(i=0;i<MAX_PROJECTILES;i++){ for(i=0;i<MAX_PROJECTILES;i++){
if(!projectiles[i].isAlive && !projectiles[i+1].isAlive){ if(!projectiles[i].isAlive && !projectiles[i+1].isAlive){
projectiles[i]=projectile; projectiles[i]=projectile;
player.weapons[player.curWeapon].curCapacity--; allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
break; break;
} }
} }
@ -165,8 +165,8 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){
void drawScore(){ void drawScore(){
werase(scoreWin); werase(scoreWin);
box(scoreWin, 0, 0); box(scoreWin, 0, 0);
mvwprintw(scoreWin, 1, 1, "Current Weapon: %s",player.weapons[player.curWeapon].name); mvwprintw(scoreWin, 1, 1, "Current Weapon: %s",allEntities[0].weapons[allEntities[0].curWeapon].name);
mvwprintw(scoreWin, 2, 1, "Ammo: %d/%d",player.weapons[player.curWeapon].curCapacity,player.weapons[player.curWeapon].maxCapacity); mvwprintw(scoreWin, 2, 1, "Ammo: %d/%d",allEntities[0].weapons[allEntities[0].curWeapon].curCapacity,allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity);
wnoutrefresh(scoreWin); wnoutrefresh(scoreWin);
} }
@ -174,11 +174,11 @@ void drawViewport(){
box(viewportWin,0,0); box(viewportWin,0,0);
int i; int i;
for(i=0; i<MAX_ALIVE; i++){ for(i=0; i<MAX_ALIVE; i++){
if(allEntities[i] && allEntities[i]->isAlive){ if(allEntities[i].isAlive){
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();
@ -191,10 +191,10 @@ void initializeWorld() {
getmaxyx(viewportWin,viewportWinRows,viewportWinCols); getmaxyx(viewportWin,viewportWinRows,viewportWinCols);
scoreWin=newwin(10,scrCols,scrRows-10,0); scoreWin=newwin(10,scrCols,scrRows-10,0);
allEntities[0]=&player; allEntities[0]=player;
allEntities[1]=&zombie; allEntities[1]=zombie;
player.curYpos=10; allEntities[0].curYpos=10;
player.curXpos=10; allEntities[0].curXpos=10;
zombie.curYpos=rand()%viewportWinRows; zombie.curYpos=rand()%viewportWinRows;
zombie.curYpos=rand()%viewportWinCols; zombie.curYpos=rand()%viewportWinCols;
} }
@ -209,9 +209,8 @@ int main() {
initializeWorld(); initializeWorld();
nodelay(stdscr, TRUE); nodelay(stdscr, TRUE);
int ch; int ch;
allEntities[0].weapons[0]=pistol;
player.weapons[0]=pistol; allEntities[0].curWeapon=0;
player.curWeapon=0;
while(1) { while(1) {
drawScore(); drawScore();
drawViewport(); drawViewport();
@ -221,64 +220,64 @@ int main() {
switch(ch){ switch(ch){
case 'w': case 'w':
case 'W':{ case 'W':{
if(player.curYpos > 1){ if(allEntities[0].curYpos > 1){
player.nextYpos--; allEntities[0].nextYpos--;
if(player.nextYpos < 0){ if(allEntities[0].nextYpos < 0){
player.nextYpos = 0; allEntities[0].nextYpos = 0;
} }
} }
break; break;
} }
case 's': case 's':
case 'S':{ case 'S':{
if(player.curYpos < viewportWinRows - 2){ if(allEntities[0].curYpos < viewportWinRows - 2){
player.nextYpos++; allEntities[0].nextYpos++;
if(player.nextYpos > viewportWinRows-1){ if(allEntities[0].nextYpos > viewportWinRows-1){
player.nextYpos = viewportWinRows-1; allEntities[0].nextYpos = viewportWinRows-1;
} }
} }
break; break;
} }
case 'a': case 'a':
case 'A':{ case 'A':{
if(player.curXpos > 1){ if(allEntities[0].curXpos > 1){
player.nextXpos--; allEntities[0].nextXpos--;
if(player.nextXpos < 0){ if(allEntities[0].nextXpos < 0){
player.nextXpos = 0; allEntities[0].nextXpos = 0;
} }
} }
break; break;
} }
case 'd': case 'd':
case 'D':{ case 'D':{
if(player.curXpos < scrCols-2){ if(allEntities[0].curXpos < scrCols-2){
player.nextXpos++; allEntities[0].nextXpos++;
if(player.nextXpos > viewportWinCols-1){ if(allEntities[0].nextXpos > viewportWinCols-1){
player.nextXpos = viewportWinCols-1; allEntities[0].nextXpos = viewportWinCols-1;
} }
} }
break; break;
} }
case KEY_UP:{ case KEY_UP:{
if(player.weapons[player.curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "up"); fireWeapon(&pistol, "up");
} }
break; break;
} }
case KEY_LEFT:{ case KEY_LEFT:{
if(player.weapons[player.curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "left"); fireWeapon(&pistol, "left");
} }
break; break;
} }
case KEY_DOWN:{ case KEY_DOWN:{
if(player.weapons[player.curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "down"); fireWeapon(&pistol, "down");
} }
break; break;
} }
case KEY_RIGHT:{ case KEY_RIGHT:{
if(player.weapons[player.curWeapon].curCapacity>0){ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){
fireWeapon(&pistol, "right"); fireWeapon(&pistol, "right");
} }
break; break;

Loading…
Cancel
Save