This page describes the minimal functionality you should implement.
-
The code implementing minimal requirements must contain no MVVM-related mistakes, otherwise you do not get a passing grade.
-
The extensions should also be MVVM correct. You need to make a certain number of extensions (see below for the exact number). Extensions that contain MVVM mistakes will not count towards this number. We therefore strongly advise you to make some "extra safety extensions" in case you accidentally make a mistake in one.
|
This page is work in progress. |
-
Playable PiCross puzzles
-
Visualization of grid and constraints
-
Possibility to mark squares as filled, empty or unknown
-
Visual distinction between satisfied and unsatisfied constraints on both levels:
-
Single constraint values can be satisfied (see
IPlayablePuzzleConstraintsValue.IsSatisfied
) -
The whole column/row is satisfied (see
IPlayablePuzzleConstraints.IsSatisfied
)
-
-
Notification when puzzle is solved
-
-
Multiple Screens (these are not necessarily multiple windows! The same GUI window can be reused, which implementation-wise is easier to achieve. An example of how to do this available in the samples repository.)
-
Introduction Screen
-
Puzzle Solving Screen
-
Puzzle Selection Screen
-
-
Tolerable aesthetics
-
Centered text where appropriate
-
Some brushes to liven up
-
We will not question your aesthetic choices, but we require you to at least make some effort and use brushes/fonts/…
-
-
Make commands/converters/… as reusable as possible
-
MVVM-compliant, which includes but is not limited to
-
Make use of Commands for buttons, do not rely on
Click
events (except if you have a really good excuse). -
Nothing V-specific in the VM
-
No mentioning colors (or anything else visual) in the VM
-
No strings that are shown to the user in the VM (e.g., no "Game Over" string in the VM; it belongs in the V)
-
Use UI-agnostic terms in the VM (e.g., don’t call a command
Click
, but name it after what it does, such asSwitchFilled
). -
Converters should typically be in the V-layer.
-
-
-
At least three extensions (see below).
-
Puzzle Solving
-
Help button: when clicked, all erroneously marked cells get reset to unknown.
-
Timer
-
Allow player to select a range (horizontal/vertical) of squares to mark them all in one step.
-
-
Support for multiple players (not in parallel, just a login/logout-like system)
-
Log in as player (requires extra screen showing all players)
-
Log out (return to player selection screen)
-
Add new player
-
Remove player
-
-
Puzzle Selection
-
Show thumbnail if already solved
-
Group in solved/nonsolved, by size
-
Best times
-
Filter to show only unsolved puzzles
-
Filter to show only puzzles of specific size
-
-
Puzzle Editor
-
Check for ambiguity (functionality readily present in domain code)
-
-
Sound/Music
-
Animations
-
Themes
You can invent your own extensions, but check with the lecturer first to make sure they’re not trivial to implement.
ℹ️
|
Every item represents an extension. For example, implementing a timer counts as one extension, you don’t have to also implement a help button and multiselection to make it count: those are separate extensions. |
You are allowed to extend/modify the given code, but respect the overall structure of the code, e.g., don’t add view-specific code in the domain. You need to be able to defend every change you make.
Below are merely suggestions. If you interpreted something differently, it’s okay. What matters is that you make some kind of extension.
The PiCrossControl has a property called Thumbnail
.
This is perhaps a bit misleading, as it is nammed after its original intent instead of what it actually does.
You can assign a UI element to Thumbnail
(e.g., a Button
, a StackPanel
with all kinds of stuff in it, …)
This will cause this UI element to be shown in the top left corner of the PiCrossControl, left of the column constraints and above the row constraints. It does not do anything more than this, so it’s really quite limited.
What I had in mind with the thumbnail view was that you would show a miniature version of the puzzle in that corner.
I created a separate control for this, but it is possible to make use of PiCrossControl
(just link it to the same grid but omit row and column constraints.)
Again, you are free to deviate from this:
-
If you want to show a thumbnail view somewhere else than the upper left corner, feel free to do so.
-
If you feel like a clock would be a better fit for that little corner, that’s okay.