This repository was archived by the owner on Apr 26, 2024. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathmain.cpp
More file actions
153 lines (113 loc) · 6.45 KB
/
Copy pathmain.cpp
File metadata and controls
153 lines (113 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*! \mainpage Opis
DOKUMENTACJA PROJEKTU JUNGLEMAN
========================================
Popiel Michał Wojciech
Program — survival mieszczucha w dżungli.
-----------------------------------------
Mieszczuch, posiadający kilka całkowicie zaspokojonych potrzeb, ( zdrowie, głód, pragnienie, sen ) zostaje porzucony w dżungli. Minie 30 dni(tur, kolejek) zanim odnajdzie go ekipa ratunkowa. Jego zadaniem jest przeżyć do tego momentu. Wraz z upływem czasu mieszczuch bardzo szybko zaczyna potrzebować jedzenia, snu, schronienia itd.
Podejmuje więc różne akcje takie jak _poszukiwanie jedzenia_, _poszukiwanie schronienia_ itp. zależne od tego czego mu w danym momencie najbardziej brakuje, a także od pory dnia. Akcje mogą zakończyć się powodzeniem lub fiaskiem z odpowiednim prawdopodobieństwem. W przeżyciu mieszczucha przeszkadzają najróżniejsze zdarzenia losowe:
- dzikie zwierzęta,
- zanieczyszczona woda,
- kanibale
- itd.
Mogące wystąpić z odpowiednim prawdopodobieństwem w zależności od akcji mieszczucha i pory dnia.
Program wyświetla podsumowania codziennego zmagania mieszczucha z przyrodą wraz z informacją czy udało mu się przeżyć.
*/
/*! \file main.cpp
\brief Główny plik wykonywalny.
*/
#include "human.h"
#include "action.h"
#include "nature.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <fstream>
#include <sstream>
#include <ctime>
#include <unistd.h>
using namespace std;
//! Funkcja wyświetlająca raport o śmierci.
/*! Tylko jeśli zginie. Przyjmuje parametry:
\param day numer dnia
\param daytime porę dnia
\param killer ostatnią reakcję natury
\param action ostatnią akcję człowieka.
*/
void death_announcement(int day,int daytime,string killer,string action);
//! Funkcja wyświetlająca informację o przetrwaniu człowieka.
/*! Tylko jeśli przeżyje 30 dni.
*/
void alive_announcement();
//! Funkcja która ładuje wektory akcji i akcji długoterminowych dla Natury i Człowieka.
/*! Przyjmuje parametry:
\param natureActions wskaźnik na wektor akcji natury
\param humanActions wskaźnik na wektor akcji człowieka
\param longtermActions wskaźnik na wektor akcji długoterminowych natury
\param filename nazwa pliku z bazą danych.
*/
void get_me_some_action(vector<action>*natureActions,vector<action>*humanActions,vector<longaction>*longtermActions,string filename);
//! Główna funkcja programu.
/*! Nadaje warunki początkowe (wywołuje konstruktory klas Człowiek i Natura, uzupełnia wektory akcjami z bazy danych),
zawiera pętlę czynności które wykonuje człowiek w ciągu dnia. Pętla powtarza się 30 razy (30 dni).
Funkcja main() zawiera też odwołania do funkcji wyświetlających informacje o zgonie / przeżyciu człowieka.
Przyjmuje argumenty:
\param argc określa liczbę argumentów
\param argv kolejne argumenty:
- nazwa pierwszej bazy danych (akcji)
- nazwa drugiej bazy danych (akcji długoterminowych)
- liczba określająca wartość początkową statystk Człowieka.
*/
int main(int argc, char const *argv[])
{
srand( time( NULL ) );
int k = atoi(argv[3]);
string filename1 = argv[1];
string filename2 = argv[2];
int basic_stats[]={k,k,k,k};
human Idler(basic_stats,0); //tworze czlowieka "Idler"
get_me_some_action(nature::jungle()->set_jungle_response(),Idler.set_human_action(),nature::jungle()->set_long_term_conditions(),filename1); //-----------ładuje wektor akcji dla czlowieka i dla natury
get_me_some_action(nature::jungle()->set_jungle_response(),Idler.set_human_action(),nature::jungle()->set_long_term_conditions(),filename2); //-----------ładuje wektor longakcji
unsigned int uslp=500000;
for(int i=0;i<30;i++) //30 dni
{
nature::jungle()->set(1,0,0); //nowy dzien,czas na nowa kryjowke: (day,afternoon,safeplace)
//głód
if(i!=0)Idler.organism(0);
//poranne staty
if(!Idler.check_status(k)) death_announcement(i,nature::jungle()->get_daytime(),nature::jungle()->get_killer(),Idler.get_last_human_action()->get_action_name());
Idler.show_stats(i,nature::jungle()->get_daytime());
usleep(uslp);
//robi cos rano
Idler.do_something(nature::jungle()->get_daytime(),Idler.get_human_action( Idler.think(nature::jungle()->get_daytime(),nature::jungle()->get_afternoon()) ),nature::jungle()->get_safe_place(),nature::jungle()->random_nature_response());
if(Idler.get_longterm_success_h()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_human_action()));
if(Idler.get_longterm_success_n()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_nature_response()));
usleep(uslp);
if(!Idler.check_status(k)) death_announcement(i,nature::jungle()->get_daytime(),nature::jungle()->get_killer(),Idler.get_last_human_action()->get_action_name());
//i popoludniem (zwraca safe place jesli takie znajdzie)
nature::jungle()->set(1,1,Idler.do_something(nature::jungle()->get_daytime(),Idler.get_human_action(Idler.think(nature::jungle()->get_daytime(),1) ),nature::jungle()->get_safe_place(),nature::jungle()->random_nature_response()));
if(Idler.get_longterm_success_h()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_human_action()));
if(Idler.get_longterm_success_n()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_nature_response()));
usleep(uslp);
if(!Idler.check_status(k)) death_announcement(i,nature::jungle()->get_daytime(),nature::jungle()->get_killer(),Idler.get_last_human_action()->get_action_name());
//noc
nature::jungle()->set(2,0,3);
//senność
Idler.organism(1);
//robi cos w nocy
Idler.do_something(nature::jungle()->get_daytime(),Idler.get_human_action(Idler.think(nature::jungle()->get_daytime(),nature::jungle()->get_afternoon()) ),nature::jungle()->get_safe_place(),nature::jungle()->random_nature_response());
if(Idler.get_longterm_success_h()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_human_action()));
if(Idler.get_longterm_success_n()) Idler.effect_cause(nature::jungle()->get_longaction(Idler.get_last_nature_response()));
usleep(uslp);
Idler.longterm(); //sprawdza co tam sobie siedzi w wektorze longakcji
//staty na dobranoc
if(!Idler.check_status(k)) death_announcement(i,nature::jungle()->get_daytime(),nature::jungle()->get_killer(),Idler.get_last_human_action()->get_action_name());
Idler.show_stats(i,nature::jungle()->get_daytime());
usleep(uslp);
Idler.learn(1); //codziennie troche mądrzejszy
if(i==29)alive_announcement();
usleep(2000000);
}
return 0;
}