コード例 #1
0
ファイル: Player.c プロジェクト: Axanimander/Thing2
void Attack(Map *ThisMap, Player *ThisPlayer, short AttackDir)
{
	COORD HitPos;
	HitPos = ThisPlayer->PlayerPos;
	Direction(&HitPos, AttackDir);
	if(ThisMap->MapTile[HitPos.X][HitPos.Y].TileMob)
	{
		PlayerHit(ThisMap->MapTile[HitPos.X][HitPos.Y].TileMob, ThisPlayer);
		if(ThisMap->MapTile[HitPos.X][HitPos.Y].TileMob->CurrHealth <= 0)
		{
			MonsterDeath(ThisMap, HitPos);
			mvprintw(MSGPOSX, MSGPOSY, "You killed it!");
			
		};
	}
	else
	{
		mvprintw(MSGPOSX, MSGPOSY, "Nothing to hit!");
	};
}
コード例 #2
0
ファイル: game.cpp プロジェクト: PuddingLaterne/Calmanaut
void Game::Update()
{
	display->Clear(0.1f, 0.1f, 0.1f, 1.0f);

	if (controller.isClosing())
	{
		timer->Pause();
		state = MENU;
		menu->SetState(MenuState::PAUSE);
	}

	timer->Update();
	totalTime = timer->GetTotalTime();
	elapsedTime = timer->GetElapsedTime();

	controller.Update(elapsedTime);
	while (SDL_PollEvent(&e))
		controller.HandleInput(e);

	switch (state)
	{
	case(GameState::MENU) :
		menu->Update(elapsedTime, totalTime);
		switch (menu->GetState())
		{
		case(MenuState::START) :
			Restart();
			break;
		case(MenuState::RESUME) :
			timer->Resume();
			state = GameState::RUNNING;
			break;
		case(MenuState::QUIT) :
			End();
			break;
		case(MenuState::RETRY) :
			Restart();
			break;
		}
		break;

	case(GameState::RUNNING) :
		UpdateBackground(elapsedTime, totalTime);

		UseBomb();
		Shoot();
		UpdateBomb(elapsedTime, totalTime);
		UpdatePlayerBullets(elapsedTime, totalTime);
		UpdatePlayer(elapsedTime, totalTime);
		if (player->IsHit())
			PlayerHit();
		
		enemyHandler->Update(elapsedTime, totalTime, &playerbullets, bomb);
		if (!enemyHandler->EnemiesLeft())
			Won();
		if (player->GetState() == GameObject::DEAD)
			Lost();
		UpdateOverlay(elapsedTime, totalTime);

		break;
	}

	display->Update();
}
コード例 #3
0
ファイル: game.c プロジェクト: chazomaticus/asteroid
//performs clipping each frame
void Clipping(void)
{
   LIST * cur1;
   LIST * cur2;
   LIST * next;

   for(cur1 = g_asteroid_list; cur1; cur1 = next)
   {
      next = cur1->next;

      if(g_ships
         && !g_player.wait_time
         && (((ASTEROID *)cur1->d)->region & g_player.region)
         && PolyInCircle(&g_player.clip_poly, &(((ASTEROID *)cur1->d)->clip_circle))) //if the player hits the asteroid
      {
         PlayerHit();
         AsteroidHit(cur1, 0);
         continue;
      }

      for(cur2 = g_alien_list; cur2; cur2 = cur2->next)
      {
         if((((ASTEROID *)cur1->d)->region & ((ALIEN *)cur2->d)->region)
            && (PolyInCircle(&(((ALIEN *)cur2->d)->clip_poly/*s[0]*/), &(((ASTEROID *)cur1->d)->clip_circle))
               /*|| PolyInCircle(&(((ALIEN *)cur2->d)->clip_polys[1]), &(((ASTEROID *)cur1->d)->clip_circle))
               || PolyInCircle(&(((ALIEN *)cur2->d)->clip_polys[2]), &(((ASTEROID *)cur1->d)->clip_circle))*/))
         {
            AlienHit(cur2, 0);
            AsteroidHit(cur1, 0);
            break;
         }
      }
      if(cur2) //if we broke early from the loop
         continue;

      for(cur2 = g_shot_list; cur2; cur2 = cur2->next)
      {
         if((((ASTEROID *)cur1->d)->region & ((SHOT *)cur2->d)->region)
            && PointInCircle(&(((SHOT *)cur2->d)->pos), &(((ASTEROID *)cur1->d)->clip_circle))) //if any shot hits the asteroid
         {
            AsteroidHit(cur1, ((SHOT *)cur2->d)->player_owned);
            RemoveNode(cur2, &g_shot_list);
            break;
         }
      }
      if(cur2) //if we broke early from the loop
         continue;
   }

   for(cur1 = g_shot_list; cur1; cur1 = next)
   {
      next = cur1->next;

      if(!((SHOT *)cur1->d)->player_owned
         && g_ships
         && !g_player.wait_time
         && (g_player.region & ((SHOT *)cur1->d)->region)
         && PointInPoly(&(((SHOT *)cur1->d)->pos), &g_player.clip_poly)) //if the alien shot is inside player
      {
         RemoveNode(cur1, &g_shot_list);
         PlayerHit();
         continue;
      }

      if(((SHOT *)cur1->d)->player_owned)
      {
         for(cur2 = g_alien_list; cur2; cur2 = cur2->next)
         {
            if((((SHOT *)cur1->d)->region & ((ALIEN *)cur2->d)->region)
               && (PointInPoly(&(((SHOT *)cur1->d)->pos), &(((ALIEN *)cur2->d)->clip_poly/*s[0]*/))
                  /*|| PointInPoly(&(((SHOT *)cur1->d)->pos), &(((ALIEN *)cur2->d)->clip_polys[1]))
                  || PointInPoly(&(((SHOT *)cur1->d)->pos), &(((ALIEN *)cur2->d)->clip_polys[2]))*/))
            {
               RemoveNode(cur1, &g_shot_list);
               AlienHit(cur2, 1);
               break;
            }
         }
         if(cur2)
            continue;
      }

      for(cur2 = g_powerup_list; cur2; cur2 = cur2->next)
      {
         if((((SHOT *)cur1->d)->region & ((POWERUP *)cur2->d)->region)
            && PointInCircle(&(((SHOT *)cur1->d)->pos), &(((POWERUP *)cur2->d)->clip_circle)))
         {
            PowerupHit(cur2, ((SHOT *)cur1->d)->player_owned);
            RemoveNode(cur1, &g_shot_list);
            break;
         }
      }
      if(cur2)
         continue;
   }

   if(g_ships
      && !g_player.wait_time)
   {
      for(cur1 = g_alien_list; cur1; cur1 = cur1->next)
      {
         if((g_player.region & ((ALIEN *)cur1->d)->region)
            && (PolyInPoly(&g_player.clip_poly, &(((ALIEN *)cur1->d)->clip_poly/*s[0]*/))
               /*|| PolyInPoly(&g_player.clip_poly, &(((ALIEN *)cur1->d)->clip_polys[1]))
               || PolyInPoly(&g_player.clip_poly, &(((ALIEN *)cur1->d)->clip_polys[2]))*/))
         {
            PlayerHit();
            AlienHit(cur1, 0);
            break;
         }
      }
   }

   if(g_ships)
   {
      for(cur1 = g_powerup_list; cur1; cur1 = next)
      {
         next = cur1->next;

         if((g_player.region & ((POWERUP *)cur1->d)->region)
            && PolyInCircle(&g_player.clip_poly, &(((POWERUP *)cur1->d)->clip_circle)))
         {
            GetPowerup(cur1);
            continue;
         }
      }
   }
}