#include #include #include void gameLoop(){ int lastPressed; while(1) { drawScore(); drawViewport(); moveProjectiles(); moveZombies(); doupdate(); int ch; ch = getch(); switch(ch){ case 'w': case 'W':{ if(allEntities[0].curYpos > 1){ allEntities[0].nextYpos--; if(allEntities[0].nextYpos < 0){ allEntities[0].nextYpos = 0; } } break; } case 's': case 'S':{ 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':{ if(allEntities[0].curXpos > 1){ allEntities[0].nextXpos--; if(allEntities[0].nextXpos < 0){ allEntities[0].nextXpos = 0; } } break; } case 'd': case 'D':{ if(allEntities[0].curXpos < scrCols-2){ allEntities[0].nextXpos++; if(allEntities[0].nextXpos > viewportWinCols-1){ allEntities[0].nextXpos = viewportWinCols-1; } } break; } case 'z': case 'Z':{ addZombie(); 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; } default: if (ch != ERR) {lastPressed=ch;}; break; } struct Entity * hitEntity = (struct Entity *)collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); if(hitEntity){ if(!strcmp(hitEntity->type,"zombie")){ allEntities[0].isAlive=0; mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' '); drawGameOverWin(); } } } }