--- a/cws/main_cw04.tex Sat Nov 04 18:53:37 2023 +0000
+++ b/cws/main_cw04.tex Mon Nov 06 14:18:26 2023 +0000
@@ -48,7 +48,7 @@
\mbox{}\\[-18mm]\mbox{}
-\section*{Main Part 4:\\ Implementing the Shogun Board Game (7 Marks)}
+\section*{Main Part 4:\\ Implementing the Shogun Board Game (8 Marks)}
\mbox{}\hfill\textit{``The problem with object-oriented languages is they’ve got all this implicit,}\\
\mbox{}\hfill\textit{environment that they carry around with them. You wanted a banana but}\\
@@ -388,12 +388,13 @@
containing all these fields. Similarly in the other cases.
\end{itemize}
-For example on the left board below, \texttt{eval} is called with the white
+For example in the left board below, \texttt{eval} is called with the white
piece in the centre and the move \texttt{RU} generates then a set of
-new pieces corresponding to the blue fileds. The difference on the
+new pieces corresponding to the blue fields. The difference with the
right board is that \texttt{eval} is called with a red piece and therefore the
field (4, 8) is not reachable anymore because it is already occupied by
-another red piece.
+another red piece. But (7, 5) becomes reachable because it is occupied
+by a piece of the opposite colour.
\begin{center}
\begin{tabular}{cc}
@@ -408,11 +409,11 @@
\fill[blue!50] (5,5) rectangle ++ (1,1);
\fill[blue!50] (3,7) rectangle ++ (1,1);
\fill[blue!50] (4,6) rectangle ++ (1,1);
-\fill[blue!50] (6,4) rectangle ++ (1,1);
+%\fill[blue!50] (6,4) rectangle ++ (1,1);
\fill[blue!50] (7,3) rectangle ++ (1,1);
% black pieces
-\foreach\x/\y/\e in {1/1/1,2/1/3,3/1/2,4/1/3,6/1/3,7/1/1,8/1/2}
+\foreach\x/\y/\e in {2/1/3,3/1/2,4/1/3,6/1/3,7/1/1,7/5/2}
\pic[fill=white] at (\x,\y) {piece={\e}};
% white pieces
\foreach\x/\y/\e in {1/8/4,2/8/2,3/8/4,5/8/4,6/8/2,7/8/3,8/8/1}
@@ -444,10 +445,10 @@
\fill[blue!50] (7,3) rectangle ++ (1,1);
% black pieces
-\foreach\x/\y/\e in {1/1/1,2/1/3,3/1/2,4/1/3,6/1/3,7/1/1,8/1/2}
+\foreach\x/\y/\e in {1/1/1,2/1/3,3/1/2,4/1/3,6/1/3,7/1/1,7/5/2}
\pic[fill=white] at (\x,\y) {piece={\e}};
% white pieces
-\foreach\x/\y/\e in {1/8/4,2/8/2,3/8/4,5/8/4,6/8/2,7/8/3,8/8/1}
+\foreach\x/\y/\e in {1/8/4,2/8/2,3/8/4,5/8/4,6/8/2,7/8/3}
\pic[fill=red] at (\x,\y) {piece={\e}};
\pic[fill=white] at (5.0,1.0) {king={1}};
\pic[fill=red] at (4.0,8.0) {king={2}};
@@ -466,15 +467,17 @@
\end{center}\hfill[3 Marks]
\item[(2)] Implement an \texttt{all\_moves} function that calculates for a
- piece and a board, \textit{all} pieces on legal onward positions. For this
+ piece and a board, \textit{all} possible onward positions. For this
you have to call \texttt{eval} for all possible moves \texttt{m} (that is \texttt{U},
- \texttt{D}, \ldots, \texttt{DL}). An example for all moves for the red piece on (4, 4) are
- shown in \eqref{moves} on page \pageref{moves}.\\
+ \texttt{D}, \ldots, \texttt{DL}). An example for all moves for the red piece on (4, 4) is
+ shown in \eqref{moves} on page \pageref{moves}. Be careful about possible modifications
+ you need to apply to the board before you call the \texttt{eval} function.
+ Also for this task ignore the fact that a king cannot move onto an attacked field.\\
\mbox{}\hfill[1 Mark]
\item[(3)] Implement a function \texttt{attacked} that takes a colour and a board
and calculates all pieces of the opposite side that are attacked. For example
- below on the left are all the attacked pieces by red, and on the right for white:
+ below in the left board are all the attacked pieces by red, and on the right all for white:
\begin{center}
\begin{tabular}{cc}
@@ -490,11 +493,11 @@
\fill[blue!50] (6,0) rectangle ++ (1,1);
-% black pieces
+% red pieces
\foreach\x/\y/\e in {6/1/3,4/4/4,5/3/4,6/5/3}
\pic[fill=red] at (\x,\y) {piece={\e}};
% white pieces
-\foreach\x/\y/\e in {8/4/2,4/1/2,8/7/3}
+\foreach\x/\y/\e in {8/4/1,4/1/2,8/7/3,6/7/2}
\pic[fill=white] at (\x,\y) {piece={\e}};
\pic[fill=red] at (4,2) {king={2}};
@@ -518,13 +521,13 @@
\fill[gray!\blend] (\x,\y) rectangle ++ (1,1);
}
\fill[blue!50] (5,0) rectangle ++ (1,1);
-
+\fill[blue!50] (5,4) rectangle ++ (1,1);
-% black pieces
+% red pieces
\foreach\x/\y/\e in {6/1/3,4/4/4,5/3/4,6/5/3}
\pic[fill=red] at (\x,\y) {piece={\e}};
% white pieces
-\foreach\x/\y/\e in {8/4/2,4/1/2,8/7/3}
+\foreach\x/\y/\e in {8/4/1,4/1/2,8/7/3,6/7/2}
\pic[fill=white] at (\x,\y) {piece={\e}};
\pic[fill=red] at (4,2) {king={2}};
@@ -555,6 +558,83 @@
and the piece on (5, 3) is protected by three red pieces ((6, 1), (4, 2), and (6, 5)).
\\
\mbox{}\hfill[1 Mark]
+
+\item[(6)] Implement a function \texttt{legal\_moves} that behaves like \texttt{all\_moves} from (2) for
+ pawns, but for kings, in addition, makes sure that they do not move to an attacked field.
+ For example in the board below on the left, there are three possible fields the white king can
+ reach, but all of them are attacked by red pieces. In the board on the right where the
+ white king has an energy of 1, there is only one legal move, namely to move to field (8, 1).
+ The field (7, 2) is reachable, but is attacked; similarly capturing the red piece on field (6, 1) is
+ not possible because it is protected by at least another red piece.
+
+ \begin{center}
+ \begin{tabular}{cc}
+ \begin{tikzpicture}[scale=0.45,every node/.style={scale=0.45}]
+% chessboard
+\draw[very thick,gray] (0,0) rectangle (8,8);
+\foreach\x in {0,...,7}\foreach\y in {7,...,0}
+{
+ \pgfmathsetmacro\blend{Mod(\x+\y,2)==0?75:25}
+ \fill[gray!\blend] (\x,\y) rectangle ++ (1,1);
+}
+\fill[blue!50] (5,1) rectangle ++ (1,1);
+\fill[blue!50] (6,2) rectangle ++ (1,1);
+\fill[blue!50] (7,1) rectangle ++ (1,1);
+
+
+% red pieces
+\foreach\x/\y/\e in {6/1/3,4/4/4,5/3/4,6/5/3}
+ \pic[fill=red] at (\x,\y) {piece={\e}};
+% white pieces
+\foreach\x/\y/\e in {8/4/1,4/1/2,8/7/3,6/7/2}
+ \pic[fill=white] at (\x,\y) {piece={\e}};
+
+\pic[fill=red] at (4,2) {king={2}};
+\pic[fill=white] at (7,1) {king={2}};
+
+% numbers
+\foreach\x in {1,...,8}
+{\draw (\x - 0.5, -0.4) node {\x};
+}
+\foreach\y in {1,...,8}
+{\draw (-0.4, \y - 0.6, -0.4) node {\y};
+}
+\end{tikzpicture} &
+ \begin{tikzpicture}[scale=0.45,every node/.style={scale=0.45}]
+% chessboard
+\draw[very thick,gray] (0,0) rectangle (8,8);
+\foreach\x in {0,...,7}\foreach\y in {7,...,0}
+{
+ \pgfmathsetmacro\blend{Mod(\x+\y,2)==0?75:25}
+ \fill[gray!\blend] (\x,\y) rectangle ++ (1,1);
+}
+\fill[blue!50] (5,0) rectangle ++ (1,1);
+\fill[blue!50] (6,1) rectangle ++ (1,1);
+\fill[blue!50] (7,0) rectangle ++ (1,1);
+
+
+% red pieces
+\foreach\x/\y/\e in {6/1/3,4/4/4,5/3/3,6/5/3}
+ \pic[fill=red] at (\x,\y) {piece={\e}};
+% white pieces
+\foreach\x/\y/\e in {8/4/1,4/1/2,8/7/3,6/7/2}
+ \pic[fill=white] at (\x,\y) {piece={\e}};
+
+\pic[fill=red] at (4,2) {king={2}};
+\pic[fill=white] at (7,1) {king={1}};
+
+% numbers
+\foreach\x in {1,...,8}
+{\draw (\x - 0.5, -0.4) node {\x};
+}
+\foreach\y in {1,...,8}
+{\draw (-0.4, \y - 0.6, -0.4) node {\y};
+}
+\end{tikzpicture}
+\end{tabular}
+\end{center}
+\mbox{}\\ \mbox{}\hfill[1 Mark]
+
\end{itemize}
\end{document}