int main(void) { srand(time(0)); if(!sysInit()) return 1; if(!sysLoadFiles()) return 1; gameTitle(); while(!quit) { startTimer = SDL_GetTicks(); sysInput(); gameLogic(); drawEverything(); // Update the screen if(SDL_Flip(screen) == -1) return 1; // Limit the frame rate endTimer = SDL_GetTicks(); deltaTimer = endTimer - startTimer; if(deltaTimer < (1000/FPS)) SDL_Delay((1000/FPS)-deltaTimer); } gameCleanup(); sysCleanup(); }
/* playRound * Plays a single round of the game. * Prompts user, gets data from stdin, and prints results. * * DO NOT MODIFY THIS FUNCTION */ void playRound() { char p1 = 0, p2 = 0, winner; printf("\nEnter what was played for both players (r,p,s,l,k): "); /* Makes sure we only process alphanumeric chars and ignore others*/ while( ! isalpha( p1 = getchar() ) ); while( ! isalpha( p2 = getchar() ) ); printf("Inputs: %c and %c\n", p1, p2); winner = gameLogic(p1, p2); if (winner == player1) printf("\nPlayer 1 wins!\n"); else if (winner == player2) printf("\nPlayer 2 wins!\n"); else if (winner == draw) printf("\nA Draw! (That's a tie)\n"); else printf("\nUnknown outcome. Problem with gameLogic function\n"); return; }
int main(int argc, char *argv[]) { srand(time(0)); if(!sysInit()) return 1; if(!sysLoadFiles()) return 1; gameModeInit(); menuInit(); gameTitle(); while(!quit) { startTimer = SDL_GetTicks(); sysInput(); gameLogic(); drawEverything(); // Update the screen SDL_RenderPresent(renderer); // Limit the frame rate endTimer = SDL_GetTicks(); deltaTimer = endTimer - startTimer; if(deltaTimer < (1000/FPS)) SDL_Delay((1000/FPS)-deltaTimer); } blockCleanup(); sysCleanup(); }
State onAIsTurn(Game* game) { /* added clear screen -Cesar 1/27 */ char cmd[255]; int result; clearScreen(); assert(game); printBoard(game); printf("Turn number: %d, ", game->turn+1); if(game->turn%2 == 0) printf("WHITE's turn\n"); else printf("BLACK's turn\n"); if(check500Turns(game)) return MainMenu; getDecisionFromAI(game, cmd); /* Normally this state should return to player's turn. * If AI vs. AI is need, then we should modify here. */ result = gameLogic(game, cmd); if(result == 9 || result == 10) result = promotion(game, cmd, 'Q'); if(result == 7) { printf("CHECKMATE\n"); saveLog(game, "lastGameLog.log"); printBoard(game); getchar(); return MainMenu; } else if(result == 8) { printf("STALEMATE\n"); saveLog(game, "lastGameLog.log"); printBoard(game); getchar(); return MainMenu; } /* if (result == 7 || game->turn > 100) return TurnPlayer; else return TurnAI; */ if(game->setting->gameMode == 2) return TurnAI; else return TurnPlayer; }
/** * Display callback function */ void DisplayCallback() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gameLogic(); if (gameState == GAME_RUNNING){ if(useDeferred) { //UPDATE PLIGHTS NEEDED if(plights.size() < torchFire->positions.size()) { addPointLights(); } //BUILD G-BUFFER dfe->PreDrawScene(); //lighting ADT Lights(); //DRAW OBJECTS AND EVIRONMENT //GETS STORED IN G-BUFFER FOR RENDERING renderWorld(); //transforms and draws the world as Rusko moves around drawRusko(); //transforms and draws Rusko //PREPARE FOR RENDING dfe->PostDrawScene(); //lighting ADT //-------------------------------// // Render the scene with shaders // //-------------------------------// dfe->DrawColors(windowWidth, windowHeight); dfe->PreDrawPointLights(windowWidth, windowHeight, zNear, zFar); DrawPointLights(); dfe->PostDrawPointLights(); //-----------------------------// // End render the scene // //-----------------------------// } else { renderWorld(); //transforms and draws the world as Rusko moves around drawRusko(); //transforms and draws Rusko } //FIRE RENDERED AFTER EVERYTHING ELSE drawRotatedParticles(); torchParticles->display(); } ReshapeCallback(windowWidth, windowHeight); glFlush(); glutSwapBuffers(); }
bool ColumnsGame::paint(Image& backBuffer) { PlayField.paint(backBuffer); if(iGameState!=COLUMNS_GAME_PAUSE){ gameLogic(); Pit.paint(backBuffer); activeStone.paint(backBuffer); } else { static float iRadius=30.0f; // Display Pause Logo static int a=0; int iRotSpeed=3; int xc=sin(a*(3.14f/180.0f))*iRadius; int yh=cos(a*(3.14f/180.0f))*50; a+=iRotSpeed; imgElements.setSrcRect(Rect(0,304,128,32)); imgElements.show(backBuffer, 230+xc,225-abs(yh/2),165,yh,IMAGE_BLTMODE_ADD); } if (iGameState==COLUMNS_GAME_OVER) { static float iRadius=30.0f; // Display Game Over Logo static int a=0; int iRotSpeed=3; int xc=sin(a*(3.14f/180.0f))*iRadius; int yh=cos(a*(3.14f/180.0f))*50; a+=iRotSpeed; iRadius-=iRotSpeed*(30.0f/720.0f); imgElements.setSrcRect(Rect(225,5,165,50)); imgElements.show(backBuffer, 230+xc,225-abs(yh/2),165,yh,IMAGE_BLTMODE_ADD); if (a>720) { a=0; iRadius=30.0f; iGameState=COLUMNS_GAME_OUT; } } // Displaying Score... displayScore(backBuffer); return true; }
State onPlayersTurn(Game* game) { /* added clear screen -Cesar 1/27 */ char cmd[255]; char choice = 0; char userInput[255]; char promotionChoice; char maxTurnUserInput; int result; int ox, oy, dx, dy; clearScreen(); assert(game); printBoard(game); printf("Turn number: %d, ", game->turn+1); if(game->turn%2 == 0) printf("WHITE's turn\n"); else printf("BLACK's turn\n"); printUserMenu(game); getGameInput(cmd); choice = cmd[0]; if(check500Turns(game)) return MainMenu; /* added by Cesar 1/26 */ switch(choice) { case '0': return MainMenu; case '1': printHints(game); return TurnPlayer; case '2': redo(game); return TurnPlayer; case '3': printLog(game); return TurnPlayer; case '4': replay(game); return TurnPlayer; case '5': printf("Enter the file name you want to save \n"); scanf("%s", userInput); saveLog(game, userInput); fseek(stdin,0,SEEK_END); return TurnPlayer; case '6': printf("Enter the file name you want to save: "); scanf("%s", userInput); printf("\n"); fseek(stdin,0,SEEK_END); saveGame(game, userInput); return TurnPlayer; case '7': gameOptions(game); return TurnPlayer; default: break; } ox = cmd[0] - 97; oy = cmd[1] - 49; dx = cmd[2] - 97; dy = cmd[3] - 49; if((!checkBoarder(ox, oy))||(!checkBoarder(dx, dy)) || (isValidMove(game, ox, oy, dx, dy) <= 0)) { printf("INVALID MOVE DETECTED"); if(game->setting->allowIllegalMove == 1) { printf(", TRY AGAIN\n\n"); return TurnPlayer; } else { printf(", GAME OVER!\n\n"); return MainMenu; } } result = gameLogic(game, cmd); if(result == 9 || result == 10) { promotionChoice = ' '; while(promotionChoice != 'Q' && promotionChoice != 'R' && promotionChoice != 'N' && promotionChoice != 'B') { printf("Pawn promotion, enter the promotion choice (char to represent piece): "); scanf("%c", &promotionChoice); fseek(stdin,0,SEEK_END); if(promotionChoice=='q') promotionChoice='Q'; else if(promotionChoice=='r') promotionChoice='R'; else if(promotionChoice=='n') promotionChoice='N'; else if(promotionChoice=='b') promotionChoice='B'; printf("%c\n",promotionChoice); if(promotionChoice != 'Q' && promotionChoice != 'R' && promotionChoice != 'N' && promotionChoice != 'B') printf("Invalid input, try again.\n"); } result = promotion(game, cmd, promotionChoice); } if(result == 7) { printf("CHECKMATE\n"); getchar(); return MainMenu; } else if(result == 8) { printf("STALEMATE\n"); getchar(); return MainMenu; } if(game->setting->gameMode == 0) return TurnAI; else if(game->setting->gameMode == 1) return TurnPlayer; else return MainMenu; /* game logic returns 0 meaning the game is end */ }
int main(){ REG_DISPCTL=MODE4|BG2_ENABLE; gameLogic(); return 0; }
void OpenGLWidget :: paintGL () { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; // qDebug() << "paintGL 1"; if( objects.size() == 0 ) return; std::list<Entity*>::iterator object = objects.begin(); // qDebug() << "paintGL 2"; Entity * obj; modelView.setToIdentity () ; modelView.lookAt ( camera.eye , camera.at , camera.up ) ; // qDebug() << "paintGL 3"; QMatrix4x4 modelViewMatrix; while( object != objects.end() ){ obj = (*object); // qDebug() << "paintGL 4"; if( !obj->live ){ object++; continue; } obj->getShaderProgram()->bind(); // qDebug() << "paintGL 5"; ambientProduct = light.ambient * obj->getMaterial()->ambient ; diffuseProduct = light.diffuse * obj->getMaterial()->diffuse ; specularProduct = light.specular * obj->getMaterial()->specular ; // qDebug() << "paintGL 6"; modelViewMatrix = modelView * obj->getTransformation(); obj->getShaderProgram()->setUniformValue("lightPosition", light.position ) ; obj->getShaderProgram()->setUniformValue("ambientProduct", ambientProduct ) ; obj->getShaderProgram()->setUniformValue("diffuseProduct", diffuseProduct ) ; obj->getShaderProgram()->setUniformValue("specularProduct", specularProduct ) ; obj->getShaderProgram()->setUniformValue("shininess", static_cast < GLfloat >( material.shininess ) ) ; obj->getShaderProgram()->setUniformValue("modelView", modelViewMatrix ) ; obj->getShaderProgram()->setUniformValue("normalMatrix", modelViewMatrix.normalMatrix() ) ; obj->getShaderProgram()->setUniformValue("projectionMatrix", projectionMatrix ); // qDebug() << "paintGL 7"; obj->getVboVertices()-> bind () ; obj->getShaderProgram() -> enableAttributeArray ("vPosition") ; obj->getShaderProgram() -> setAttributeBuffer ("vPosition", GL_FLOAT , 0 , 4 , 0) ; // qDebug() << "paintGL 8"; obj->getVboNormals()->bind(); obj->getShaderProgram() -> enableAttributeArray ("vNormal") ; obj->getShaderProgram() -> setAttributeBuffer ("vNormal", GL_FLOAT , 0 , 3 , 0) ; // qDebug() << "paintGL 9"; obj->getVboTangents()->bind(); obj->getShaderProgram()->enableAttributeArray ("vTangent") ; obj->getShaderProgram()->setAttributeBuffer ("vTangent", GL_FLOAT , 0 , 4 , 0) ; // qDebug() << "paintGL 10"; obj->getVboIndices()->bind() ; // qDebug() << "paintGL 11"; obj->getVbocoordText() -> bind (); obj->getShaderProgram() -> enableAttributeArray ("vcoordText") ; obj->getShaderProgram() -> setAttributeBuffer ("vcoordText", GL_FLOAT , 0 , 2 , 0) ; // qDebug() << "paintGL 12"; obj->getMaterial()->texture -> bind (0) ; obj->getShaderProgram() -> setUniformValue ("colorTexture", 0) ; if( obj->getMaterial()->map1 != NULL ){ obj->getMaterial()->map1 -> bind (1) ; obj->getShaderProgram() -> setUniformValue ("colorMap", 1); } // qDebug() << "paintGL 13"; glDrawElements ( GL_TRIANGLES , obj->getFacesCount() * 3 , GL_UNSIGNED_INT , 0) ; // qDebug() << "paintGL 14"; obj->getShaderProgram()->release(); obj->getVboVertices()->release(); obj->getVboNormals()->release(); obj->getVboIndices()->release(); obj->getVbocoordText()->release(); obj->getMaterial()->texture->release(0); if( obj->getMaterial()->map1 != NULL ){ obj->getMaterial()->map1->release(1); } // qDebug() << "paintGL 15"; object++; } // qDebug() << "paintGL 16"; float deltaTime = (float) elapsedTime.elapsed() / 1000; gameLogic( deltaTime ); elapsedTime.restart(); }
void gameloop() { while (!danmakux.done) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if (ev.type == ALLEGRO_EVENT_TIMER) { redraw = true; update(); gameLogic(); } else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { danmakux.done = true; } else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) { if (danmakux.state_playing && !danmakux.state_paused) { switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: danmakux.player->moveu = true; break; case ALLEGRO_KEY_DOWN: danmakux.player->moved = true; break; case ALLEGRO_KEY_LEFT: danmakux.player->movel = true; break; case ALLEGRO_KEY_RIGHT: danmakux.player->mover = true; break; case ALLEGRO_KEY_Z: danmakux.player->fireFront = 1; break; case ALLEGRO_KEY_X: danmakux.player->fireBack = 1; break; case ALLEGRO_KEY_C: danmakux.player->fireSide = 1; break; case ALLEGRO_KEY_LSHIFT: danmakux.player->focused = true; break; case ALLEGRO_KEY_ESCAPE: break; } } else if (danmakux.state_menu) { std::stringstream levelno; std::string level; switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: danmakux.menuChoice -= 1; if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.menuitems.size()-1; break; case ALLEGRO_KEY_DOWN: danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.menuitems.size(); break; case ALLEGRO_KEY_LEFT: danmakux.menuChoice -= 1; if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.menuitems.size()-1; break; case ALLEGRO_KEY_RIGHT: danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.menuitems.size(); break; case ALLEGRO_KEY_Z: switch (danmakux.menuChoice) { case 0: clearMenu(); danmakux.state_menu = false; danmakux.state_playing = true; danmakux.state_paused = false; danmakux.state_dialog = false; levelno << danmakux.currentLevel; level = "level" + levelno.str(); plyr_load(danmakux.player, "machine"); loadLevel(level); break; case 1: break; case 2: danmakux.done = true; break; } break; case ALLEGRO_KEY_X: danmakux.menuChoice = 2; break; } } else if (danmakux.state_paused) { switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: danmakux.menuChoice -= 1; if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.pauseitems.size()-1; break; case ALLEGRO_KEY_DOWN: danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.pauseitems.size(); break; case ALLEGRO_KEY_LEFT: danmakux.menuChoice -= 1; if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.pauseitems.size()-1; break; case ALLEGRO_KEY_RIGHT: danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.pauseitems.size(); break; case ALLEGRO_KEY_Z: break; case ALLEGRO_KEY_X: danmakux.fireBomb = true; break; } } } else if (ev.type == ALLEGRO_EVENT_KEY_UP) { if (danmakux.state_playing && !danmakux.state_paused) { switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: danmakux.player->moveu = false; break; case ALLEGRO_KEY_DOWN: danmakux.player->moved = false; break; case ALLEGRO_KEY_LEFT: danmakux.player->movel = false; break; case ALLEGRO_KEY_RIGHT: danmakux.player->mover = false; break; case ALLEGRO_KEY_Z: danmakux.player->fireFront = 0; break; case ALLEGRO_KEY_X: danmakux.player->fireBack = 0; break; case ALLEGRO_KEY_C: danmakux.player->fireSide = 0; break; case ALLEGRO_KEY_LSHIFT: danmakux.player->focused = false; break; } } } if (redraw && al_is_event_queue_empty(event_queue)) { redrawDisp(); } } }
void snake::mainGame() { //Starting game startUp(); //Getting player name bool nameChk = false; while (!nameChk) { try { system("cls"); cout << "\t\tSNAKE" << "\n\n\tWelcome to the game Snake.\n" << "\nTo play simply collect the fruit 'x' and don't" << "\n\thit the walls or your tail!" << "\n\nControls: A = left, D = right, W = up, S = down, X = Restart" << "\n\nPlease enter a player name(Max 10): "; cin >> pName; if (pName.length() <= 10) { nameChk = true; } else { throw "Name too long or short"; } } catch (...) { cout << "\n\nPlease adhere to length limits.\n\n"; system("pause"); } } //Play again check bool playAgain = true; while (playAgain) { //Looping game while (!gameOver) { print(); getInput(); gameLogic(); Sleep(100); } //Checking for play again bool entryChk = false; while (!entryChk) { //Clearing Screen system("cls"); //Printing message cout << "\n\n\n\t\tYou have died!\n\t\tPlay again???\n\t\t(Y/N): "; cin >> death; //Checking for correct input if (toupper(death) == 'Y' || toupper(death) == 'N') { entryChk = true; //Resetting game startUp(); //playAgain is deafult true, only changes to false if no is selected if (toupper(death) == 'N') { playAgain = false; } } //Error message for incorrect input else { cout << "Please enter Y or N"; system("pause"); } } } }