The Client can be installed manually or using docker.
Build the docker container soprateam17/client
with
make build
or pull the prebuilt container for the develop
branch from dockerhub:
docker pull soprateam17/client
Run the container with
make run
- Ubuntu 18.04
- python 3.6 / 3.7
- virtualenv / pip
- CMake (at least version 3.10)
- GNU-Make
To install the C++ Libs run
./installCppLibs.sh
This will install all needed dependencies and will install die libSopra_ under /usr/local/lib
.
By running
pip install -r requirements.txt
all python dependencies are installed.
To start the Client, execute
python3 run.py
The game is using a classic isometric perspective
This images shows the game, with its HUD and playingfield screen.
The equipment screen is using drag-and-drop to equip the characters with their gadgets.
The item choice screen where each player can select 8 items of his liking.
Die Koordinaten sind folgendermaßen definiert.
Transformation von World-Koordinaten zu View-Koordinaten:
Hierbei bezeichnet
- v : View-Koordinaten
- b : Breite der Tiles
- h : Höhe der Tiles
- x,y,z : World-Koordinaten
- m : Mittelpunkt des screens, verschieben des Spielfeldes in Mitte
Angenommen unsere C++ lib heißt CppLib und besitzt die Header-Dateien CppLibHeaedrN.hpp (N: fortlaufende Nummer). In den Header-Dateien ist jeweils eine Klasse CppLibClassN implementiert.
pip install cppyy
C++ lib muss installiert werden, sollte also mit in die Dependencies. Vermutlich kann man die C++ lib auch als Submodule verwenden, allerdings muss diese dann irgendwie im Rahmen des Python-Projekts gebildet werden (noch nicht ausprobiert).
Hierzu muss kein make File oder dergleichen erstellt werden. Analog zu import X
muss folgendes gemacht werden:
# do this for every C++ lib you want to use
cppyy.load_library('CppLib')
# include only header files needed
cppyy.include('CppLib/CppLibHeader1.hpp')
...
cppyy.include('CppLib/CppLibHeaderN.hpp')
Analogon zu C++: cppyy.load_library('CppLib')
entspricht in C++ target_link_libraries(${PROJECT_NAME} CppLib)
im CMakeLists.txt File. cppyy.include('CppLib/CppLibHeader1.hpp')
entspricht in C++ #include <CppLib/CppLibHeaderN.hpp>
# do this for every C++ lib you want to use
cppyy.add_include_path('<path to CppLib>')
# include only header/code files needed
cppyy.include('<path to CppLib>/CppLibHeader1.hpp')
cppyy.include('<path to CppLib>/CppLibHeader1.cpp')
...
cppyy.include('<path to CppLib>/CppLibHeaderN.hpp')
cppyy.include('<path to CppLib>/CppLibHeaderN.cpp')
# Instanz einer Klasse erstellen -> als wäre es eine Python Klasse, abgesehen von dem vorangestellten cppyy.gbl.
object_n = cppyy.gbl.CppLibClassN(<paramerters here>)
# Methode einer instantiierten Klasse aufrufen -> als wäre es eine Python Klasse
object_n.doSometing(<paramerters here>)
# Parameter einer instantiierten Klasse ansprechen -> als wäre es eine Python Klasse
object_n.parameter
Python Klasse erstellen, die von Klasse aus C++ lib erbt (wird hier für Callback aus LibClient benötigt werden)
Damit der Beispielcode unten funktioniert muss CppLibClassN
einen default Konstruktor und einen virtuellen default Destruktor besitzen.
class PythonClassN(cppyy.gbl.CppLibClassN):
def __init__(self):
# setting parameters from C++ lib types does not work here !
pass
def init_cpp_types():
# set C++ lib parameters for class in extra method that has to be called manually after __init__()
self.object_n = cppyy.gbl.CppLibClassN(<paramerters here>)
def some_other_method(<paramerters here>):
# note: parameters have to be Python types, so you cannot use types from the C++ lib as parameter
...
...
Besitzt CppLibClassN
virtuelle Methoden (entspricht abstrakten Methoden in Java) müssen diese in PythonClassN
implementiert werden.