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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
# Задачи - УПП, Седмица 14, 19.01.2024
\n
GitHub classroom: [url https://classroom.github.com/a/B08TtnnW classroom.github.com/a/B08TtnnW]
Това е последния практикум, затова ви давам по-лесни и приятни задачи: имплементации на игри!
Всичките са взети от [url https://en.wikipedia.org/wiki/BASIC_Computer_Games 101 BASIC Computer Games] (книгата е налична в [url https://archive.org/details/bitsavers_decBooks10Mar75_26006648 archive.org]).
Разбира се, който иска, може да решава задачи от предходни практикуми, давал съм достатъчно задачи.
## 1 задача - Ним
Ним е една много стара игра за два играча.
В произволен брой купчини са сложени произволен брой предмети (предметите не се различават, примерно камъни или пръчки).
Алтернативно, всеки играч взема някакъв брой (поне един) предмети от една купчина.
Играчът който вземе последния предмет печели.
В нашия вариант, предметите са пръчки.
Компютъра автоматично (и случайно) генерира между 5 и 20 купчини с между 1 и 10 пръчки.
Разбира се, трябва компютъра да съобщи за конкретните стойности:
```terminal
X piles
Y sticks in pile 1
Z sticks in pile 2
[...]
K sticks in pile X
След това се редуват, първия играч, втория играч:
```terminal
Player 1 turn
Избирате купчина с пръчки:
```terminal
Which pile do you want sticks from? _
където _ е мястото на курсора.
След това броя пръчки от купчината:
```terminal
How many sticks? _
Ако някоя стойност е невалидна, питате пак.
След това идва редът на втория играч:
```terminal
Player 2 turn
Накрая, този който вземе последната пръчка печели играта и се пита дали искате наново да почнете играта:
```terminal
Player X won. Do you want to play again? _
## 2 задача - Хамураби
Вие играете като древния Вавилонски цар Хамураби над своя малък град.
Управлявате три ресурса във вашето царство: хора, земя и жито.
Имате власт 10 години, обаче обществото може да ви изгони и преди това.
Не е от голямо значение да знаете, но акър земя е приблизително 4000 квадратни метра, а бушел жито е приблизително 4 килограма жито.
В началото вашия съветник казва:
```terminal
Hamurabi, I beg to report to you
In year X, Y people starved, Z came to the city.
Разбира се, X, Y и Z са положителни целочислени стойности.
По-късно ще определим как се изменят и какви са началните стойности.
След това имате 1/7 шанс чума да сполети вашия град.
Ако се случи, съветника ви съобщава за това и загубвате половината си население:
```terminal
A horrible plague struck! Half of the people died.
След това съветника ви дава информация за града:
```terminal
Population is now X.
The city now owns X acres.
You harvested Z bushels per acre.
Rats ate K bushels.
You now have L bushels in store.
Разбира се, X, Y, Z, K и L са целочислени стойности.
Ако тази информация е в последната година от вашето царуване, играта свършва и получавате мнението на населението за вас.
Иначе, сега съветника започва да ви дава информация и да ви пита за вашето действие:
```terminal
Land is trading at X bushels per acre.
How many acres do you wish to buy? _
Където X е произволно цяло число между 17 и 27, долна черта показва мястото на курсора.
Трябва да се въведе цяло число.
В този случай, както и всеки други, ако то е отрицателно, съветника напуска и играта свършва:
```terminal
Hamurabi, I cannot do what you wish, get yourself another steward!!!!!
So long for now.
Последния ред винаги се показва, когато играта свърши.
Ако нямате достатъчно бушели в резерв, за да купите всичката въведена земя, съветника ви казва:
```terminal
Hamurabi, think again, you have only X bushels of grian. Now then,
и същото съобщение за "Land is trading at [...] How many acres ..." се изписва и приемате нов вход.
Ако сте въвели 0, значи искате да продавате земя и съветника ви пита:
```terminal
How many acres do you wish to sell? _
Ако се въведе отрицателно число, случва се същото като при купуване на земя.
Ако въведете повече земя, отколкото имате, съветника казва:
```terminal
Hamurabi think again, you own only X acres. Now then,
и пак пита "How many acres [...]".
След като сте купили или продали земя, сега съветника ви пита колко бушели жито ще отделите за нахранване на населението:
```terminal
How many bushels do you wish to feed your people? _
Ако се въведе твърде голямо число, съветника предупреждава и пита пак:
```terminal
Hamurabi, think again, you have only X bushels of grain. Now then,
How many bushels do you wish to feed your people? _
Остава последния въпрос от съветника за годината:
```terminal
How many acres do you wish to plant with seed? _
Разбира се, ако се въведат повече акри отколкото има, съветника предупреждава и пита пак:
```terminal
Hamurabi, think again, you own only X acres. Now then,
How many acres do you wish to plant with seed? _
Предполагам може да се сетите какво съобщение съветника връща при отрицателни акри.
Един бушел жито може да засее два акъра земя, ако няма достатъчно жито, съветника предупреждава и пита пак.
Отнема 10 човека да се грижат за един акър земя, ако няма достатъчно хора, съветника предупреждава и пита пак:
```terminal
But you have only X people to tend the fields. Now then,
Това са въпросите на съветника, сега остава годината да се изиграе.
Хората жънат (произволно число) между 1 и 6 бушела жито на всеки акър.
След това избирате друго произволно число между 1 и 6.
Ако числото е по-голямо от 1, тогава плъховете ще изядат по толкова голяма дроб бушели жито от резерва (при числото 5, плъховете изяждат 1/5; тук бушелите жито се смятат преди жътва).
Сега населението расте, броя хора които са "дошли" в града се определя по формулата [`R * (20* АКРИ ЗЕМЯ + БУШЕЛИ ЖИТО) / БРОЙ ХОРА / 100 + 1`], където R е цяло число между 1 и 6.
Бушелите жито се смятат след жътва.
Предпоследно, определя се колко хора са умрели от глад, като всеки човек консумира 20 бушели жито.
Ако над 45% от населението са умрели от глад, останалите хора ви свалят от власт и играта свършва:
```terminal
You starved X people in one year, due to this extreme mismanagement,
you have not only been impeached and thrown out of office but you have
also been declared national fink!
So long for now.
Накрая на годината, трябва да обновите общия брой хора, които са умрели от глад, за цялото ви царуване, заедно със средния процент хора които са умирали на година.
Ако успешно царувате 10 години, накрая съветника ви казва как сте се справили:
```terminal
In your 10-year term of office, X percent of the population starved per year on average,
I.E., a total of Y people died.
Сега изчислявате пропорцията между земя и хора, съветника ви казва:
```terminal
You started with 10 acres per person and ended with X acres per person.
Ако средно над 33% от населението е умирало от глад всяка година или съотношението ви е под 7 акъра на човек, тогава се случва същото нещо, като когато над 45% от населението умира от глад.
Ако средно над 10% (но под 34%) от населението е умирало от глад всяка година или съотношението ви е под 9 акъра на човек (но над 6), тогава оставате в историята като лош владетел:
```terminal
Your heavy-handed performance smacks of Nero and Ivan IV.
The people (remaining) find you an unpleasant ruler, and frankly, hate your guts.
So long for now.
Ако средно над 3% (но под 11%) от населението е умирало от глад всяка година или съотношението е между 9 и 10 акъра на човека, тогава оставате със средно впечатление:
```terminal
Your performance could have been somewhat better but really wasn't too bad at all.
X people would dearly like to see you assassinated but we all have our trivial problems.
So long for now.
Където х съответства на бройката, между 0 и 80 процента от населението.
В противен случай, тоест средно под 4% от населението е умирало от глад всяка година или съотношението е над 10 акъра на човека, тогава хората ви харесват:
```terminal
A fantastic performance!!!
Charlemange, Disraeli and Jefferson combined could not have done better.
So long for now.
В началото на играта започвате с 100 човека население, като 5 от тях са дошли в града, 1000 акри земя, жътва от 3 бушела на акър, плъхове са изяли 200 бушела и имате 2800 бушела в хранилището.
|