cws/main_cw04.tex
changeset 477 a4e1f63157d8
parent 476 7550c816187a
child 481 e03a0100ec46
--- 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}