예제 #1
0
파일: main.c 프로젝트: dougblack/tetris
void placeKey() {
  for (int x = 0; x < 4; x++) {
    for (int y = 0; y < 4; y++) {
      if (key.t[x*4+y] == 1) {
        if (key.r+x <=4)
          gameOver();
        matrix[key.r+x][key.c+y] = 1;
        colorMatrix[key.r+x][key.c+y] = key.color;
      }
    }
  }
  checkForScore();
  key.t = next.t;
  key.color = next.color;
  key.r = 0;
  key.c = 3;
  int nextType = qran_range(0,7);
  int *n;
  n = tetriminos[nextType];
  next.t = n;
  next.color = colors[nextType];
  drawMatrix();
  setNextPiece(next);
  droppedYet = 0;
}
예제 #2
0
파일: mode.cpp 프로젝트: Shiryu/Flocks
void Ultra::play()
{
	float volume = 0.0;
	FMOD_Channel_SetVolume(musicChannel, 1.0);
	FMOD_Channel_GetVolume(musicChannel, &volume);
	
	fout << volume << std::endl;
	
	playMusic(ultraMusic);
	
	setCurrentGamePiece(createNewPiece());
	setNextPiece(createNewPiece());
	
	enableCurrentPiece();
	
	setLinesCompleted(0);
	setLevel(1);
	setFallIterationDelay(computeFallIterationDelay());
	setScore(0);
	setState(RUNNING);
	
	sf::Clock fallingClock;
	fallingClock.Reset();
	
	float currentTime = 0, precTime = 0;
	
	while(renderArea->IsOpened())
	{
		if(getState() == PAUSED)
		{
			setBackground(PAUSE_IMG);
			
			timer.pause();
			
			if(handlePauseInput() == RETURN_MAIN)
				return;
		}
		else
		{
			timer.start();
			currentTime = fallingClock.GetElapsedTime();
			
			handleTimerInput(currentTime, precTime);
			
			handleUserInput();
			
			if(Game::gameOver() || timeElapsed())
			{
				if(handleGameOverInput() == RETURN_MAIN)
					return;
			}
			else
				render();
		}
		
		renderArea->Display();
	}
}
예제 #3
0
파일: mode.cpp 프로젝트: Shiryu/Flocks
void Sprint::play()
{
	playMusic(sprintMusic);
	
	setCurrentGamePiece(createNewPiece());
	setNextPiece(createNewPiece());
	
	enableCurrentPiece();
	
	setLinesCompleted(0);
	setLevel(1);
	setFallIterationDelay(computeFallIterationDelay());
	setScore(0);
	setState(RUNNING);
	
	sf::Clock fallingClock;
	fallingClock.Reset();
	
	float currentTime = 0, precTime = 0;
	
	while(renderArea->IsOpened())
	{
		setNbLinesToDelete(NB_LINES_TO_DELETE - getLinesCompleted());
		
		if(getState() == PAUSED)
		{
			timer.pause();
			if(handlePauseInput() == RETURN_MAIN)
				return;
		}
		else
		{
			timer.start();
			currentTime = fallingClock.GetElapsedTime();
				
			handleTimerInput(currentTime, precTime);
				
			handleUserInput();
				
			if(Game::gameOver() || finished())
			{
				timer.pause();
				if(handleGameOverInput() == RETURN_MAIN)
					return;
			}
			else
				render();
		}
		
		renderArea->Display();
	}
	
}
예제 #4
0
파일: game.cpp 프로젝트: Shiryu/Flocks
void Game::play()
{
	playMusic(marathonMusic);
	
	setCurrentGamePiece(createNewPiece());
	setNextPiece(createNewPiece());
	
	enableCurrentPiece();
	
	setLinesCompleted(0);
	setLevel(1);
	setFallIterationDelay(computeFallIterationDelay());
	setScore(0);
	setState(RUNNING);
	
	sf::Clock fallingClock;
	fallingClock.Reset();
	
	float currentTime = 0, precTime = 0;
	
	while(renderArea->IsOpened())
	{
		if(getState() == PAUSED)
		{
			if(handlePauseInput() == RETURN_MAIN)
				return;
		}
		else
		{
			currentTime = fallingClock.GetElapsedTime();
		
			handleTimerInput(currentTime, precTime);
		
			handleUserInput();
			
			
			if(!gameOver())
				render(BG_IMG);
			else
			{
				if(handleGameOverInput() == RETURN_MAIN)
					return;
			}
		}
				
		renderArea->Display();
	}
}
예제 #5
0
파일: game.cpp 프로젝트: Shiryu/Flocks
void Game::handlePieceLandAction()
{
	if(!gameOver())
	{
		gameArea.moveCurrentPieceDown();
		
		setCurrentGamePiece(getNextPiece());
		enableCurrentPiece();
		setNextPiece(createNewPiece());
		
		int n = gameArea.deletePossibleLines();
		
		if(n != 0)
			playSound(deletion);
		
		updateGameInfos(n);
	}
}
예제 #6
0
파일: game.cpp 프로젝트: Shiryu/Flocks
void Game::restart()
{
	continueMusic();
	
	firstTimeHolding = true;
	
	shuffleRandomBag();
	currentPieceIndex = 0;
	
	gameArea.clear();
	
	setLinesCompleted(0);
	setLevel(1);
	setScore(0);
	setFallIterationDelay(computeFallIterationDelay());
	setState(RUNNING);
	
	setCurrentGamePiece(createNewPiece());
	setNextPiece(createNewPiece());
	
	enableCurrentPiece();
}
예제 #7
0
파일: main.c 프로젝트: dougblack/tetris
/* ===============================
 * BOARD SETUP
 * =============================== */
void setupBoard() { 
  REG_DISPCTL = MODE3 | BG2_ENABLE;
  int tetType = qran_range(0,7);
  int nextType = qran_range(0,7);
  int *t;
  int *n;
  t = tetriminos[tetType];
  n = tetriminos[nextType];

  // Generate random tetrimino to start falling and
  // generate random tetrimino to show as next tetrmino
  key.t = t;
  next.t = n;
  next.color = colors[nextType];
  key.color = colors[tetType];

  key.r = 0;
  key.c = 3;
  keyLastR = 0;
  keyLastC = 3;

  for (int i = 0; i < 16; i++) {
    keyLastT[i] = key.t[i];
  }


  /* Draw back screen */
  dma_mem[3].cnt = 0;
  u16 *black = BLACK;
  dma_mem[3].src = black;
  dma_mem[3].dst = videoBuffer;
  dma_mem[3].cnt = 38400 | DMA_ON | DMA_SOURCE_FIXED;

  /* Draw board and pieces */
  drawMatrixBorders();
  setNextPiece(next);
}