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.civilization.PlayerType
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.logic.trade.TradeLogic import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeOffer
import com.unciv.logic.trade.TradeType import com.unciv.logic.trade.TradeType
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.gamebasics.tech.Technology
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.getRandom import com.unciv.ui.utils.getRandom
import kotlin.math.min import kotlin.math.min
@ -26,20 +28,35 @@ class NextTurnAutomation{
} }
private fun exchangeTechs(civInfo: CivilizationInfo) { 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) val tradeLogic = TradeLogic(civInfo, otherCiv)
var ourGold = tradeLogic.ourAvailableOffers.first { it.type == TradeType.Gold }.amount
val ourTradableTechs = tradeLogic.ourAvailableOffers val ourTradableTechs = tradeLogic.ourAvailableOffers
.filter { it.type == TradeType.Technology } .filter { it.type == TradeType.Technology }
val theirTradableTechs = tradeLogic.theirAvailableOffers val theirTradableTechs = tradeLogic.theirAvailableOffers
.filter { it.type == TradeType.Technology } .filter { it.type == TradeType.Technology }
for (ourOffer in ourTradableTechs) { for (theirOffer in theirTradableTechs) {
val theirOfferList = theirTradableTechs.filter{ val theirValue = tradeLogic.evaluateOffer(theirOffer, false)
tradeLogic.evaluateOffer(ourOffer, false) >= tradeLogic.evaluateOffer(it, false) val ourOfferList = ourTradableTechs.filter{
&& !tradeLogic.currentTrade.theirOffers.contains(it) } tradeLogic.evaluateOffer(it, false) == theirValue
if (theirOfferList.isNotEmpty()) { && !tradeLogic.currentTrade.ourOffers.contains(it) }
tradeLogic.currentTrade.ourOffers.add(ourOffer)
tradeLogic.currentTrade.theirOffers.add(theirOfferList.getRandom()) 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
}
} }
} }