Refactored everything to use arrays and enumerations...

This commit is contained in:
Ognjen Milan Robovic 2024-06-16 08:13:27 -04:00
parent dcf1480dc8
commit f6e9aff61b

100
xerbia.c
View File

@ -1,87 +1,55 @@
#include <xolatile/xtandard.c>
static int wheat = 600,
gold = 600,
wood = 600,
stone = 600;
enum { wheat, gold, wood, stone, resources };
enum { granary, mine, storehouse, quarry, constructions };
static int granaries = 1,
mines = 1,
storehouses = 1,
quarries = 1;
static int resource [resources] = { 600, 300, 300, 300 };
static int construction [constructions] = { 1, 1, 1, 1 };
static int check_resource (int have, int need, char * name) {
if (have < need) {
print ("You have only /3%i %s/- and you need /3%i/-, meaning that you miss /1%i/- more.\n", have, name, need, need - have);
static char * resource_name [] = { "wheat", "gold", "wood", "stone" };
static char * construction_name [] = { "granary", "mine", "storehouse", "quarry" };
return (true);
static int construction_cost [constructions] [resources] = {
{ 0, 10, 60, 30 },
{ 0, 120, 60, 10 },
{ 0, 30, 10, 60 },
{ 0, 60, 30, 10 }
};
static void build_construction (int index) {
int cost;
for (cost = 0; cost < resources; ++cost) {
if (resource [cost] < construction_cost [index] [cost]) {
print ("You have only /3%i %s/- and you need /3%i/-, meaning that you miss /1%i/- more.\n", resource [cost], resource_name [cost], construction_cost [index] [cost], construction_cost [index] [cost] - resource [cost]);
print ("Your architects humbly refused to build %s, while complaining about lacking the resources for that.\n", construction_name [index]);
return;
}
}
return (false);
}
static void build_granary (void) {
if (check_resource (gold, 10, "gold") || check_resource (wood, 60, "wood") || check_resource (stone, 30, "stone")) {
print ("Your architects humbly refused to build the /1granary/-, complaining about lacking the resources for that.\n");
} else {
gold -= 10;
wood -= 60;
stone -= 30;
print ("/2Granary/- that you ordered to be built was finished without issues, now you have /2%i/- granaries.\n", ++granaries);
for (cost = 0; cost < resources; ++cost) {
resource [cost] -= construction_cost [index] [cost];
}
}
static void build_mine (void) {
if (check_resource (gold, 120, "gold") || check_resource (wood, 60, "wood") || check_resource (stone, 30, "stone")) {
print ("Your architects humbly refused to build the /1mine/-, complaining about lacking the resources for that.\n");
} else {
gold -= 120;
wood -= 60;
stone -= 30;
construction [index] += 1;
print ("/2Mine/- that you ordered to be built was finished without issues, now you have /2%i/- mines.\n", ++mines);
}
}
static void build_storehouse (void) {
if (check_resource (gold, 30, "gold") || check_resource (wood, 10, "wood") || check_resource (stone, 60, "stone")) {
print ("Your architects humbly refused to build the /1storehouse/-, complaining about lacking the resources for that.\n");
} else {
gold -= 30;
wood -= 10;
stone -= 60;
print ("/2Storehouse/- that you ordered to be built was finished without issues, now you have /2%i/- storehouses.\n", ++storehouses);
}
}
static void build_quarry (void) {
if (check_resource (gold, 60, "gold") || check_resource (wood, 30, "wood") || check_resource (stone, 10, "stone")) {
print ("Your architects humbly refused to build the /1quarry/-, complaining about lacking the resources for that.\n");
} else {
gold -= 60;
wood -= 30;
stone -= 10;
print ("/2Quarry/- that you ordered to be built was finished without issues, now you have /2%i/- quarries.\n", ++quarries);
}
print ("Construction that you ordered to be built was finished without issues.\n", construction [index]);
}
static void print_resources (void) {
print ("Wheat = %i\n", wheat);
print ("Gold = %i\n", gold);
print ("Wood = %i\n", wood);
print ("Stone = %i\n", stone);
print ("Wheat = %i\n", resource [wheat]);
print ("Gold = %i\n", resource [gold]);
print ("Wood = %i\n", resource [wood]);
print ("Stone = %i\n", resource [stone]);
}
int main (void) {
print_resources ();
build_granary ();
build_mine ();
build_storehouse ();
build_quarry ();
build_construction (granary);
build_construction (mine);
build_construction (storehouse);
build_construction (quarry);
print_resources ();