void ChessClockWidget::repaintClock()
{
    // Set picture
    if( getStatus() == Running || getStatus() == Paused)
        pictureLabel_->setPixmap( picActive_);
    else
        pictureLabel_->setPixmap(picPassive_);

    timeUsedLabel_->setText( timeString( getTimePlayed() ));

    // Time average per turn
    int timeAverage;
    if( getTurn() == 0)
        timeAverage = 0;
    else
        timeAverage = getTimePlayed() / getTurn();
    timeAverageLabel_->setText( tr("Avg %1").arg( timeString( timeAverage ) ) );

    turnLabel_->setText( tr("Turn %1").arg(getTurn()));

    // Current turn played
    // Extra time of this turn is shown in green.
    if( currentTurnPlayed() < greenTime_ )
        turnTimeLabel_->setText( QString("<font color=green> %1 </font>") .arg(timeString( currentTurnPlayed()) ) );
    else
        turnTimeLabel_->setText( timeString( currentTurnPlayed() ) );

    // Loser flag
    loserLabel_->setVisible( isLoser());

    leftLabel_->setText( timeString(getTimeAvailable()));

}
Exemple #2
0
void Game::configure(GameConfiguration config) {
	if (!config.isValid()) {
		throw std::invalid_argument("Invalid configuration: " + config.str());
	}
	config.clean();

	reset();


	curTurn = config.getTurn();


	FOR_POSITION_64(pos) {
		setPieceAt(pos, config.getPieceAt(pos));
		if (config.getPieceAt(pos) != Piece::EMPTY()) {
			toggleBit(config.getOwnerAt(pos), pos, config.getPieceAt(pos));
		}
	}

	cur = Game_UndoData();
	cur.halfMoveClock = config.getHalfMoveClock();
	fullMoveCount = config.getMoveNumber();
	cur.check = posAttackedBy(getKingPosition(getTurn()), !getTurn());

	cur.hash = Game_Hash(config);


	integrityCheck();
}
Exemple #3
0
void Calendar::save( QTextStream * ts, int indent )
{
	indentation( ts, indent );
	*ts << "<calendar>" << endl;

	for( uint i = 0; i < 5; i++ ) {
			indentation( ts, indent + 1 );
			*ts << "<value type=\"" << i << "\">";
			*ts << getDateByType( i ) << "</value>" << endl;
	}

	indentation( ts, indent + 1 );
	*ts << "<startcalendar>" << endl;

	for( uint i = 0; i < 5; i++ ) {
			indentation( ts, indent + 2 );
			*ts << "<value type=\"" << i << "\">";
			*ts << getInitialDateByType( i ) << "</value>" << endl;
	}
	indentation( ts, indent + 1 );
	*ts << "</startcalendar>" << endl;
	
	indentation( ts, indent + 1 );
	*ts << "<turn>" << getTurn() << "</turn>" << endl;
	indentation( ts, indent );
	*ts << "</calendar>" << endl;
	*ts << flush;

}
Exemple #4
0
    const int& _TimeManager::prevTurn()
  {
    pause();
    setTurn(m_turn - 1);
    return getTurn();

  } // _TimeManager::prevTurn()
Exemple #5
0
  const int& _TimeManager::nextTurn()
  {
    pause();
    setTurn(m_turn + 1);
    return getTurn();

  } // _TimeManager::nextTurn()
Exemple #6
0
bool PlayerIntention::operator == (const PlayerIntention &other) const {
    return getAccel() == other.getAccel()
        && getTurn() == other.getTurn()
        && getJump() == other.getJump()
        && getReset() == other.getReset()
        && getPaint() == other.getPaint()
        && getErase() == other.getErase();
}
Exemple #7
0
void UsiClient::search() {
  OUT(info) << "search thread is started. tid=" << std::this_thread::get_id();

  auto pos = generatePosition(record_, -1);
  auto config = searcher_->getConfig();

  if (isInfinite_) {
    config.maximumTimeMs = SearchConfig::InfinityTime;
    config.optimumTimeMs = SearchConfig::InfinityTime;

  } else {
    bool isBlack = pos.getTurn() == Turn::Black;
    TimeType remainingTimeMs = isBlack ?  blackTimeMs_ : whiteTimeMs_;
    config.maximumTimeMs = remainingTimeMs + byoyomiMs_ - options_.marginMs;
    config.optimumTimeMs = std::max(remainingTimeMs / 50,
                           std::min(remainingTimeMs, byoyomiMs_/* + incrementMs*/))
                         + byoyomiMs_;

    if (options_.snappy) {
      config.optimumTimeMs /= 3;
    }

    if (!options_.snappy && remainingTimeMs == 0/* && incrementMs == 0*/) {
      config.optimumTimeMs = SearchConfig::InfinityTime;
    }
  }

  searcher_->setConfig(config);

  searcher_->idsearch(pos, Searcher::DepthInfinity, &record_);

  if (isInfinite_) {
    waitForStopCommand();
  }

  const auto& result = searcher_->getResult();
  const auto& info = searcher_->getInfo();
  bool canPonder = !result.move.isNone() &&
                   result.pv.size() >= 2;

  // send the result of search
  if (canPonder) {
    send("bestmove", result.move.toStringSFEN(),
           "ponder", result.pv.getMove(1).toStringSFEN());
  } else if (!result.move.isNone()) {
    send("bestmove", result.move.toStringSFEN());
  } else {
    send("bestmove", "resign");
  }

  // print the result of search
  printSearchInfo(OUT(info), info, result.elapsed);

  // notify to receiver
  breakReceive();

  OUT(info) << "search thread is stopped. tid=" << std::this_thread::get_id();
}
int wallerFireDmg() {
	// aumentar potencia de daño si la vida es igual o inferior al porcentaje indicado
	int FURY_PERCENT = 15;
	int dmg;
	int opponents = getOpponents();

	if (opponents > 2) {
		// 3 o 4 oponentes -> daño = 3
		dmg = 3;
	} else {
		// 1 o 2 oponentes -> daño = 4
		dmg = 4;
	}

	if (LAST_TURN_FIRE != -1 && LAST_TURN_FIRE != getTurn()) {
		// 4 (o más) turnos sin disparar -> aumentar en +2 el daño
		// 3 (o más) turnos sin disparar -> aumentar en +1 el daño
		if ((getTurn() - LAST_TURN_FIRE) >= 4) {
			dmg += 2;
		} else if ((getTurn() - LAST_TURN_FIRE) >= 3) {
			dmg += 1;
		}
	}

	// aumentar potencia de daño si la vida es inferior a FURY_PERCENT%
	if (getLife() <= (FURY_PERCENT * DEFAULT_LIFE / 100)) {
		// si está en 1 vs 1 -> aumentar en +2 el daño
		// aumentar en +1 en cualquier otro caso.
		if (opponents == 1) {
			dmg += 2;
		} else {
			dmg += 1;
		}
	}

	return dmg;
}
int CvTalkingHeadMessage::getExpireTurn()
{
	int iExpireTurn = getTurn();
	switch (m_eMessageType)
	{
	case MESSAGE_TYPE_INFO:
		iExpireTurn += 2;
		break;
	case MESSAGE_TYPE_LOG_ONLY:
		iExpireTurn += 1;
		break;
	case MESSAGE_TYPE_CHAT:
		iExpireTurn += 20;
		break;
    case MESSAGE_TYPE_COMBAT_MESSAGE:
		iExpireTurn += 20;
		break;
	case MESSAGE_TYPE_MINOR_EVENT:
		iExpireTurn += 20;
		break;
	case MESSAGE_TYPE_QUEST:
	case MESSAGE_TYPE_TUTORIAL:
	case MESSAGE_TYPE_MAJOR_EVENT:
		// never expires
		iExpireTurn = GC.getGameINLINE().getGameTurn() + 1;
		break;
	case MESSAGE_TYPE_DISPLAY_ONLY:
		// never saved
		iExpireTurn = GC.getGameINLINE().getGameTurn() - 1;
		break;
	default:
		FAssert(false);
		break;
	}
	return (iExpireTurn);
}
TurnInformation* FischerAfterClock::endTurn()
{
    if( getTurn() % perTurns_ == 0)
        addTime( addition_ );
    return ChessClock::endTurn() ;
}
Exemple #11
0
int main(void)
{
	char * name=loadFile("name.txt");
	char * buf= init(name); //get starting message
	int sockfd, numbytes;
	struct addrinfo hints, *servinfo, *p;
	int rv;
	char s[INET6_ADDRSTRLEN];

	memset(&hints, 0, sizeof hints);
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;

	if ((rv = getaddrinfo(HOST, PORT, &hints, &servinfo)) != 0) {
		fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
		return 1;
	}

	// loop through all the results and connect to the first we can
	for(p = servinfo; p != NULL; p = p->ai_next) {
		if ((sockfd = socket(p->ai_family, p->ai_socktype,
				p->ai_protocol)) == -1) {
			perror("client: socket");
			continue;
		}

		if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
			close(sockfd);
			perror("client: connect");
			continue;
		}

		break;
	}

	if (p == NULL) {
		fprintf(stderr, "client: failed to connect\n");
		return 2;
	}

	inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr),
			s, sizeof s);

	freeaddrinfo(servinfo); // all done with this structure

	send(sockfd, buf, strlen(buf)+1, 0);

	char str[MAXDATASIZE];
	if ((numbytes = recv(sockfd, str, MAXDATASIZE-1, 0)) == -1) {
	    perror("recv");
	    exit(1);
	}

	str[numbytes] = '\0';

	//Determine my player token
	char * temptok = strstr(strstr(strstr(str, "playerToken"), ":"), "\"")+1;
	char * tempend = strstr(temptok, "\"");
	tempend[0]=0;
	char * token=malloc(tempend-temptok+1);
	strcpy(token, temptok);
	tempend[0]='\"';
	int res;

	while(1){
		res=getTurn(buf, token, responseCode(str), resources(str), ships(str), errors(str), hits(str), actionResponses(str), pings(str));
		if(res==1) break;
		if(res==2) {
			send(sockfd, buf, strlen(buf)+1, 0);
		}

		if ((numbytes = recv(sockfd, str, MAXDATASIZE-1, 0)) == -1) {
		    perror("recv");
		    exit(1);
		}

		str[numbytes] = '\0';
	}

	close(sockfd);
	free(buf);
	free(token);
	free(name);

	return 0;
}
void wallerFire(int dir, int dmg) {
	doFire(dir, wallerFireDmg());

	LAST_TURN_FIRE = getTurn();
}
bool ShieldDiceDragHandler::dragEnded(ActionDiceDragData* data,
                                      GameplayLayer* layer,
                                      DockableContainer* dockableContainer) {
  auto docked = false;
  
  auto sprite = data->getSprite();
  auto touch = data->getTouch();
  
  for (auto node : layer->getChildren()) {
    if (IS(node, ActionDiceSprite)) {
      auto diceSprite = (ActionDiceSprite*) node;
      auto dice = diceSprite->getDice();
      
      if (DiceUtil::isSwordDice(dice)) {
        auto rect = node->getBoundingBox();
        
        if (rect.containsPoint(touch->getLocation())) {
          node->setColor(Color3B::WHITE);
          
          auto swordAndShield = DiceFace::create(IMG_DICE_ACTION_SWORD_AND_SHIELD);
          dice->setSelectedFace(swordAndShield, false);
          
          docked = true;
          break;
        }
      }
    }
  }
  
  auto game = Game::getInstance();
  if (game->getDamageTaken() > 0) {
    auto character = game->getPlayer()->getCharacter();
    auto characterSprite = character->getSprite();
    
    auto rect = characterSprite->getBoundingBox();
    if (rect.containsPoint(touch->getLocation())) {
      auto turn = game->getTurn();
      if (IS(turn, PlayerTurn)) {
        auto playerTurn = (PlayerTurn*) turn;
        playerTurn->protectDamage(1);
      }
      docked = true;
    }
    
    auto scene = (GameplayScene*) layer->getScene();
    auto dungeonLayer = scene->getDungeonLayer();
    
    auto dungeonRoom = dungeonLayer->getRoomSpriteForCharacterCoordinate();
    
    characterSprite->setLocalZOrder(CHARACTER_DICE_Z_ORDER);
    characterSprite->setColor(Color3B::WHITE);
    
    auto position = characterSprite->getPosition() +
        Vec2(TILE_DIMENSION / 2, TILE_DIMENSION / 2) -
        dungeonRoom->getPosition() -
        dungeonLayer->getParent()->getPosition();
    characterSprite->setPosition(position);
    
    characterSprite->retain();
    characterSprite->removeFromParent();
    dungeonRoom->addChild(characterSprite);
    characterSprite->release();
  }
  
  if (docked) {
    layer->dockActionDice(sprite);
  }
  
  return docked;
}
UserColor UserColor::operator++() {
    ++turn;
    getTurn();
    return *this;
}