commit 067491fb4626203d01ed0f25c28548ee4bf102d0 Author: Silvan Heller Date: Thu Feb 24 11:24:51 2022 +0100 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..515c7a0 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# README +This is a readme file. It typically includes some information about your project. +For more information about readmes, you can either [read a guide](https://github.com/18F/open-source-guide/blob/18f-pages/pages/making-readmes-readable.md) or have a look at the readmes of popular open-source projects such as [Swift by Apple](https://github.com/apple/swift) or [Tensorflow](https://github.com/tensorflow/tensorflow). + +Readme files are typically formatted in Markdown. +However, there are platform-specific flavors, so for this project, you can make full use of the [Gitlab markdown syntax](https://docs.gitlab.com/ee/user/markdown.html), for example when talking about a :bug: (bug) or if your code is slow like a :snail:. +You can also tag people using @username and reference issues using '#1', where 1 is the issue number. For more features, consult the linked Gitlab syntax guide. + +If you don't like reading documentation, [here's a cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..1b6605b --- /dev/null +++ b/build.gradle @@ -0,0 +1,69 @@ +plugins { + id 'java-library' + id 'application' + id 'org.openjfx.javafxplugin' version '0.0.10' +} + +javafx { + version = "11.0.2" + modules = ['javafx.controls', 'javafx.fxml', 'javafx.base'] +} + +group 'ch.unibas.dmi.dbis' +version '0.0.1-ALPHA' +mainClassName = 'ch.unibas.dmi.dbis.cs108.example.HelloWorld' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} + +//adds maven central as a maven repository +repositories { + mavenCentral() +} + +/* The following lines are extensively documented. Please remove the documentation when you have read and understood it. */ +dependencies { + // EXAMPLE: LOGGING + /* + The following adds the logging framework Apache Log4J2. + The statements serve as an example on how to use libraries. + Since these are `implementation` dependencies, they are packed in the final jar. + Read the documentation at https://docs.gradle.org/current/userguide/declaring_dependencies.html to learn more + */ + //implementation 'org.apache.logging.log4j:log4j-api:2.+' + //implementation 'org.apache.logging.log4j:log4j-core:2.+' + + /* + This is another example - it imports the javafx-controls dependency + */ + implementation 'org.openjfx:javafx-controls:11.0.2' + + // JUNIT + /* + The following dependency is required to perform JUnit tests, as for example HelloWorldTest. + Since it is a `testCompile` dependency, it will not be part of the final product, only during testing. + */ + testImplementation("org.junit.jupiter:junit-jupiter:5.+") +} + +test { + useJUnitPlatform() +} + +/* +The following block adds both compile and runtime dependencies to the jar + */ +jar { + manifest { + attributes( + 'Main-Class': mainClassName + ) + } + from { + configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..4d2218c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..6d22ecf --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Jan 24 10:56:59 CET 2018 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/outreach/game.properties b/outreach/game.properties new file mode 100644 index 0000000..3e65681 --- /dev/null +++ b/outreach/game.properties @@ -0,0 +1,8 @@ +game.name = Example Game +game.command = java -jar exampleGame.jar +game.description.file = index.html +game.screenshot.file = example.png +game.server.command = java -jar exampleGame.jar +game.use = true +game.year = 2020 +game.developers = Tom Cat, Jerry Mouse, William Hanna, Joseph Barbera diff --git a/outreach/index.html b/outreach/index.html new file mode 100644 index 0000000..76e9e65 --- /dev/null +++ b/outreach/index.html @@ -0,0 +1,53 @@ + + + +Example Game + + + +
+ +

Example Game

+Hier könnt ihr einen Satz über euer Spiel sagen. + + +
+ +
+
+

Trailer

+ +
+
+ + + +

Entwickler:

+
    +
  • Edgar Codd
  • +
  • Lynn Conway
  • +
  • Ada Lovelace
  • +
  • Alan Turing
  • +
+ + + +

Steuerung:

+Pfeiltasten: bewegen
+Leertaste: springen
+I: Inventar
+Esc: Spiel beenden
+P: Spiel pausieren + + + +

Inventar:

+Eisblock: Gegner können sich nicht mehr bewegen
+Schwarzes Loch: Steuerung der Gegner wird invertiert + +
+ diff --git a/outreach/main.css b/outreach/main.css new file mode 100644 index 0000000..b86eff1 --- /dev/null +++ b/outreach/main.css @@ -0,0 +1,667 @@ +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; +} + +/** + * Basic styling + */ +body { + font-family: Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 1.5; + font-weight: 300; + color: #111; + background-color: #fdfdfd; + -webkit-text-size-adjust: 100%; +} + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +.highlight { + margin-bottom: 15px; +} + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: 14px; +} + +/** + * Lists + */ +ul, ol { + margin-left: 30px; +} + +li > ul, +li > ol { + margin-bottom: 0; +} + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: 300; +} + +/** + * Links + */ +a { + color: #2a7ae2; + text-decoration: none; +} + +a:visited { + color: #1756a9; +} + +a:hover { + color: #111; + text-decoration: underline; +} + +/** + * Blockquotes + */ +blockquote { + color: #828282; + border-left: 4px solid #e8e8e8; + padding-left: 15px; + font-size: 18px; + letter-spacing: -1px; + font-style: italic; +} + +blockquote > :last-child { + margin-bottom: 0; +} + +/** + * Code formatting + */ +pre, +code { + font-size: 15px; + border: 1px solid #e8e8e8; + border-radius: 3px; + background-color: #eef; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: scroll; +} + +pre > code { + border: 0; + padding-right: 0; + padding-left: 0; +} + +/** + * Wrapper + */ +.wrapper { + max-width: -webkit-calc(800px - (30px * 2)); + max-width: calc(800px - (30px * 2)); + margin-right: auto; + margin-left: auto; + padding-right: 30px; + padding-left: 30px; +} + +@media screen and (max-width: 800px) { + .wrapper { + max-width: -webkit-calc(800px - (30px)); + max-width: calc(800px - (30px)); + padding-right: 15px; + padding-left: 15px; + } +} + +/** + * Clearfix + */ +.wrapper:after, .footer-col-wrapper:after { + content: ""; + display: table; + clear: both; +} + +/** + * Icons + */ +.icon > svg { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; +} + +.icon > svg path { + fill: #828282; +} + +/** + * Site header + */ +.site-header { + border-top: 5px solid #424242; + border-bottom: 1px solid #e8e8e8; + min-height: 56px; + position: relative; +} + +.site-title { + font-size: 26px; + line-height: 56px; + letter-spacing: -1px; + margin-bottom: 0; + float: left; +} + +.site-title, .site-title:visited { + color: #424242; +} + +.site-nav { + float: right; + line-height: 56px; +} + +.site-nav .menu-icon { + display: none; +} + +.site-nav .page-link { + color: #111; + line-height: 1.5; +} + +.site-nav .page-link:not(:first-child) { + margin-left: 20px; +} + +@media screen and (max-width: 600px) { + .site-nav { + position: absolute; + top: 9px; + right: 30px; + background-color: #fdfdfd; + border: 1px solid #e8e8e8; + border-radius: 5px; + text-align: right; + } + + .site-nav .menu-icon { + display: block; + float: right; + width: 36px; + height: 26px; + line-height: 0; + padding-top: 10px; + text-align: center; + } + + .site-nav .menu-icon > svg { + width: 18px; + height: 15px; + } + + .site-nav .menu-icon > svg path { + fill: #424242; + } + + .site-nav .trigger { + clear: both; + display: none; + } + + .site-nav:hover .trigger { + display: block; + padding-bottom: 5px; + } + + .site-nav .page-link { + display: block; + padding: 5px 10px; + } +} + +/** + * Site footer + */ +.site-footer { + border-top: 1px solid #e8e8e8; + padding: 30px 0; +} + +.footer-heading { + font-size: 18px; + margin-bottom: 15px; +} + +.contact-list, +.social-media-list { + list-style: none; + margin-left: 0; +} + +.footer-col-wrapper { + font-size: 15px; + color: #828282; + margin-left: -15px; +} + +.footer-col { + float: left; + margin-bottom: 15px; + padding-left: 15px; +} + +.footer-col-1 { + width: -webkit-calc(35% - (30px / 2)); + width: calc(35% - (30px / 2)); +} + +.footer-col-2 { + width: -webkit-calc(20% - (30px / 2)); + width: calc(20% - (30px / 2)); +} + +.footer-col-3 { + width: -webkit-calc(45% - (30px / 2)); + width: calc(45% - (30px / 2)); +} + +@media screen and (max-width: 800px) { + .footer-col-1, + .footer-col-2 { + width: -webkit-calc(50% - (30px / 2)); + width: calc(50% - (30px / 2)); + } + + .footer-col-3 { + width: -webkit-calc(100% - (30px / 2)); + width: calc(100% - (30px / 2)); + } +} + +@media screen and (max-width: 600px) { + .footer-col { + float: none; + width: -webkit-calc(100% - (30px / 2)); + width: calc(100% - (30px / 2)); + } +} + +/** + * Page content + */ +.page-content { + padding: 30px 0; +} + +.page-heading { + font-size: 20px; +} + +.post-list { + margin-left: 0; + list-style: none; +} + +.post-list > li { + margin-bottom: 30px; +} + +.post-meta { + font-size: 14px; + color: #828282; +} + +.post-link { + display: block; + font-size: 24px; +} + +/** + * Posts + */ +.post-header { + margin-bottom: 30px; +} + +.post-title { + font-size: 42px; + letter-spacing: -1px; + line-height: 1; +} + +@media screen and (max-width: 800px) { + .post-title { + font-size: 36px; + } +} + +.post-content { + margin-bottom: 30px; +} + +.post-content h2 { + font-size: 32px; +} + +@media screen and (max-width: 800px) { + .post-content h2 { + font-size: 28px; + } +} + +.post-content h3 { + font-size: 26px; +} + +@media screen and (max-width: 800px) { + .post-content h3 { + font-size: 22px; + } +} + +.post-content h4 { + font-size: 20px; +} + +@media screen and (max-width: 800px) { + .post-content h4 { + font-size: 18px; + } +} + +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; +} + +.highlight .c { + color: #998; + font-style: italic; +} + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; +} + +.highlight .k { + font-weight: bold; +} + +.highlight .o { + font-weight: bold; +} + +.highlight .cm { + color: #998; + font-style: italic; +} + +.highlight .cp { + color: #999; + font-weight: bold; +} + +.highlight .c1 { + color: #998; + font-style: italic; +} + +.highlight .cs { + color: #999; + font-weight: bold; + font-style: italic; +} + +.highlight .gd { + color: #000; + background-color: #fdd; +} + +.highlight .gd .x { + color: #000; + background-color: #faa; +} + +.highlight .ge { + font-style: italic; +} + +.highlight .gr { + color: #a00; +} + +.highlight .gh { + color: #999; +} + +.highlight .gi { + color: #000; + background-color: #dfd; +} + +.highlight .gi .x { + color: #000; + background-color: #afa; +} + +.highlight .go { + color: #888; +} + +.highlight .gp { + color: #555; +} + +.highlight .gs { + font-weight: bold; +} + +.highlight .gu { + color: #aaa; +} + +.highlight .gt { + color: #a00; +} + +.highlight .kc { + font-weight: bold; +} + +.highlight .kd { + font-weight: bold; +} + +.highlight .kp { + font-weight: bold; +} + +.highlight .kr { + font-weight: bold; +} + +.highlight .kt { + color: #458; + font-weight: bold; +} + +.highlight .m { + color: #099; +} + +.highlight .s { + color: #d14; +} + +.highlight .na { + color: #008080; +} + +.highlight .nb { + color: #0086B3; +} + +.highlight .nc { + color: #458; + font-weight: bold; +} + +.highlight .no { + color: #008080; +} + +.highlight .ni { + color: #800080; +} + +.highlight .ne { + color: #900; + font-weight: bold; +} + +.highlight .nf { + color: #900; + font-weight: bold; +} + +.highlight .nn { + color: #555; +} + +.highlight .nt { + color: #000080; +} + +.highlight .nv { + color: #008080; +} + +.highlight .ow { + font-weight: bold; +} + +.highlight .w { + color: #bbb; +} + +.highlight .mf { + color: #099; +} + +.highlight .mh { + color: #099; +} + +.highlight .mi { + color: #099; +} + +.highlight .mo { + color: #099; +} + +.highlight .sb { + color: #d14; +} + +.highlight .sc { + color: #d14; +} + +.highlight .sd { + color: #d14; +} + +.highlight .s2 { + color: #d14; +} + +.highlight .se { + color: #d14; +} + +.highlight .sh { + color: #d14; +} + +.highlight .si { + color: #d14; +} + +.highlight .sx { + color: #d14; +} + +.highlight .sr { + color: #009926; +} + +.highlight .s1 { + color: #d14; +} + +.highlight .ss { + color: #990073; +} + +.highlight .bp { + color: #999; +} + +.highlight .vc { + color: #008080; +} + +.highlight .vg { + color: #008080; +} + +.highlight .vi { + color: #008080; +} + +.highlight .il { + color: #099; +} diff --git a/outreach/readMe.md b/outreach/readMe.md new file mode 100644 index 0000000..6b716bb --- /dev/null +++ b/outreach/readMe.md @@ -0,0 +1,27 @@ +# Abgabeanforderungen für Outreach + +Einzelne Spiele des Programmierprojektes werden jeweils an den Infotagen der Universität Basel und an anderen Events ausgestellt. Damit dies reibungslos funktioniert, müssen die Abgaben gewisse Anforderungen erfüllen. Im folgenden wird erklärt, was von euch für die Abgabe erwartet wird. + +Euer Repository muss bei Meilenstein 5 im root den `outreach/` Ordner haben, welcher folgendes beinhaltet: +* Properties File (`game.properties`) +* Trailer / Gameplay Video im .mp4-Format (`video.mp4`) +* Screenshot im .png-Format (`screenshot.png`) +* index.html-File zu Archivierungszwecken(`index.html`) +* Manual als pdf + +## Properties File: + +Das `game.properties` File beinhaltet die wichtigsten Eigenschaften eures Spieles. Wir benützen es beim Game Kiosk, um mehrere Spiele zu verwalten. Passt die Informationen entsprechend eurem Spiel an. Öffnen könnt Ihr dies mit den meisten Editoren und IDE's. + +Bei `game.name` gebt ihr den Namen eures Spiels an, bei `game.command` und `game.server.command` müsst ihr den Namen des .jar-Files anpassen. + +`game.description.file`, `game.screenshot.file` und `game.use` könnt ihr so lassen. + +Bei `game.year` sollt ihr das Jahr angeben, in dem das Spiel entwickelt wurde (Format YYYY). + +Zuletzt sollt ihr bei `game.developers` alle eure Entwickler_innen mit vollem Namen angeben. + +## HTML-File zu Archivierungszwecken: +Wir archivieren die Spiele des Programmierprojektes auf http://p9.dmi.unibas.ch/cs108/. Zu diesem Zweck brauchen wir von allen Gruppen ein HTML-File, welches Infos zum Spiel enthält (und ab 2020 dazu, wie das Spiel gespielt wird). + +Passt alle Teile wie im `index.html` File beschrieben an. diff --git a/outreach/screenshot.png b/outreach/screenshot.png new file mode 100644 index 0000000..fc60247 Binary files /dev/null and b/outreach/screenshot.png differ diff --git a/outreach/video.mp4 b/outreach/video.mp4 new file mode 100644 index 0000000..80274a1 Binary files /dev/null and b/outreach/video.mp4 differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..bebfb1d --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'example-project' + diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/example/HelloWorld.java b/src/main/java/ch/unibas/dmi/dbis/cs108/example/HelloWorld.java new file mode 100644 index 0000000..b4d6b72 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/example/HelloWorld.java @@ -0,0 +1,12 @@ +package ch.unibas.dmi.dbis.cs108.example; + +/** + * A simple HelloWorld class. + */ +public class HelloWorld { + + public static void main(String[] args) { + System.out.println("Hello World"); + } + +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/GUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/GUI.java new file mode 100644 index 0000000..3746cae --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/GUI.java @@ -0,0 +1,32 @@ +package ch.unibas.dmi.dbis.cs108.example.gui.javafx; + +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +/** + * This is an example JavaFX-Application. + */ +public class GUI extends Application { + + /** + * Launching this method will not work on some platforms. + * What you should do is to create a separate main class and launch the GUI class from there as is done in {@link Main} + */ + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage stage) { + String javaVersion = System.getProperty("java.version"); + String javafxVersion = System.getProperty("javafx.version"); + Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + "."); + Scene scene = new Scene(new StackPane(l), 640, 480); + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/Main.java b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/Main.java new file mode 100644 index 0000000..aac1f4d --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/javafx/Main.java @@ -0,0 +1,14 @@ +package ch.unibas.dmi.dbis.cs108.example.gui.javafx; + +import javafx.application.Application; + +public class Main { + + /** + * This is simply a wrapper to launch the {@link GUI} class. + * The reason this class exists is documented in {@link GUI#main(String[])} + */ + public static void main(String[] args) { + Application.launch(GUI.class, args); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/swing/SwingGUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/swing/SwingGUI.java new file mode 100644 index 0000000..8e427cd --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/example/gui/swing/SwingGUI.java @@ -0,0 +1,29 @@ +package ch.unibas.dmi.dbis.cs108.example.gui.swing; + +import javax.swing.JFrame; +import javax.swing.JLabel; + +/** + * This is an example Swing Application + */ +public class SwingGUI { + + private static void createAndShowGUI() { + // Make sure we have nice window decorations + JFrame.setDefaultLookAndFeelDecorated(true); + // Create and set up the window. + JFrame frame = new JFrame("HelloWorldSwing"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Add the ubiquitous "Hello World" label + JLabel label = new JLabel("Hello World"); + frame.getContentPane().add(label); + // Display the window + frame.pack(); + frame.setVisible(true); + } + + public static void main(String[] args) { + // Schedule a job for the event-dispatching thread: // creating and showing this application's GUI + javax.swing.SwingUtilities.invokeLater(() -> createAndShowGUI()); + } + +} diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/example/HelloWorldTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/example/HelloWorldTest.java new file mode 100644 index 0000000..a91b85d --- /dev/null +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/example/HelloWorldTest.java @@ -0,0 +1,67 @@ +package ch.unibas.dmi.dbis.cs108.example; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * An example test class. + * Checks the output of the {@link HelloWorld} class and makes sure it contains "Hello World" + */ +public class HelloWorldTest { + + /* + * Streams to store system.out and system.err content + */ + private ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + private ByteArrayOutputStream errStream = new ByteArrayOutputStream(); + + /* + * Here we store the previous pointers to system.out / system.err + */ + private PrintStream outBackup; + private PrintStream errBackup; + + /** + * This method is executed before each test. + * It redirects System.out and System.err to our variables {@link #outStream} and {@link #errStream}. + * This allows us to test their content later. + */ + @BeforeEach + public void redirectStdOutStdErr() { + outBackup = System.out; + errBackup = System.err; + System.setOut(new PrintStream(outStream)); + System.setErr(new PrintStream(errStream)); + } + + /** + * This method is run after each test. + * It redirects System.out / System.err back to the normal streams. + */ + @AfterEach + public void reestablishStdOutStdErr() { + System.setOut(outBackup); + System.setErr(errBackup); + } + + /** + * This is a normal JUnit-Test. It executes the HelloWorld-Method and verifies that it actually wrote "Hello World" to stdout + */ + @Test + public void testMain() { + HelloWorld.main(new String[0]); + String toTest = outStream.toString(); + toTest = removeNewline(toTest); + assertTrue(toTest.contains("Hello World")); + } + + private static String removeNewline(String str) { + return str.replace("\n", "").replace("\r", ""); + } +}