@jutge.org/toolkit 4.2.22 → 4.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/problems/games/the-walking-dead.pbm/README.md +12 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/Makefile +6 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/api.tex +246 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/defs.tex +2 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/main.tex +63 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/programming.tex +452 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/rules.tex +222 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/screenshot.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/tips.tex +81 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/twd.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc/viewer.tex +41 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/Makefile +6 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/api.tex +246 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/defs.tex +2 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/main.tex +63 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/programming.tex +176 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/rules.tex +194 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/screenshot.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/tips.tex +85 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/twd.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Doc-eng/viewer.tex +36 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.Linux64 +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.Linux64.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.MacOS +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.MacOS.ARM +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.MacOS.ARM.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/AIDummy.o.MacOS.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.Linux64 +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.Linux64.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.MacOS +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.MacOS.ARM +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.MacOS.ARM.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Obj/Board.o.MacOS.Debug +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/AIDemo.cc +89 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/AIDummy.cc +202 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/AINull.cc +37 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Action.cc +34 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Action.hh +107 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Board.cc +975 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Board.hh +287 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Defs.hh +2 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Game.cc +55 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Game.hh +23 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Info.cc +174 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Info.hh +129 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Main.cc +83 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Makefile +56 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Player.cc +66 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Player.hh +63 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/README.txt +9 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Random.cc +3 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Random.hh +88 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Registry.cc +28 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Registry.hh +42 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/SecGame.cc +368 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/SecGame.hh +90 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/SecMain.cc +99 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Settings.cc +67 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Settings.hh +175 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/State.cc +3 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/State.hh +188 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Structs.cc +3 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Structs.hh +377 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Utils.cc +3 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/Utils.hh +77 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/default-fixed.cnf +120 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Runner/default.cnf +17 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/css/ui-lightness/jquery-ui-1.8.18.custom.css +310 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/help.html +18 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_close.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_end.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_help.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_pause.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_play.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_refresh.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/but_start.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/img/logo.png +0 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/js/jquery-1.7.1.min.js +4 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/js/jquery-ui-1.8.18.custom.min.js +49 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/sample.out +52807 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/viewer.html +118 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/viewer.js +846 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/Viewer/viewer.sh +28 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/handler.yml +6 -0
- package/assets/problems/games/the-walking-dead.pbm/ca/problem.ca.yml +3 -0
- package/assets/prompts/creators/create-solution.tpl.txt +15 -8
- package/assets/prompts/proglangs/cc.md +6 -2
- package/assets/prompts/proglangs/py.md +10 -6
- package/dist/index.js +370 -366
- package/docs/getting-started-guide.md +1 -1
- package/docs/install-linux.md +1 -1
- package/docs/install-macos.md +1 -1
- package/docs/install-windows.md +1 -1
- package/package.json +11 -11
- package/toolkit/ask.ts +0 -2
- package/toolkit/doctor.ts +1 -1
- package/toolkit/make.ts +2 -2
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
\section{Com programar un jugador}
|
|
2
|
+
El primer que heu de fer és descarregar-vos el codi font. Aquest
|
|
3
|
+
inclou un programa C ++ que executa les partides i un visualitzador HTML
|
|
4
|
+
per veure-les en un format raonable i animat. A més, us proporcionem un
|
|
5
|
+
jugador ``Null'' i un jugador ``Demo'' per facilitar el començament de
|
|
6
|
+
la codificació del jugador.
|
|
7
|
+
|
|
8
|
+
\subsection{Executar la primera partida}
|
|
9
|
+
Aquí us explicarem com executar el joc sota Linux, però hauria de funcionar
|
|
10
|
+
també sota Windows, Mac, FreeBSD, OpenSolaris, ... Només necessiteu una
|
|
11
|
+
versió recent \texttt{g ++}, el \texttt{make} instal·lat al sistema, a més d'un
|
|
12
|
+
navegador modern com Firefox o Chrome.
|
|
13
|
+
|
|
14
|
+
\begin{enumerate}
|
|
15
|
+
|
|
16
|
+
\item Obriu una consola i feu \texttt{cd} al directori on us heu
|
|
17
|
+
descarregat el codi font.
|
|
18
|
+
|
|
19
|
+
\item Si, per exemple, teniu una versió de Linux en 64 bits, executeu:
|
|
20
|
+
|
|
21
|
+
\texttt{cp AIDummy.o.Linux64 AIDummy.o}
|
|
22
|
+
|
|
23
|
+
\texttt{cp Board.o.Linux64 Board.o}
|
|
24
|
+
|
|
25
|
+
Amb altres arquitectures, cal escollir els objectes adequats que
|
|
26
|
+
trobareu al directori.
|
|
27
|
+
|
|
28
|
+
\item Executeu
|
|
29
|
+
|
|
30
|
+
\texttt{make all}
|
|
31
|
+
|
|
32
|
+
per compilar el joc i tots els jugadors. Tingueu en compte que el \texttt{Makefile}
|
|
33
|
+
identifica com a jugador qualsevol fitxer que coincideixi amb \texttt{AI*.cc}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
\item Es crea un fitxer executable anomenat \texttt{Game}. Aquest
|
|
37
|
+
executable us permet executar una partida mitjançant una comanda
|
|
38
|
+
com la següent:
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
\texttt{./Game Demo Demo Demo Demo -s 30 < default.cnf > default.res}
|
|
42
|
+
|
|
43
|
+
Aquesta comanda comença una partida, amb la llavor aleatòria 30, amb
|
|
44
|
+
quatre instàncies del jugador Demo, al tauler definit a
|
|
45
|
+
\texttt{default.cnf}. La sortida d'aquesta partida es redirigeix a
|
|
46
|
+
\texttt{default.res}.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
\item Per veure una partida, obriu el fitxer visualitzador \texttt{viewer.html} amb
|
|
50
|
+
el navegador, per exemple executant des d'un terminal la comanda \texttt{firefox
|
|
51
|
+
viewer.html}, i carregueu el fitxer \texttt{default.res}.
|
|
52
|
+
|
|
53
|
+
\end{enumerate}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
Utilitzeu
|
|
57
|
+
|
|
58
|
+
\texttt{./Game --help}
|
|
59
|
+
|
|
60
|
+
per veure la llista de paràmetres que es poden usar. Particularment útil és
|
|
61
|
+
|
|
62
|
+
\texttt{./Game --list}
|
|
63
|
+
|
|
64
|
+
per veure tots els noms de jugadors reconeguts.
|
|
65
|
+
|
|
66
|
+
\medskip
|
|
67
|
+
|
|
68
|
+
En cas que sigui necessari, recordeu que podeu executar
|
|
69
|
+
|
|
70
|
+
\texttt{make clean}
|
|
71
|
+
|
|
72
|
+
per esborrar l'executable i els objectes i començar la compilació de nou.
|
|
73
|
+
|
|
74
|
+
\begin{center}
|
|
75
|
+
\includegraphics[width=12cm]{screenshot.png}
|
|
76
|
+
\end{center}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
\subsection{Afegir el vostre jugador}
|
|
80
|
+
|
|
81
|
+
Per crear un jugador nou amb, per exemple, nom \texttt{Rick},
|
|
82
|
+
copieu \texttt{AINull.cc} (un jugador buit que proporcionem com a plantilla)
|
|
83
|
+
a un fitxer nou \texttt{AIRick.cc}.
|
|
84
|
+
A continuació, editeu el fitxer nou i canvieu la línia
|
|
85
|
+
|
|
86
|
+
\begin{center}
|
|
87
|
+
@#define PLAYER_NAME Null@
|
|
88
|
+
\end{center}
|
|
89
|
+
|
|
90
|
+
a
|
|
91
|
+
|
|
92
|
+
\begin{center}
|
|
93
|
+
@#define PLAYER_NAME Rick@
|
|
94
|
+
\end{center}
|
|
95
|
+
|
|
96
|
+
El nom que trieu pel vostre jugador ha de ser únic, no ofensiu
|
|
97
|
+
i tenir com a màxim 12 caràcters. Aquest nom es mostrarà al lloc web
|
|
98
|
+
i durant les partides.
|
|
99
|
+
|
|
100
|
+
\medskip
|
|
101
|
+
A continuació, podeu començar a implementar el mètode virtual @play()@,
|
|
102
|
+
heretat de la classe base @Player@. Aquest mètode, que serà
|
|
103
|
+
cridat a cada ronda, ha de determinar les ordres que s'enviaran a les vostres unitats.
|
|
104
|
+
|
|
105
|
+
Podeu utilitzar definicions de tipus, variables i mètodes a
|
|
106
|
+
la vostra classe de jugador, però el punt d’entrada del vostre codi serà sempre el
|
|
107
|
+
mètode @play()@.
|
|
108
|
+
|
|
109
|
+
Des de la vostra classe jugador també podeu cridar funcions que
|
|
110
|
+
trobareu especificades als arxius següents:
|
|
111
|
+
|
|
112
|
+
\begin{itemize}
|
|
113
|
+
\item \texttt{State.hh}: accedir a
|
|
114
|
+
l'estat del joc.
|
|
115
|
+
\item \texttt{Action.hh}: donar ordres a les vostres unitats.
|
|
116
|
+
\item \texttt{Structs.hh}: estructures de dades útils.
|
|
117
|
+
\item \texttt{Settings.hh}: accedir als paràmetres del joc.
|
|
118
|
+
\item \texttt{Player.hh}: mètode @me()@.
|
|
119
|
+
\item \texttt{Random.hh}: generar nombre aleatoris.
|
|
120
|
+
\end{itemize}
|
|
121
|
+
|
|
122
|
+
Trobareu un resum de tota aquesta informació a l'arxiu \texttt{api.pdf}.
|
|
123
|
+
També podeu examinar el codi del
|
|
124
|
+
jugador ``Demo'' a \texttt{AIDemo.cc} com a exemple de com usar
|
|
125
|
+
aquestes funcions.
|
|
126
|
+
|
|
127
|
+
Tingueu en compte que no heu d'editar el mètode @factory()@ de la
|
|
128
|
+
classe del vostre jugador, ni l'última línia que afegeix el vostre
|
|
129
|
+
jugador a la llista de jugadors disponibles.
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
\subsection{Restriccions en enviar el vostre jugador}
|
|
133
|
+
|
|
134
|
+
Quan creieu que el vostre jugador és prou fort per entrar a la
|
|
135
|
+
competició, podeu enviar-lo al Jutge. Degut a que s'executarà en un entorn segur
|
|
136
|
+
per prevenir trampes, algunes restriccions s'apliquen al vostre
|
|
137
|
+
codi:
|
|
138
|
+
|
|
139
|
+
\begin{itemize}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
\item Tot el vostre codi font ha d’estar en un sol fitxer (com AIRick.cc).
|
|
143
|
+
|
|
144
|
+
\item No podeu utilitzar variables globals (en el seu lloc, utilitzeu atributs a la vostra
|
|
145
|
+
classe).
|
|
146
|
+
|
|
147
|
+
\item Només teniu permès utilitzar biblioteques estàndard com
|
|
148
|
+
\texttt{iostream}, \texttt{vector}, \texttt{map}, \texttt{set},
|
|
149
|
+
\texttt{queue}, \texttt{algoritme}, \texttt{cmath}, \dots En molts
|
|
150
|
+
casos, ni tan sols cal incloure la biblioteca corresponent.
|
|
151
|
+
|
|
152
|
+
\item No podeu obrir fitxers ni fer cap altra crida a sistema (threads, forks, ...)
|
|
153
|
+
|
|
154
|
+
\item El vostre temps de CPU i la memòria que utilitzeu seran limitats, mentre que no ho són
|
|
155
|
+
al vostre entorn local quan executeu \texttt{./Game}.
|
|
156
|
+
|
|
157
|
+
\item El vostre programa no ha d'escriure a @cout@ ni llegir de @cin@. Podeu
|
|
158
|
+
escriure informació de depuració a @cerr@, però recordeu que fer això en el
|
|
159
|
+
codi que envieu al Jutge pot fer malgastar innecessàriament temps de CPU.
|
|
160
|
+
|
|
161
|
+
\item Qualsevol enviament al Jutge ha de ser un intent honest de jugar.
|
|
162
|
+
Qualsevol intent de fer trampes de qualsevol manera serà durament penalitzat.
|
|
163
|
+
|
|
164
|
+
\item Un cop hagueu enviat un jugador al Jutge que hagi derrotat al
|
|
165
|
+
Dummy, podeu fer més enviaments però haureu de canviar el nom
|
|
166
|
+
del jugador. És a dir, un cop un jugador ha vençut al Dummy, el
|
|
167
|
+
seu nom queda bloquejat i no es pot reutilitzar.
|
|
168
|
+
|
|
169
|
+
\end{itemize}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
%% \section{Com programar un jugador}
|
|
173
|
+
%% El primer que heu de fer és descarregar-vos el codi font. Aquest
|
|
174
|
+
%% inclou un programa C ++ que executa les partides i un visualitzador HTML
|
|
175
|
+
%% per veure-les en un format raonable i animat. A més, us proporcionem un
|
|
176
|
+
%% jugador ``Null'' i un jugador ``Demo'' per facilitar el començament de
|
|
177
|
+
%% la codificació del jugador.
|
|
178
|
+
|
|
179
|
+
%% \subsection{Executar la primera partida}
|
|
180
|
+
%% Aquí us explicarem com executar el joc sota Linux, però hauria de funcionar
|
|
181
|
+
%% també sota Windows, Mac, FreeBSD, OpenSolaris, ... Només necessiteu una
|
|
182
|
+
%% versió recent de \texttt{g ++}, el \texttt{make} instal·lat al sistema, a més d'un
|
|
183
|
+
%% navegador modern com Firefox o Chrome.
|
|
184
|
+
|
|
185
|
+
%% \begin{enumerate}
|
|
186
|
+
|
|
187
|
+
%% \item Obriu una consola i feu \texttt{cd} al directori on us heu
|
|
188
|
+
%% descarregat el codi font.
|
|
189
|
+
|
|
190
|
+
%% \item Si, per exemple, teniu una versió de Linux en 64 bits, executeu:
|
|
191
|
+
|
|
192
|
+
%% \texttt{cp AIDummy.o.Linux64 AIDummy.o}
|
|
193
|
+
|
|
194
|
+
%% Amb altres arquitectures, cal escollir els objectes adequats que
|
|
195
|
+
%% trobareu al directori.
|
|
196
|
+
|
|
197
|
+
%% \item Executeu
|
|
198
|
+
|
|
199
|
+
%% \texttt{make all}
|
|
200
|
+
|
|
201
|
+
%% per compilar el joc i tots els jugadors. Tingueu en compte que el \texttt{Makefile}
|
|
202
|
+
%% identifica com a jugador qualsevol fitxer que coincideixi amb \texttt{AI*.cc}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
%% \item Es crea un fitxer executable anomenat \texttt{Game}. Aquest
|
|
206
|
+
%% executable us permet executar una partida mitjançant una comanda
|
|
207
|
+
%% com la següent:
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
%% \texttt{./Game Demo Demo Demo Demo -s 30 < default.cnf > default.res}
|
|
211
|
+
|
|
212
|
+
%% Aquesta comanda comença una partida, amb la llavor aleatòria 30, amb
|
|
213
|
+
%% quatre instàncies del jugador Demo, al tauler definit a
|
|
214
|
+
%% \texttt{default.cnf}. La sortida d'aquesta partida es redirigeix a
|
|
215
|
+
%% \texttt{default.res}.
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
%% \item Per veure una partida, obriu el fitxer visualitzador \texttt{Viewer/viewer.html} amb
|
|
219
|
+
%% un navegador i carregueu el fitxer \texttt{default.res}.
|
|
220
|
+
|
|
221
|
+
%% \end{enumerate}
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
%% Utilitzeu
|
|
225
|
+
|
|
226
|
+
%% \texttt{./Game --help}
|
|
227
|
+
|
|
228
|
+
%% per veure la llista de paràmetres que es poden usar. Particularment útil és
|
|
229
|
+
|
|
230
|
+
%% \texttt{./Game --list}
|
|
231
|
+
|
|
232
|
+
%% per veure tots els noms de jugadors reconeguts.
|
|
233
|
+
|
|
234
|
+
%% \medskip
|
|
235
|
+
|
|
236
|
+
%% En cas que sigui necessari, recordeu que podeu executar
|
|
237
|
+
|
|
238
|
+
%% \texttt{make clean}
|
|
239
|
+
|
|
240
|
+
%% per esborrar l'executable i els objectes i començar la compilació de nou.
|
|
241
|
+
|
|
242
|
+
%% %% \begin{center}
|
|
243
|
+
%% %% \includegraphics[width=12cm]{screenshot.eps}
|
|
244
|
+
%% %% \end{center}
|
|
245
|
+
|
|
246
|
+
%% \subsection{Arxiu de configuració}
|
|
247
|
+
|
|
248
|
+
%% Us proporcionem dos exemples d'arxius de configuració. En totes les
|
|
249
|
+
%% partides que es juguin al Jutge, incloent les eliminatòries i la
|
|
250
|
+
%% final, utilitzarem sempre \texttt{default.cnf}. Aquest arxiu
|
|
251
|
+
%% fixa els paràmetres de la Figura~\ref{fig:parameters} al valor per
|
|
252
|
+
%% defecte. La posició dels edificis, dels ciutadans, de les armes i dels
|
|
253
|
+
%% bonus es decideixen de forma aleatòria.
|
|
254
|
+
|
|
255
|
+
%% L'arxiu de configuració \texttt{default-fixed.cnf} mostra com es poden
|
|
256
|
+
%% canviar els paràmetres i definir el tauler d'entrada. Els caràcters
|
|
257
|
+
%% de la graella són '.'(carrer), 'B' (edifici), 'G' (pistola), 'Z'
|
|
258
|
+
%% (bazuca), 'M' (diners), 'F' (menjar). Pel que fa als ciutadans, el seu
|
|
259
|
+
%% tipus és 'w' (guerrer) o bé 'b' (constructor), i les armes possibles
|
|
260
|
+
%% són 'n' (cap arma), 'h' (martell), 'g' (pistola) i 'b' (bazuca).
|
|
261
|
+
|
|
262
|
+
%% Podeu crear arxius de configuració vosaltres mateixos per diversió o
|
|
263
|
+
%% si voleu provar els vostres jugadors en taulers més petits o amb
|
|
264
|
+
%% alguna peculiaritat. Els valors dels paràmetres han d'estar dins el
|
|
265
|
+
%% rang establert a la Figura~\ref{fig:parameters}. Heu d'assegurar-vos
|
|
266
|
+
%% que les forces d'atac i de demolició del bazuca han de ser majors o
|
|
267
|
+
%% iguals que les de la pistola, i les de la pistola majors o iguals que
|
|
268
|
+
%% les del martell. Una altra restricció és que BARRICADE\_RESISTANCE\_STEP
|
|
269
|
+
%% ha de ser menor o igual que BARRICADE\_MAX\_RESISTANCE. Finalment, si
|
|
270
|
+
%% voleu modificar els paràmetres i generar el tauler aleatòriament, heu
|
|
271
|
+
%% d'assegurar-vos que el tauler és prou gran per encabir tots els
|
|
272
|
+
%% objectes.
|
|
273
|
+
|
|
274
|
+
%% \begin{figure}
|
|
275
|
+
%% \centering
|
|
276
|
+
%% \begin{tabular}{|l|c|c|} \hline
|
|
277
|
+
|
|
278
|
+
%% \textbf{Paràmetre} & \textbf{Valor per defecte} & \textbf{Rang} \\ \hline\hline
|
|
279
|
+
|
|
280
|
+
%% @ NUM_PLAYERS @ & 4 & $[4,4]$ \\
|
|
281
|
+
%% @ NUM_DAYS @ & 5 & $[1,\infty)$ \\
|
|
282
|
+
%% @ NUM_ROUNDS_PER_DAY @ & 50 & $[2,\infty)$ (parell) \\
|
|
283
|
+
%% @ BOARD_ROWS @ & 15 & $[12,25]$ \\
|
|
284
|
+
%% @ BOARD_COLS @ & 30 & $[12,50]$ \\
|
|
285
|
+
|
|
286
|
+
%% @ NUM_INI_BUILDERS @ & 4 & $[1,6]$ \\
|
|
287
|
+
%% @ NUM_INI_WARRIORS @ & 2 & $[1,4]$ \\
|
|
288
|
+
%% @ NUM_INI_MONEY @ & 10 & $[0,10]$ \\
|
|
289
|
+
%% @ NUM_INI_FOOD @ & 5 & $[0,10]$ \\
|
|
290
|
+
%% @ NUM_INI_GUNS @ & 4 & $[0,5]$ \\
|
|
291
|
+
%% @ NUM_INI_BAZOOKAS @ & 2 & $[0,4]$ \\
|
|
292
|
+
|
|
293
|
+
%% @ BUILDER_INI_LIFE @ & 60 & $[1,\infty)$ \\
|
|
294
|
+
%% @ WARRIOR_INI_LIFE @ & 100 & $[1,\infty)$ \\
|
|
295
|
+
%% @ MONEY_POINTS @ & 5 & $[1,\infty)$ \\
|
|
296
|
+
%% @ KILL_BUILDER_POINTS @ & 100 & $[1,\infty)$ \\
|
|
297
|
+
%% @ KILL_WARRIOR_POINTS @ & 250 & $[1,\infty)$ \\
|
|
298
|
+
%% @ FOOD_INCR_LIFE @ & 20 & $[1,\infty)$ \\
|
|
299
|
+
|
|
300
|
+
%% @ LIFE_LOST_IN_ATTACK @ & 20 & $[1,\infty)$ \\
|
|
301
|
+
|
|
302
|
+
%% @ BUILDER_STRENGTH_ATTACK @ & 1 & $[1,\infty)$ \\
|
|
303
|
+
%% @ HAMMER_STRENGTH_ATTACK @ & 10 & $[1,\infty)$ \\
|
|
304
|
+
%% @ GUN_STRENGTH_ATTACK @ & 100 & $[1,\infty)$ \\
|
|
305
|
+
%% @ BAZOOKA_STRENGTH_ATTACK @ & 1000 & $[1,\infty)$ \\
|
|
306
|
+
|
|
307
|
+
%% @ BUILDER_STRENGTH_DEMOLISH @ & 3 & $[1,\infty)$ \\
|
|
308
|
+
%% @ HAMMER_STRENGTH_DEMOLISH @ & 10 & $[1,\infty)$ \\
|
|
309
|
+
%% @ GUN_STRENGTH_DEMOLISH @ & 10 & $[1,\infty)$ \\
|
|
310
|
+
%% @ BAZOOKA_STRENGTH_DEMOLISH @ & 30 & $[1,\infty)$ \\
|
|
311
|
+
|
|
312
|
+
%% @ NUM_ROUNDS_REGEN_BUILDER @ & 50 & $[1,\infty)$ \\
|
|
313
|
+
%% @ NUM_ROUNDS_REGEN_WARRIOR @ & 50 & $[1,\infty)$ \\
|
|
314
|
+
%% @ NUM_ROUNDS_REGEN_FOOD @ & 10 & $[1,\infty)$ \\
|
|
315
|
+
%% @ NUM_ROUNDS_REGEN_MONEY @ & 5 & $[1,\infty)$ \\
|
|
316
|
+
%% @ NUM_ROUNDS_REGEN_WEAPON @ & 40 & $[1,\infty)$ \\
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
%% @ BARRICADE_RESISTANCE_STEP @ & 40 & $[1,\infty)$ \\
|
|
320
|
+
%% @ BARRICADE_MAX_RESISTANCE @ & 320 & $[1,\infty)$ \\
|
|
321
|
+
%% @ MAX_NUM_BARRICADES @ & 3 & $[1,\infty)$ \\
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
%% \hline
|
|
325
|
+
%% \end{tabular}
|
|
326
|
+
%% \caption{Paràmetres del joc. La seva explicació la trobareu a l'arxiu \texttt{Settings.hh}.}
|
|
327
|
+
%% \label{fig:parameters}
|
|
328
|
+
%% \end{figure}
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
%% \subsection{Afegir el vostre jugador}
|
|
335
|
+
|
|
336
|
+
%% Per crear un jugador nou
|
|
337
|
+
%% copieu \texttt{AINull.cc} (un jugador buit que proporcionem com a plantilla)
|
|
338
|
+
%% a un fitxer nou \texttt{AIElquesigui.cc}.
|
|
339
|
+
%% A continuació, editeu el fitxer nou i canvieu la línia
|
|
340
|
+
|
|
341
|
+
%% \begin{center}
|
|
342
|
+
%% @#define PLAYER_NAME Null@
|
|
343
|
+
%% \end{center}
|
|
344
|
+
|
|
345
|
+
%% a
|
|
346
|
+
|
|
347
|
+
%% \begin{center}
|
|
348
|
+
%% @#define PLAYER_NAME Elquesigui@
|
|
349
|
+
%% \end{center}
|
|
350
|
+
|
|
351
|
+
%% El nom que trieu pel vostre jugador ha de ser únic, no ofensiu
|
|
352
|
+
%% i tenir com a màxim 12 caràcters. Aquest nom es mostrarà al lloc web
|
|
353
|
+
%% i durant les partides.
|
|
354
|
+
|
|
355
|
+
%% \medskip
|
|
356
|
+
%% A continuació, podeu començar a implementar el mètode virtual @play()@,
|
|
357
|
+
%% heretat de la classe base @Player@. Aquest mètode, que serà
|
|
358
|
+
%% cridat a cada ronda, ha de determinar les ordres que s'enviaran a les vostres unitats.
|
|
359
|
+
|
|
360
|
+
%% Podeu utilitzar definicions de tipus, variables i mètodes a
|
|
361
|
+
%% la vostra classe de jugador, però el punt d’entrada del vostre codi serà sempre el
|
|
362
|
+
%% mètode @play()@.
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
%% Des de la vostra classe jugador també podeu cridar funcions que
|
|
367
|
+
%% trobareu especificades als arxius següents:
|
|
368
|
+
|
|
369
|
+
%% \begin{itemize}
|
|
370
|
+
%% \item \texttt{State.hh}: accedir a
|
|
371
|
+
%% l'estat del joc.
|
|
372
|
+
%% \item \texttt{Action.hh}: donar ordres als vostres ciutadans.
|
|
373
|
+
%% \item \texttt{Structs.hh}: estructures de dades útils.
|
|
374
|
+
%% \item \texttt{Settings.hh}: accedir als paràmetres del joc.
|
|
375
|
+
%% \item \texttt{Player.hh}: mètode @me()@.
|
|
376
|
+
%% \item \texttt{Random.hh}: generar nombre aleatoris.
|
|
377
|
+
%% \end{itemize}
|
|
378
|
+
|
|
379
|
+
%% També podeu examinar el codi del
|
|
380
|
+
%% jugador ``Demo'' a \texttt{AIDemo.cc} com a exemple de com usar
|
|
381
|
+
%% aquestes funcions.
|
|
382
|
+
|
|
383
|
+
%% Tingueu en compte que no heu d'editar el mètode @factory()@ de la
|
|
384
|
+
%% classe del vostre jugador, ni l'última línia que afegeix el vostre
|
|
385
|
+
%% jugador a la llista de jugadors disponibles.
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
%% \subsection{Jugar contra el jugador Dummy}
|
|
389
|
+
|
|
390
|
+
%% Per a provar la vostra estratègia contra el jugador Dummy, proporcionem
|
|
391
|
+
%% el seu arxiu objecte. D'aquesta manera, no teniu accés al seu codi font
|
|
392
|
+
%% però podreu afegir-lo com a jugador i competir contra ell en local.
|
|
393
|
+
|
|
394
|
+
%% \medskip
|
|
395
|
+
|
|
396
|
+
%% Com ja hem comentat, per afegir el jugador Dummy a la llista de
|
|
397
|
+
%% jugadors registrats, heu de copiar l'arxiu corresponent a la vostra
|
|
398
|
+
%% arquitectura cap a \texttt{AIDummy.o}. Per exemple:
|
|
399
|
+
|
|
400
|
+
%% \texttt{cp AIDummy.o.Linux64 AIDummy.o}
|
|
401
|
+
|
|
402
|
+
%% Recordeu que els arxius objecte contenen
|
|
403
|
+
%% instruccions binàries per a una arquitectura concreta, pel que no podem proporcionar
|
|
404
|
+
%% un únic arxiu.
|
|
405
|
+
|
|
406
|
+
%% \medskip
|
|
407
|
+
|
|
408
|
+
%% Consell de pro: demaneu als vostres amics els seus arxius {\bf
|
|
409
|
+
%% objecte} (mai codi font!!!) i afegiu-los al vostre
|
|
410
|
+
%% \texttt{Makefile}!
|
|
411
|
+
|
|
412
|
+
%% \subsection{Restriccions en enviar el vostre jugador}
|
|
413
|
+
|
|
414
|
+
%% Quan creieu que el vostre jugador és prou fort per entrar a la
|
|
415
|
+
%% competició, podeu enviar-lo al Jutge. Degut a que s'executarà en un entorn segur
|
|
416
|
+
%% per prevenir trampes, algunes restriccions s'apliquen al vostre
|
|
417
|
+
%% codi:
|
|
418
|
+
|
|
419
|
+
%% \begin{itemize}
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
%% \item Tot el vostre codi font ha d’estar en un sol fitxer (com AIElquesigui.cc).
|
|
423
|
+
|
|
424
|
+
%% \item No podeu utilitzar variables globals (en el seu lloc, utilitzeu atributs a la vostra
|
|
425
|
+
%% classe).
|
|
426
|
+
|
|
427
|
+
%% \item Només teniu permès utilitzar biblioteques estàndard com
|
|
428
|
+
%% \texttt{iostream}, \texttt{vector}, \texttt{map}, \texttt{set},
|
|
429
|
+
%% \texttt{queue}, \texttt{algoritme}, \texttt{cmath}, \dots En molts
|
|
430
|
+
%% casos, ni tan sols cal incloure la biblioteca corresponent.
|
|
431
|
+
|
|
432
|
+
%% \item No podeu obrir fitxers ni fer cap altra crida a sistema (threads, forks, ...)
|
|
433
|
+
|
|
434
|
+
%% \item El vostre temps de CPU i la memòria que utilitzeu seran limitats, mentre que no ho són
|
|
435
|
+
%% al vostre entorn local quan executeu \texttt{./Game}. El temps límit és d'un segon
|
|
436
|
+
%% per l'execució de tota la partida. Si exhauriu el temps límit (o si l'execució del vostre codi
|
|
437
|
+
%% avorta), el vostre jugador es congelarà i no admetrà més instruccions.
|
|
438
|
+
|
|
439
|
+
%% \item El vostre programa no ha d'escriure a @cout@ ni llegir de @cin@. Podeu
|
|
440
|
+
%% escriure informació de depuració a @cerr@, però {\bf heu d'eliminar} aquesta informació
|
|
441
|
+
%% en el codi que envieu al Jutge.
|
|
442
|
+
|
|
443
|
+
%% \item Qualsevol enviament al Jutge ha de ser un intent honest de jugar.
|
|
444
|
+
%% Qualsevol intent de fer trampes de qualsevol manera serà durament penalitzat.
|
|
445
|
+
|
|
446
|
+
%% \item Un cop hagueu enviat un jugador al Jutge que hagi derrotat al
|
|
447
|
+
%% Dummy, podeu fer més enviaments però haureu de canviar el nom
|
|
448
|
+
%% del jugador. És a dir, un cop un jugador ha vençut al Dummy, el
|
|
449
|
+
%% seu nom queda bloquejat i no es pot reutilitzar.
|
|
450
|
+
%% \end{itemize}
|
|
451
|
+
|
|
452
|
+
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
|
|
2
|
+
\section{Regles del Joc}
|
|
3
|
+
|
|
4
|
+
Per motius que encara ningú coneix amb certesa, l'apocalipsi zombi
|
|
5
|
+
s'ha apoderat de la Terra. Els pocs humans que hi queden intenten
|
|
6
|
+
sobreviure i apoderar-se dels escassos recursos encara existents.
|
|
7
|
+
|
|
8
|
+
Es tracta d'un joc per a quatre jugadors, identificats amb números de
|
|
9
|
+
0 a 3. Cada jugador té el control d'un clan d'unitats vives. Però al
|
|
10
|
+
joc coexisteixen dos tipus més d'unitats: unitats mortes i zombis.
|
|
11
|
+
|
|
12
|
+
El joc té una durada de 200 rondes, numerades de l'1 al 200. Cada
|
|
13
|
+
unitat pot moure's com a màxim una vegada per ronda. Les unitats
|
|
14
|
+
mortes, com és d'esperar, no es poden moure. Durant aquestes rondes
|
|
15
|
+
els clans aniran acumulant punts i guanyarà la partida qui tingui més
|
|
16
|
+
punts en acabar la ronda 200.
|
|
17
|
+
|
|
18
|
+
El tauler del joc té dimensions $60 \times 60$. Les unitats no es
|
|
19
|
+
poden moure en cap cas fora d'ell. Una posició del tauler ve
|
|
20
|
+
determinada per un parell d'enters $(f,c)$ on $0 \leq f < 60$ i $0\leq
|
|
21
|
+
c < 60$. La posició de més a dalt i a l'esquerra és la $(0,0)$, mentre
|
|
22
|
+
que la de més a baix i a la dreta és $(59,59)$. Per tant, la primera
|
|
23
|
+
coordenada ($f$ de fila) és la que indica la posició en l'eix vertical
|
|
24
|
+
i la segona ($c$ de columna) en l'eix horitzontal. Cada cel·la del
|
|
25
|
+
tauler o bé forma part d'un carrer o bé està plena de deixalla. Les
|
|
26
|
+
unitats no poden trepitjar la deixalla i s'han de moure necessàriament
|
|
27
|
+
pels carrers.
|
|
28
|
+
|
|
29
|
+
Els clans comencen la partida amb una certa quantitat de punts de
|
|
30
|
+
força. La {\em força d'un clan} es defineix com
|
|
31
|
+
$\left\lfloor{{\texttt{punts força}}\over{\texttt{unitats
|
|
32
|
+
vives}}}\right\rfloor$ i serà clau per determinar el guanyador
|
|
33
|
+
de les lluites que hi haurà durant la partida. En acabar cada ronda,
|
|
34
|
+
els punts de força d'una clan es decrementaran en una quantitat igual
|
|
35
|
+
al nombre d'unitats vives d'aquest clan. No obstant, mai esdevindrà
|
|
36
|
+
una quantitata negativa. Per tal d'incrementar els punts de força, les
|
|
37
|
+
unitats vives poden agafar menjar que trobaran al tauler. És fàcil
|
|
38
|
+
veure que un clan amb moltes unitats vives necessita recollir molt
|
|
39
|
+
menjar per a poder mantenir una força considerable. És per això que
|
|
40
|
+
algunes unitats decideixen canviar de clan: cada ronda, amb un $20\%$
|
|
41
|
+
de probabilitat, una unitat del clan amb més unitats vives passa a
|
|
42
|
+
formar part del clan amb menys unitats vives. En cas d'haver-hi
|
|
43
|
+
diferents clans amb aquestes propietats, se'n selecciona un d'ells de
|
|
44
|
+
forma aleatòria.
|
|
45
|
+
|
|
46
|
+
\bigskip
|
|
47
|
+
{\bf Moviments de les unitats vives.} Una unitat viva d'un clan es
|
|
48
|
+
pot moure pel tauler de la manera següent:
|
|
49
|
+
|
|
50
|
+
\begin{itemize}
|
|
51
|
+
\item Només pot accedir a les cel·les adjacents en horitzontal i
|
|
52
|
+
vertical, mai en diagonal.
|
|
53
|
+
|
|
54
|
+
\item Si es mou cap a una cel·la ocupada per deixalla, per una
|
|
55
|
+
unitat del seu mateix clan o per una unitat morta, el moviment
|
|
56
|
+
s'ignorarà.
|
|
57
|
+
|
|
58
|
+
\item Si es mou cap a una cel·la ocupada per menjar, els punts de
|
|
59
|
+
força del seu clan s'incrementaran, la unitat ocuparà la cel·la
|
|
60
|
+
tot fent desaparèixer el menjar i el seu clan posseirà aquesta
|
|
61
|
+
cel·la. En acabar la ronda, una unitat de menjar reapareixerà en
|
|
62
|
+
una altra posició. Notem que no trobarem mai una cel·la ocupada
|
|
63
|
+
per menjar i per una unitat.
|
|
64
|
+
|
|
65
|
+
\item Si es mou cap a una cel·la buida (sense menjar ni cap unitat),
|
|
66
|
+
el moviment s'efectuarà i el seu clan passarà a posseir aquesta
|
|
67
|
+
cel·la.
|
|
68
|
+
|
|
69
|
+
\item Si es mou cap a una cel·la ocupada per un zombi, el zombi
|
|
70
|
+
morirà però la unitat no es mourà. Com a resultat, el clan rebrà
|
|
71
|
+
un cert nombre de punts i, en acabar la ronda, una unitat viva
|
|
72
|
+
d'aquest clan reapareixerà en una altra posició reemplaçant al
|
|
73
|
+
zombi, que desapareixerà.
|
|
74
|
+
|
|
75
|
+
\item Si es mou cap a una cel·la ocupada per una unitat viva d'un
|
|
76
|
+
altre clan, es produirà una lluita. La unitat que perdi la lluita
|
|
77
|
+
passarà a ser una unitat morta, i s'inicia el seu procés de
|
|
78
|
+
conversió: al cap d'un cert nombre de rondes, passarà a ser un
|
|
79
|
+
zombi. Si ja havia començat el procés de conversió per haver estat
|
|
80
|
+
mossegat per un zombi, el procés torna a començar. El clan de la
|
|
81
|
+
unitat que guanyi l'atac rebrà un cert nombre de
|
|
82
|
+
punts, però no es mourà de posició. El guanyador de la lluita
|
|
83
|
+
es determina de la manera següent:
|
|
84
|
+
|
|
85
|
+
Amb un $30\%$ de probabilitat, la unitat que ha desencadenat
|
|
86
|
+
l'atac agafarà l'altra per sorpresa i serà la guanyadora sense
|
|
87
|
+
haver de lluitar. En cas contrari, si les forces dels dos clans
|
|
88
|
+
involucrats en la lluita són $N$ i $M$, respectivament, el primer
|
|
89
|
+
guanyarà amb probabilitat $N/(N+M)$ i el segon amb probabilitat
|
|
90
|
+
$M/(N+M)$. En cas que $N = M = 0$, les dues unitats tindran la
|
|
91
|
+
mateixa probabilitat de guanyar.
|
|
92
|
+
\end{itemize}
|
|
93
|
+
|
|
94
|
+
{\bf Moviments dels zombis.} Els zombis no formen part de cap clan i
|
|
95
|
+
per tant no podran ser controlats per cap jugador. Els zombis sempre
|
|
96
|
+
es mouran cap a la unitat viva més propera a ells, tenint en compte la
|
|
97
|
+
presència d'obstacles. En cas d'haver-n'hi diverses a la mínima
|
|
98
|
+
distància, n'escolliran una a l'atzar. Els moviments d'un zombi es
|
|
99
|
+
regiran per les següent regles:
|
|
100
|
+
|
|
101
|
+
\bigskip
|
|
102
|
+
\begin{itemize}
|
|
103
|
+
|
|
104
|
+
\item Pot accedir a les cel·les adjacents en horitzontal i vertical, i
|
|
105
|
+
també en diagonal.
|
|
106
|
+
|
|
107
|
+
\item Mai es mourà cap a una cel·la ocupada per deixalla, per una
|
|
108
|
+
unitat morta o per un zombi.
|
|
109
|
+
|
|
110
|
+
\item Si es mou cap a una cel·la ocupada per menjar, el menjar
|
|
111
|
+
desapareixerà. En acabar la ronda, una unitat de menjar reapareixerà
|
|
112
|
+
en una posició aleatòria. Si un clan posseïa aquesta cel·la, deixarà
|
|
113
|
+
de fer-ho.
|
|
114
|
+
|
|
115
|
+
\item Si es mou cap a una cel·la buida (sense menjar ni cap unitat)
|
|
116
|
+
posseïda per un clan, aquest perdrà la possessió.
|
|
117
|
+
|
|
118
|
+
\item Si es vol moure cap a una cel·la ocupada per una unitat viva, el
|
|
119
|
+
moviment no s'efectuarà. No obstant, mossegarà a la unitat i
|
|
120
|
+
aquesta iniciarà el seu procés de conversió a zombi, que tindrà lloc
|
|
121
|
+
al cap d'un cert nombre de rondes. Si aquest procés ja s'havia
|
|
122
|
+
iniciat per una mossegada prèvia, el procés de conversió no tornarà
|
|
123
|
+
a començar sinó que continuarà el seu curs. Durant la conversió a zombi,
|
|
124
|
+
la unitat es comportarà igual que una unitat viva.
|
|
125
|
+
|
|
126
|
+
\end{itemize}
|
|
127
|
+
|
|
128
|
+
Com a resultat de les anterior regles, el nombre d'unitats totals és
|
|
129
|
+
constant al llarg de tot el joc.
|
|
130
|
+
|
|
131
|
+
\bigskip
|
|
132
|
+
{\bf Regeneració d'objectes.} Cada vegada que cal regenerar una unitat
|
|
133
|
+
de menjar o una unitat viva, aquesta reapareixerà sempre en una
|
|
134
|
+
cel·la buida $C$ i tal que no hi ha cap unitat ni menjar en les posicions que
|
|
135
|
+
l'envolten (les marcades amb una x a la taula):
|
|
136
|
+
|
|
137
|
+
\medskip
|
|
138
|
+
\begin{center}
|
|
139
|
+
\begin{tabular}{|c|c|c|c|c|}\hline
|
|
140
|
+
x & x & x & x & x \\\hline
|
|
141
|
+
x & x & x & x & x \\\hline
|
|
142
|
+
x & x & C & x & x \\\hline
|
|
143
|
+
x & x & x & x & x \\\hline
|
|
144
|
+
x & x & x & x & x \\\hline
|
|
145
|
+
\end{tabular}
|
|
146
|
+
\end{center}
|
|
147
|
+
\medskip
|
|
148
|
+
|
|
149
|
+
Si en el moment de reaparèixer no existeix cap cel·la segura en aquest
|
|
150
|
+
sentit, l'objecte reapareixerà en una cel·la buida, que no tingui cap unitat ni menjar.
|
|
151
|
+
|
|
152
|
+
És important remarcar que les unitats tenen un identificador que mai
|
|
153
|
+
canvia, ni tan sols durant el procés de regeneració. És a dir, si una
|
|
154
|
+
unitat amb un cert identificador inicial es converteix en zombi,
|
|
155
|
+
aquest continuarà amb el mateix identificador. Si posteriorment el
|
|
156
|
+
zombi mor i reapareix com una unitat viva d'un altre clan,
|
|
157
|
+
l'identificador es mantindrà.
|
|
158
|
+
|
|
159
|
+
\bigskip
|
|
160
|
+
{\bf Càlcul de la puntuació.} La puntuació d'un clan en una ronda ve
|
|
161
|
+
determinada per dos components. D'una banda, per cada zombi que el
|
|
162
|
+
clan hagi matat fins aquell moment s'obtindran
|
|
163
|
+
10 punts. Per cada unitat que hagi
|
|
164
|
+
matat s'obtindran 50 punts.
|
|
165
|
+
|
|
166
|
+
D'altra banda, per cada cel·la posseïda pel clan {\bf en aquesta
|
|
167
|
+
ronda} s'obtindrà 1 punt. La puntuació del clan és la suma
|
|
168
|
+
d'aquestes quantitats. Així doncs, la puntuació es pot decrementar si
|
|
169
|
+
es perd la possessió d'algunes cel·les. Les constants 10, 50 i 1, així
|
|
170
|
+
com d'altres que especifiquen els paràmetres inicials del joc, estan
|
|
171
|
+
definides a l'arxiu d'entrada \texttt{default.cnf}. Totes les partides
|
|
172
|
+
es jugaran amb exactament els valors donats en aquest arxiu.
|
|
173
|
+
|
|
174
|
+
\bigskip
|
|
175
|
+
{\bf Execució d'ordres.}
|
|
176
|
+
A cada ronda es pot donar més d’una ordre a la mateixa unitat,
|
|
177
|
+
tot i que només se seleccionarà la primera d'elles (si n’hi ha alguna).
|
|
178
|
+
Tot programa que intenti donar més de 1000 comandes
|
|
179
|
+
durant la mateixa ronda s'avortarà.
|
|
180
|
+
|
|
181
|
+
Cada ronda, les ordres seleccionades dels quatre jugadors
|
|
182
|
+
s'executaran amb ordre aleatori,
|
|
183
|
+
però respectant l’ordre relatiu entre les unitats d’un mateix clan.
|
|
184
|
+
Com a conseqüència de la norma anterior, considereu la possibilitat de
|
|
185
|
+
donar les ordres a les vostres unitats a cada ronda de més urgent a
|
|
186
|
+
menys urgent.
|
|
187
|
+
|
|
188
|
+
Tingueu en compte que s’aplica cada moviment sobre el tauler
|
|
189
|
+
que resulta dels moviments anteriors. Per exemple, considereu el tauler
|
|
190
|
+
|
|
191
|
+
\medskip
|
|
192
|
+
\begin{center}
|
|
193
|
+
\begin{tabular}{|c|c|c|c|c|}\hline
|
|
194
|
+
x & x & x & x \\\hline
|
|
195
|
+
x & M & U & x \\\hline
|
|
196
|
+
x & V & x & x \\\hline
|
|
197
|
+
x & x & x & x \\\hline
|
|
198
|
+
\end{tabular}
|
|
199
|
+
\end{center}
|
|
200
|
+
\medskip
|
|
201
|
+
|
|
202
|
+
on M representa menjar i U i V dues unitats vives de diferents clans.
|
|
203
|
+
Imaginem que el jugador que controla U ha decidit que aquest vagi cap a l'esquerra,
|
|
204
|
+
i el jugador que controla V ha decidit que vagi amunt. Si s'executa
|
|
205
|
+
primer el moviment de V, aleshores U s'ha quedat sense menjar,
|
|
206
|
+
perquè V ja l'ha consumit i a més, la posterior execució del moviment de U és
|
|
207
|
+
un atac cap a V del qual en pot sortir malparat. Si U mor durant aquest atac,
|
|
208
|
+
en la visualització de la partida veurem una transició de la matriu anterior
|
|
209
|
+
cap a una situació on U ha desaparegut. Òbviament, no hi podia haver un atac entre U i V des
|
|
210
|
+
de la configuració inicial, perquè les unitats vives no es poden moure en diagonal, però l'ordre
|
|
211
|
+
d'execució de les comandes sí que ho ha fet possible. Tingueu això en compte quan no entengueu
|
|
212
|
+
certes situacions durant la visualització de les partides.
|
|
213
|
+
|
|
214
|
+
Després de l'execució de tots els moviments dels jugadors, es
|
|
215
|
+
procedeixen a efectuar els moviments dels zombis. En acabar, els
|
|
216
|
+
següents processos s'executaran en aquest ordre: les unitats que han
|
|
217
|
+
acabat el seu procés de conversió passaran a ser zombis, els zombis
|
|
218
|
+
morts es convertiran en unitats vives, una unitat del clan amb més
|
|
219
|
+
unitats vives potser passarà a formar part del clan amb menys unitats
|
|
220
|
+
vives, es regeneraran les unitats de menjar consumides i
|
|
221
|
+
s'actualitzaran les puntuacions.
|
|
222
|
+
|
|
Binary file
|