#include #include #include #include #include void gameLoop(){ int lastPressed; while(1) { drawScore(); drawViewport(); moveProjectiles(); moveZombies(); randomEvents(); doupdate(); int ch; ch = getch(); switch(ch){ case 'w': case 'W':{ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].nextYpos-1,allEntities[0].curXpos); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ allEntities[0].nextYpos--; }; break; } case 's': case 'S':{ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].nextYpos+1,allEntities[0].curXpos); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ allEntities[0].nextYpos++; }; break; if(allEntities[0].curYpos < viewportWinRows - 2){ allEntities[0].nextYpos++; if(allEntities[0].nextYpos > viewportWinRows-1){ allEntities[0].nextYpos = viewportWinRows-1; } } break; } case 'a': case 'A':{ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].nextXpos-1); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ allEntities[0].nextXpos--; }; break; if(allEntities[0].curXpos > 1){ allEntities[0].nextXpos--; if(allEntities[0].nextXpos < 0){ allEntities[0].nextXpos = 0; } } break; } case 'd': case 'D':{ struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].nextXpos+1); if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){ allEntities[0].nextXpos++; }; break; if(allEntities[0].curXpos < stdscrCols-2){ allEntities[0].nextXpos++; if(allEntities[0].nextXpos > viewportWinCols-1){ allEntities[0].nextXpos = viewportWinCols-1; } } break; } case KEY_UP:{ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "up"); } break; } case KEY_LEFT:{ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "left"); } break; } case KEY_DOWN:{ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "down"); } break; } case KEY_RIGHT:{ if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0){ fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "right"); } break; } case 'r': case 'R':{ if(allEntities[0].weapons[allEntities[0].curWeapon].curMags > 0 && allEntities[0].weapons[allEntities[0].curWeapon].curCapacity < allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity ){ reload(&allEntities[0].weapons[allEntities[0].curWeapon]); } } default: if (ch != ERR) {lastPressed=ch;}; break; } checkPlayerCollision(); usleep(30000); } }