AI exchange techs strategy change.

This commit is contained in:
Duan Tao 2019-01-22 13:08:17 +08:00
parent d11cb4779b
commit 53c0bbb0a3

View File

@ -5,9 +5,11 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.PlayerType
import com.unciv.logic.map.MapUnit
import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeOffer
import com.unciv.logic.trade.TradeType
import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tech.Technology
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.getRandom
import kotlin.math.min
@ -26,20 +28,35 @@ class NextTurnAutomation{
}
private fun exchangeTechs(civInfo: CivilizationInfo) {
for (otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filter { it.playerType == PlayerType.AI }.sortedBy { it.tech.techsResearched.size }) {
val otherCivList = civInfo.diplomacy.values.map { it.otherCiv() }.
filter { it.playerType == PlayerType.AI && !it.isBarbarianCivilization() }.
sortedBy { it.tech.techsResearched.size }
for (otherCiv in otherCivList) {
val tradeLogic = TradeLogic(civInfo, otherCiv)
var ourGold = tradeLogic.ourAvailableOffers.first { it.type == TradeType.Gold }.amount
val ourTradableTechs = tradeLogic.ourAvailableOffers
.filter { it.type == TradeType.Technology }
val theirTradableTechs = tradeLogic.theirAvailableOffers
.filter { it.type == TradeType.Technology }
for (ourOffer in ourTradableTechs) {
val theirOfferList = theirTradableTechs.filter{
tradeLogic.evaluateOffer(ourOffer, false) >= tradeLogic.evaluateOffer(it, false)
&& !tradeLogic.currentTrade.theirOffers.contains(it) }
if (theirOfferList.isNotEmpty()) {
tradeLogic.currentTrade.ourOffers.add(ourOffer)
tradeLogic.currentTrade.theirOffers.add(theirOfferList.getRandom())
for (theirOffer in theirTradableTechs) {
val theirValue = tradeLogic.evaluateOffer(theirOffer, false)
val ourOfferList = ourTradableTechs.filter{
tradeLogic.evaluateOffer(it, false) == theirValue
&& !tradeLogic.currentTrade.ourOffers.contains(it) }
if (ourOfferList.isNotEmpty()) {
tradeLogic.currentTrade.ourOffers.add(ourOfferList.getRandom())
tradeLogic.currentTrade.theirOffers.add(theirOffer)
} else {
//try to buy tech with money, not spending more than 1/3 of treasury
if (ourGold / 3 >= theirValue)
{
tradeLogic.currentTrade.ourOffers.add(TradeOffer("Gold".tr(), TradeType.Gold, 0, theirValue))
tradeLogic.currentTrade.theirOffers.add(theirOffer)
ourGold -= theirValue
}
}
}