zdravim vie mi niekto pomocť a povedať mi prečo to nepočíta tak ako má? vopred dakujem za pomoc. som už z toho zufala.
//mnozstvo minci za jednu rudu
#define MINCA_ZA_RUDU1 1
//mnozstvo minci za jednu rudu ak nie je unaveny
#define MINCA_ZA_RUDU2 2
//maximalne mnozstvo jedla v inventari trpaslika
#define INV_MAX_JEDLO 10
//maximalna unava, po ktorej uz nepracuje
#define MAX_UNAVA 10
//pocet trpaslikov
#define POCET_TRPASLIKOV 1
//maximanla nuda
#define MAX_NUDA 10
//maximalne mnoystvo piva
#define MAX_PIVO 20
#include "defines.h"
#include <stdio.h>
#include <time.h>
typedef struct
{
int jedlo;
int pivo;
int ruda;
int mince;
} CENTRALNY_SKLAD;
typedef struct
{
int jedlo[INV_MAX_JEDLO];
int pivo[MAX_PIVO];
int unava[MAX_UNAVA];
int nuda[MAX_NUDA];
} INVENTAR_STAV;
typedef enum
{
ODDYCH = 1,
BANIK = 2,
REMESELNIK = 3,
KUCHAR = 4,
PIVOVARNIK = 5
} TypAkcie;
void trpaslik_generator (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
void vypis_skladu_stav(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int oddych(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int banik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int remeselnik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int kuchar(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int pivovarnik(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int centralna_distribucna_funkcia(TypAkcie typakcie,INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad);
int main()
{
int x = 0, i;
srand(time(NULL));
INVENTAR_STAV *inventar_stav;
CENTRALNY_SKLAD *centralny_sklad;
TypAkcie typakcie;
printf("********************Dwarf Fortress********************\n");
trpaslik_generator (&inventar_stav, ¢ralny_sklad);
for(i = 1; i <= 5; i++)
{
vypis_skladu_stav(&inventar_stav, ¢ralny_sklad);
printf("****************CYKLUS CISLO %d****************\n",i);
printf ("vykonala sa akcia: %d\n", typakcie = rand()%5+1) ;
printf ("akcia vratila hodnotu (0 - nepodarila sa akcia/1 - akcia sa podarila): %d\n",centralna_distribucna_funkcia(typakcie, &inventar_stav, ¢ralny_sklad));
vypis_skladu_stav(&inventar_stav, ¢ralny_sklad);
}
return 0;
}
void trpaslik_generator (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
srand(time(NULL));
centralny_sklad->jedlo = 100;
centralny_sklad->pivo = 100;
centralny_sklad->ruda = 50;
centralny_sklad->mince = 50;
for (i = 1; i <= POCET_TRPASLIKOV; i++)
{
inventar_stav->jedlo[i] = 0;
inventar_stav->pivo[i] = 0;
inventar_stav->unava[i] = 0;
inventar_stav->nuda[i] = 0;
}
for (i = 1; i <= POCET_TRPASLIKOV; i++)
{
inventar_stav->jedlo[i] = rand()%10 + 1; /* generovanie nahodneho cisla v rozsahu 1 - 10 */
inventar_stav->pivo[i] = rand()%10 + 1;
inventar_stav->unava[i] = rand()%10 + 1;
inventar_stav->nuda[i] = rand()%10 + 1;
}
}
void vypis_skladu_stav(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
for (i = 1; i <= POCET_TRPASLIKOV; i++)
{
printf ("----------------trpaslik %d---------------------\n",i);
printf ("CENTRALNY SKLAD: jedlo: %d\tpivo: %d\truda: %d\t\tmince: %d\n",centralny_sklad->jedlo, centralny_sklad->pivo, centralny_sklad->ruda, centralny_sklad->mince);
printf ("INVENTAR STAV: jedlo: %d\tpivo: %d\t\tunava: %d\t\tnuda: %d\n\n",inventar_stav->jedlo[i], inventar_stav->pivo[i], inventar_stav->unava[i], inventar_stav->nuda[i]);
}
}
int oddych(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
int tmp = 0;
for(i = 1; i <= POCET_TRPASLIKOV; i++ )
{
inventar_stav->nuda[i] = 0;
inventar_stav->unava[i] = 0;
if (centralny_sklad->jedlo >= INV_MAX_JEDLO && centralny_sklad->pivo >= MAX_PIVO)
{
tmp = INV_MAX_JEDLO - sizeof(inventar_stav->jedlo[i]);
centralny_sklad->jedlo -= tmp;
inventar_stav->jedlo[i] += tmp;
tmp = 0;
tmp = MAX_PIVO - sizeof(inventar_stav->pivo[i]);
centralny_sklad->pivo -= tmp;
inventar_stav->pivo[i] += tmp;
}
else return 0;
}
return 1;
}
int banik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
for(i = 1; i <= POCET_TRPASLIKOV; i++ )
{
if (inventar_stav->jedlo[i] > 0 && inventar_stav->jedlo[i] <= INV_MAX_JEDLO || inventar_stav->pivo[i] > 0 && inventar_stav->pivo[i] <= MAX_PIVO || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] <= MAX_UNAVA)
{
inventar_stav->jedlo[i]--;
inventar_stav->pivo[i]--;
inventar_stav->unava[i]++;
(inventar_stav->unava[i] <= 5) ? (centralny_sklad->ruda += 2) : (centralny_sklad->ruda++);
}
else return 0;
}
return 1;
}
int remeselnik (INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
for(i = 1; i <= POCET_TRPASLIKOV; i++ )
{
if (inventar_stav->jedlo[i] > 0 && inventar_stav->jedlo[i] <= INV_MAX_JEDLO || inventar_stav->pivo[i] > 0 && inventar_stav->pivo[i] <= MAX_PIVO || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] <= MAX_UNAVA)
{
inventar_stav->jedlo[i]--;
inventar_stav->pivo[i]--;
inventar_stav->unava[i]++;
(inventar_stav->unava[i] <= 5) ? (centralny_sklad->mince += MINCA_ZA_RUDU2) : (centralny_sklad->mince += MINCA_ZA_RUDU1);
}
else return 0;
}
return 1;
}
int kuchar(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
for(i = 1; i <= POCET_TRPASLIKOV; i++ )
{
if (inventar_stav->nuda[i] >= 0 && inventar_stav->nuda[i] < MAX_NUDA || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] < MAX_UNAVA || centralny_sklad->mince >= 30)
{
inventar_stav->nuda[i]++;
(centralny_sklad->mince >= 30) ? ((centralny_sklad->jedlo += centralny_sklad->jedlo) && (inventar_stav->unava[i]-- )) : (centralny_sklad->jedlo++);
}
else return 0;
}
return 1;
}
int pivovarnik(INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
int i;
for(i = 1; i <= POCET_TRPASLIKOV; i++ )
{
if (inventar_stav->nuda[i] >= 0 && inventar_stav->nuda[i] < MAX_NUDA || inventar_stav->unava[i] >= 0 && inventar_stav->unava[i] < MAX_UNAVA || centralny_sklad->mince >= 30)
{
inventar_stav->nuda[i]--;
inventar_stav->unava[i]--;
(inventar_stav->unava[i] <= 5 && inventar_stav->nuda[i] <= 5) ? ((centralny_sklad->pivo += MINCA_ZA_RUDU2) && (centralny_sklad->mince -= MINCA_ZA_RUDU2)) : ((centralny_sklad->pivo += MINCA_ZA_RUDU1) && (centralny_sklad->mince -= MINCA_ZA_RUDU1));
}
else return 0;
}
return 1;
}
int centralna_distribucna_funkcia(TypAkcie typakcie,INVENTAR_STAV *inventar_stav, CENTRALNY_SKLAD *centralny_sklad)
{
// int akcia1, akcia2, akcia3, akcia4, akcia5ô
int akcia = 0;
switch (typakcie)
{
case ODDYCH:
akcia = oddych(&inventar_stav, ¢ralny_sklad) ;
break; //jaky sakra samostatny zaznam chce
case BANIK:
akcia = banik (&inventar_stav, ¢ralny_sklad) ;
break;
case REMESELNIK:
akcia = (remeselnik (&inventar_stav, ¢ralny_sklad)) ;
break;
case KUCHAR:
akcia = (kuchar(&inventar_stav, ¢ralny_sklad)) ;
break;
case PIVOVARNIK:
akcia = (pivovarnik(&inventar_stav, ¢ralny_sklad)) ;
break;
default:
break;
}
return akcia;
}