Project Description
The project description is available for download here.
Virtual Machine
The Virtual Machine is available for download here. It is set up for use in VirtualBox. There is a port forwarding in place for port 6677 so that other clients can connect to a server running on the virtual machine. For some reason, the vm does not shutdown correctly by using the desktop menu, but it is possible to shut it down using the Machine menu and then ACPI Shutdown. The passwords are set to "ccc", so they need to be changed before opening an SSH port for remote access!
The repositories can be set up by running "setup.sh" in a terminal.
VM OVF file
As an alternative to the native VirtualBox format, an ova file is also available. It is available from here. Note that using something else than VirtualBox is not officially supported by the course.
Map Format / Classes
In order to be compatible with maps from other groups, we suggest the following map format:
The map is represented as a text file, where each character represents one tile of the map. Every row of the map is separated by a single newline character. This allows for maps being edited in an editor. The characters are mapped to tiles as follows:
Map Definition
- .
- represents an empty floor tile
- #
- represents a solid wall
- c
- represents a floor tile with an empty crate
- k
- represents a floor tile with a crate containing kicking boots
- m
- represents a floor tile with a crate containing a more bombs item
- p
- represents a floor tile with a crate containing a bomb power (radius) increase item
- s
- represents a floor tile with a crate containing a speed item
- 1-8
- represent the starting location of players 1 through 8, always on a floor tile
Support Classes
The template contains a class called MAP that can parse and output the given format. It should, however, not be used to transfer maps to the server, since it uses a custom expanded class (see Expanded Classes and Serialization below). Instead just use the out feature to (re-)create a string representation and transfer this to the server.
Game UI
A simple and incomplete implementation of the user interface for the client is provided in the template. It only does simple renderings and even lacks some graphics, so it has to be extended. You are free to change the user interface and graphics to your liking.
Learning Eiffel
Although the SCOOP model is independent from the programming language used, only Eiffel supports it completely. Eiffel is a modern object-oriented language that is not difficult to learn, and it is used for the project in this course.
A tutorial on Eiffel can be found here: https://webcourses.inf.ethz.ch/se_courses/edx/eiffel_tutorial/index.php. Further documentation is available from the documentation section of the Eiffel Software homepage.
Known Caveats
Expanded Classes and Serialization
The current serialization mechanism in Eiffel (SED serialization) has problems with custom expanded classes, causing various errors. Use only regular classes when sending messages, since the protocol builds upon this serialization mechanism.
Once per program for separate results
Eiffel does not have a construct like static attributes and static routines. Instead, it provides once features: features that are only executed the first time they are called. If they return a result, the result is cached and returned by further calls. By default, once is meant per processor. It is, however, possible to change this default to mean once per program execution. This is done by appending ("PROCESS") after the once keyword, e. g. :
some_global: separate A_CLASS
once ("PROCESS")
create Result
end
Corrupted EiffelStudio project files
For some reasons, it happens that the project files get corrupted, most of the time due to a crash of EiffelStudio. If you have strange problems or EiffelStudio crashes when loading the project, tick the "clear" mark when opening the project and change the action to compile. It will then recompile everything and solve most of these problems.
Setting up EiffelStudio
We recommend to use the virtual machine for development and testing. It is the easiest and fastet way to get started, and it is the environment we use for testing the milestones. However, it is also possible to use a native installation of EiffelStudio. You can get the current version (15.01) from https://dev.eiffel.com/Downloads. Documentation on EiffelStudio including how to install it can be found at https://docs.eiffel.com/.
Hints
List of games
The simplest way to notify players of new games is to send a message per game. It follows, that this can then also be used to send a "list" of games to new players. No message equals empty list of games.