aboutsummaryrefslogtreecommitdiff
path: root/ai_weights.c
diff options
context:
space:
mode:
authorNathan Vance <nathav63@gmail.com>2015-07-27 19:15:59 -0400
committerNathan Vance <nathav63@gmail.com>2015-07-27 19:15:59 -0400
commit06818a49b337ef5d3277ebf6ed0b3f13a88239d3 (patch)
tree500f311c25ac68fc9a3b8429bf0747572e4d3e69 /ai_weights.c
parentfixed bugs and formatting errors (diff)
download7w-06818a49b337ef5d3277ebf6ed0b3f13a88239d3.tar.gz
7w-06818a49b337ef5d3277ebf6ed0b3f13a88239d3.tar.bz2
7w-06818a49b337ef5d3277ebf6ed0b3f13a88239d3.zip
Updated to work with gcc 5.X
Diffstat (limited to 'ai_weights.c')
-rw-r--r--ai_weights.c254
1 files changed, 125 insertions, 129 deletions
diff --git a/ai_weights.c b/ai_weights.c
index 23b25e1..0cc8e93 100644
--- a/ai_weights.c
+++ b/ai_weights.c
@@ -1,146 +1,142 @@
#include "7w.h"
-int data_getdir(int dir, int p); //0 is east, 1 is west, 2 returns player
-int* cards_getproduction(int era, int card);
-int* cards_getcost(int era, int card);
-int data_canafford(int p, int era, int card);
-int** data_getindefinites(int p);
-int* data_gettradables(int p);
-int data_productiontype(int e, int card);
-int data_getwonderstages(int p);
-int data_getwonder(int p);
-int data_getnextwonderstage(int p);
-int* get_special(int era, int card, int player);
-int get_trade(int player, int type, int direction);
-int cards_gettype(int era, int card);
-int* get_science(int player);
-int* get_special(int era, int card, int player);
-int* get_intarray(int size);
-int data_potentialvps(int p, int era, int card);
-int data_gettotvps(int p);
-int military_might(int player);
-int* ai_trade(int player, int era, int card);
-
-int weight_science(int era, int card, int player)
-{
- int weight = 0;
- int *science = get_science(player);
- int min = 100;
- int max = 0;
- int i, j;
- for(i = 0; i < 3; i++) {
- if(science[i] < min)
- min = science[i];
- if(science[i] > max)
- max = science[i];
- }
- if(era > 0 && max == 0) return 0;
- int *prod = cards_getproduction(era, card);
- for(i = COMPASS; prod[i] == 0; i++);
- i -= COMPASS;
- if(science[i] == min) weight = 5;
- int tots[3];
- for(i = 0; i < 3; i++) tots[i] = 0;
- for(i = 0; i < 3; i++) {
- science = get_science(data_getdir(i, player));
- for(j = 0; j < 3; j++) {
- tots[i] != science[j];
- }
- }
- if(tots[2] < tots[0]-1 || tots[2] < tots[1]-1) weight -= 3;
- return weight;
+int weight_science(int era, int card, int player) {
+ int weight = 0;
+ int science[3];
+ get_science(player, science);
+ int min = 100;
+ int max = 0;
+ int i, j;
+ for (i = 0; i < 3; i++) {
+ if (science[i] < min)
+ min = science[i];
+ if (science[i] > max)
+ max = science[i];
+ }
+ if (era > 0 && max == 0)
+ return 0;
+ int prod[NUMPRODUCTS];
+ cards_getproduction(era, card, prod);
+ for (i = COMPASS; prod[i] == 0; i++)
+ ;
+ i -= COMPASS;
+ if (science[i] == min)
+ weight = 5;
+ int tots[3];
+ for (i = 0; i < 3; i++)
+ tots[i] = 0;
+ for (i = 0; i < 3; i++) {
+ get_science(data_getdir(i, player), science);
+ for (j = 0; j < 3; j++) {
+ tots[i] += science[j];
+ }
+ }
+ if (tots[2] < tots[0] - 1 || tots[2] < tots[1] - 1)
+ weight -= 3;
+ return weight;
}
-int weight_military(int era, int card, int player)
-{
- int weight = 0;
- int military = cards_getproduction(era, card)[SHIELD];
- int strength[3];
- int i;
- for(i = 0; i < 3; i++)
- strength[i] = military_might(data_getdir(i, player));
- for(i = 0; i < 2; i++) {
- if(strength[i] >= strength[2] && strength[i] < strength[2] + military)
- weight += (era+2)*2;
- if(strength[i] == strength[2] + military)
- weight += (era+1)*2;
- if(strength[i] < strength[2])
- weight += 5 / (strength[2]-strength[i]);
- }
- return weight;
+int weight_military(int era, int card, int player) {
+ int weight = 0;
+ int prod[NUMPRODUCTS];
+ int military = cards_getproduction(era, card, prod)[SHIELD];
+ int strength[3];
+ int i;
+ for (i = 0; i < 3; i++)
+ strength[i] = military_might(data_getdir(i, player));
+ for (i = 0; i < 2; i++) {
+ if (strength[i] >= strength[2] && strength[i] < strength[2] + military)
+ weight += (era + 2) * 2;
+ if (strength[i] == strength[2] + military)
+ weight += (era + 1) * 2;
+ if (strength[i] < strength[2])
+ weight += 5 / (strength[2] - strength[i]);
+ }
+ return weight;
}
-int weight_resource(int era, int card, int player)
-{
- int weight = 0;
- int *prod = cards_getproduction(era, card);
- int trade[GOLD+1];
- arraycpy(data_gettradables(player), trade, GOLD+1);
- int i, j;
- for(i = 0; i < GOLD; i++) {
- if(prod[i] && !trade[i]) weight += 5;
- if(prod[i] && (i == STONE || i == ORE) && trade[i] < 2) weight += 2;
- }
- for(j = 0; j < 2; j++) {
- arraycpy(data_gettradables(data_getdir(j, player)), trade, GOLD+1);
- for(i = 0; i < GOLD; i++) {
- if(prod[i] && !trade[i]) weight++;
- if(prod[i] && trade[i] && get_trade(player, i, j) == 1) weight--;
- }
- }
- return weight;
+int weight_resource(int era, int card, int player) {
+ int weight = 0;
+ int prod[NUMPRODUCTS];
+ cards_getproduction(era, card, prod);
+ int trade[GOLD + 1];
+ data_gettradables(player, trade);
+ int i, j;
+ for (i = 0; i < GOLD; i++) {
+ if (prod[i] && !trade[i])
+ weight += 5;
+ if (prod[i] && (i == STONE || i == ORE) && trade[i] < 2)
+ weight += 2;
+ }
+ for (j = 0; j < 2; j++) {
+ data_gettradables(data_getdir(j, player), trade);
+ for (i = 0; i < GOLD; i++) {
+ if (prod[i] && !trade[i])
+ weight++;
+ if (prod[i] && trade[i] && get_trade(player, i, j) == 1)
+ weight--;
+ }
+ }
+ return weight;
}
int weight_tradingpost(int dir, int player);
int weight_marketplace(int player);
int weight_gold(int gold, int player);
-int weight_commercial(int era, int card, int player)
-{
- if(era == 0) {
- if(card == 17) return weight_gold(4, player);
- if(card == 18) return weight_tradingpost(0, player);
- if(card == 19) return weight_tradingpost(1, player);
- if(card == 20) return weight_marketplace(player);
- }
- if(era == 1) {
- if(card == 11 || card == 12) return weight_resource(era, card, player);
- if(card == 13 || card == 14) return weight_gold(get_special(era, card, player)[1], player);
-
- }
- return 0;
+int weight_commercial(int era, int card, int player) {
+ if (era == 0) {
+ if (card == 17)
+ return weight_gold(4, player);
+ if (card == 18)
+ return weight_tradingpost(0, player);
+ if (card == 19)
+ return weight_tradingpost(1, player);
+ if (card == 20)
+ return weight_marketplace(player);
+ }
+ if (era == 1) {
+ if (card == 11 || card == 12)
+ return weight_resource(era, card, player);
+ if (card == 13 || card == 14)
+ return weight_gold(get_special(era, card, player)[1], player);
+
+ }
+ return 0;
}
-int weight_buildcard(int era, int card, int player)
-{
- int weight = data_potentialvps(player, era, card);
- weight -= data_gettotvps(player);
- if(cards_gettype(era, card) == STRUCTURE); //already done
- if(cards_gettype(era, card) == MILITARY)
- weight += weight_military(era, card, player);
- if(era == 2) return weight;
- if(cards_gettype(era, card) == SCIENTIFIC)
- weight += weight_science(era, card, player);
- if(cards_gettype(era, card) == RESOURCE || cards_gettype(era, card) == INDUSTRY)
- weight += weight_resource(era, card, player);
- if(cards_gettype(era, card) == COMMERCIAL)
- weight += weight_commercial(era, card, player);
- return weight;
+int weight_buildcard(int era, int card, int player) {
+ int weight = data_potentialvps(player, era, card);
+ weight -= data_gettotvps(player);
+ //if (cards_gettype(era, card) == STRUCTURE); already done
+ if (cards_gettype(era, card) == MILITARY)
+ weight += weight_military(era, card, player);
+ if (era == 2)
+ return weight;
+ if (cards_gettype(era, card) == SCIENTIFIC)
+ weight += weight_science(era, card, player);
+ if (cards_gettype(era, card) == RESOURCE
+ || cards_gettype(era, card) == INDUSTRY)
+ weight += weight_resource(era, card, player);
+ if (cards_gettype(era, card) == COMMERCIAL)
+ weight += weight_commercial(era, card, player);
+ return weight;
}
-int* weight_buildwonder(int player)
-{
- int *trade = get_intarray(3);
- static int ret[4];
- ret[0] = (data_getwonderstages(player)+2) * 2;
- ret[1] = ret[2] = ret[3] = 0;
- if(data_canafford(player, data_getwonder(player), data_getnextwonderstage(player)) != 1) {
- trade = ai_trade(player, data_getwonder(player), data_getnextwonderstage(player));
- if(trade[2]) ret[0] -= trade[2] / 3;
- else ret[0] = 0;
- ret[1] = trade[0];
- ret[2] = trade[1];
- ret[3] = trade[2];
- }
- return ret;
+int* weight_buildwonder(int player, int ret[4]) {
+ int trade[3];
+ ret[0] = (data_getwonderstages(player) + 2) * 2;
+ ret[1] = ret[2] = ret[3] = 0;
+ if (data_canafford(player, data_getwonder(player),
+ data_getnextwonderstage(player)) != 1) {
+ ai_trade(player, data_getwonder(player), data_getnextwonderstage(player), trade);
+ if (trade[2])
+ ret[0] -= trade[2] / 3;
+ else
+ ret[0] = 0;
+ ret[1] = trade[0];
+ ret[2] = trade[1];
+ ret[3] = trade[2];
+ }
+ return ret;
}
bgstack15