1 package org.woehlke.computer.kurzweil.tabs.simulatedevolution.model;
2
3 import lombok.EqualsAndHashCode;
4 import lombok.ToString;
5 import lombok.extern.log4j.Log4j2;
6
7
8
9
10
11
12
13
14
15
16
17
18
19 @Log4j2
20 @ToString
21 @EqualsAndHashCode
22 public class LifeCycle {
23
24
25
26
27 private int fat;
28
29
30
31
32 private int age;
33
34
35
36
37 private int hunger;
38
39
40
41
42
43 private final static int MAX_FAT = 2000;
44
45
46
47
48 private final static int MAX_HUNGER = 1000;
49
50
51
52
53 private final static int FULL_AGE = 200;
54
55
56
57
58 private final static int FAT_MINIMUM_FOR_SEX = 800;
59
60
61
62
63 private final static int FAT_AT_BIRTH = 500;
64
65
66
67
68 private final static int FAT_PER_FOOD = 25;
69
70
71
72
73 private final static int OLD_AGE = 800;
74
75
76 private final static int MAX_AGE = 1000;
77
78 public LifeCycle() {
79 hunger = 0;
80 age = 0;
81 fat = FAT_AT_BIRTH;
82 }
83
84 public LifeCycle(int fatAtBirth) {
85 hunger = 0;
86 age = 0;
87 fat = fatAtBirth;
88 }
89
90
91
92
93
94 public boolean move() {
95 age++;
96 if (fat > 0) {
97 fat--;
98 return true;
99 } else {
100 hunger++;
101 return false;
102 }
103 }
104
105
106
107
108 public void haveSex() {
109 fat /= 2;
110 age = 0;
111 }
112
113
114
115
116 public boolean isPregnant() {
117 return (age >= FULL_AGE) && (fat >= FAT_MINIMUM_FOR_SEX);
118 }
119
120
121
122
123 public boolean isDead() {
124 return (hunger >= MAX_HUNGER) || (age >= MAX_AGE);
125 }
126
127
128
129
130 public void eat(int food) {
131 if (fat + food* FAT_PER_FOOD <= MAX_FAT) {
132 fat += food* FAT_PER_FOOD;
133 } else {
134 fat = MAX_FAT;
135 }
136 }
137
138 public int getFat() {
139 return fat;
140 }
141
142 public LifeCycleStatus getLifeCycleStatus(){
143 if(fat==0 && hunger>=0){
144 return LifeCycleStatus.HUNGRY;
145 }
146 if(age<FULL_AGE){
147 if(fat< FAT_MINIMUM_FOR_SEX){
148 return LifeCycleStatus.YOUNG;
149 } else {
150 return LifeCycleStatus.YOUNG_AND_FAT;
151 }
152 } else {
153 if (age<OLD_AGE) {
154 return LifeCycleStatus.FULL_AGE;
155 } else {
156 if (age < MAX_AGE) {
157 return LifeCycleStatus.OLD;
158 } else {
159 return LifeCycleStatus.DEAD;
160 }
161 }
162 }
163 }
164 }