예제 #1
0
파일: main.c 프로젝트: dorkster/espada2
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();
}
예제 #2
0
/* 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;
}
예제 #3
0
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();
}
예제 #4
0
파일: GameMain.c 프로젝트: cfj2k5/Chess
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;


}
예제 #5
0
/**
 * 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();
}
예제 #6
0
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;
}
예제 #7
0
파일: GameMain.c 프로젝트: cfj2k5/Chess
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 */
}
예제 #8
0
int main(){
	REG_DISPCTL=MODE4|BG2_ENABLE;
	
	gameLogic();	
	return 0;
}
예제 #9
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();
}
예제 #10
0
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();
		}
	}
}
예제 #11
0
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");
			}
		}	
	}
}