diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2024-11-17 13:45:44 +0200 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2024-11-17 13:45:44 +0200 |
commit | 4de67b497e0e229fe4a42f66f833640b6e50fd5a (patch) | |
tree | 34fb5b0e776f7cd3adcb4556f4d6a7c8ad66de39 | |
parent | 8595e892abc0e0554f589ed2eb88c351a347fbd4 (diff) | |
download | scalevalapokalypsi-4de67b497e0e229fe4a42f66f833640b6e50fd5a.tar.gz scalevalapokalypsi-4de67b497e0e229fe4a42f66f833640b6e50fd5a.zip |
Moved the project to an IDEA project & wrote part of README.txt
-rw-r--r-- | .gitignore | 8 | ||||
-rw-r--r-- | .idea/.gitignore | 3 | ||||
-rw-r--r-- | .idea/codeStyles/Project.xml | 7 | ||||
-rw-r--r-- | .idea/codeStyles/codeStyleConfig.xml | 5 | ||||
-rw-r--r-- | .idea/inspectionProfiles/Project_Default.xml | 93 | ||||
-rw-r--r-- | .idea/misc.xml | 6 | ||||
-rw-r--r-- | .idea/modules.xml | 8 | ||||
-rw-r--r-- | .idea/scala_settings.xml | 6 | ||||
-rw-r--r-- | .idea/vcs.xml | 6 | ||||
-rw-r--r-- | README.txt | 83 | ||||
-rw-r--r-- | protocol.txt | 16 | ||||
-rw-r--r-- | scalevalapokalypsi.iml | 12 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Client/Client.scala (renamed from src/main/scala/Client/Client.scala) | 8 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Client/ReceivedLineParser.scala (renamed from src/main/scala/Client/ReceivedLineParser.scala) | 4 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Client/StdinLineReader.scala (renamed from src/main/scala/Client/StdinLineReader.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Client/Turn.scala (renamed from src/main/scala/Client/Turn.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Action.scala (renamed from src/main/scala/Model/Action.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Adventure.scala (renamed from src/main/scala/Model/Adventure.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Area.scala (renamed from src/main/scala/Model/Area.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Entity.scala (renamed from src/main/scala/Model/Entity.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Item.scala (renamed from src/main/scala/Model/Item.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Server/Client.scala (renamed from src/main/scala/Server/Client.scala) | 6 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Server/Clients.scala (renamed from src/main/scala/Server/Clients.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Server/ConnectionGetter.scala (renamed from src/main/scala/Server/ConnectionGetter.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Server/Server.scala (renamed from src/main/scala/Server/Server.scala) | 8 | ||||
-rw-r--r-- | src/scalevalapokalypsi/constants/constants.scala (renamed from src/main/scala/Server/constants.scala) | 2 | ||||
-rw-r--r-- | src/scalevalapokalypsi/main.scala (renamed from src/main/scala/main.scala) | 7 | ||||
-rw-r--r-- | src/scalevalapokalypsi/utils/utils.scala (renamed from src/main/scala/utils.scala) | 2 | ||||
-rw-r--r-- | tyylimaare.txt | 157 |
29 files changed, 258 insertions, 207 deletions
@@ -1,7 +1 @@ -.bsp -.idea -build.sbt -project -target -src/main/scala/.bsp -src/main/scala/.scala-build +out diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..919ce1f --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,7 @@ +<component name="ProjectCodeStyleConfiguration"> + <code_scheme name="Project" version="173"> + <ScalaCodeStyleSettings> + <option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" /> + </ScalaCodeStyleSettings> + </code_scheme> +</component>
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ +<component name="ProjectCodeStyleConfiguration"> + <state> + <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" /> + </state> +</component>
\ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..0f76f37 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,93 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="Annotator" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="CaseClassParam" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="CheckDtdRefs" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="CheckEmptyScriptTag" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="CheckTagEmptyBody" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="CheckValidXmlInScriptTagBody" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="CheckXmlFileWithXercesValidator" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="ConvertibleToMethodValue" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="DeprecatedClassUsageInspection" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="FunctionTupleSyntacticSugar" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="HtmlExtraClosingTag" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="HtmlMissingClosingTag" enabled="false" level="INFORMATION" enabled_by_default="false" /> + <inspection_tool class="HtmlUnknownAnchorTarget" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="HtmlUnknownAttribute" enabled="false" level="WARNING" enabled_by_default="false"> + <option name="myValues"> + <value> + <list size="0" /> + </value> + </option> + <option name="myCustomValuesEnabled" value="true" /> + </inspection_tool> + <inspection_tool class="HtmlUnknownBooleanAttribute" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="HtmlUnknownTag" enabled="false" level="WARNING" enabled_by_default="false"> + <option name="myValues"> + <value> + <list size="6"> + <item index="0" class="java.lang.String" itemvalue="nobr" /> + <item index="1" class="java.lang.String" itemvalue="noembed" /> + <item index="2" class="java.lang.String" itemvalue="comment" /> + <item index="3" class="java.lang.String" itemvalue="noscript" /> + <item index="4" class="java.lang.String" itemvalue="embed" /> + <item index="5" class="java.lang.String" itemvalue="script" /> + </list> + </value> + </option> + <option name="myCustomValuesEnabled" value="true" /> + </inspection_tool> + <inspection_tool class="HtmlUnknownTarget" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="IfElseToFilterdOption" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="Json5StandardCompliance" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="JsonDuplicatePropertyKeys" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="JsonSchemaCompliance" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="JsonSchemaDeprecation" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="JsonSchemaRefReference" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="JsonStandardCompliance" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="LossyEncoding" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="MutatorLikeMethodIsParameterless" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="NameBooleanParameters" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="NoTailRecursionAnnotation" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="NonAsciiCharacters" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="NotImplementedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true" /> + <inspection_tool class="OptionEqualsSome" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RedundantBlock" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RedundantCollectionConversion" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RedundantDefaultArgument" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="RedundantNewCaseClass" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="ReferenceMustBePrefixed" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RegExpRedundantEscape" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RegExpRepeatedSpace" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="RegExpSingleCharAlternation" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="ReplaceToWithUntil" enabled="true" level="WEAK WARNING" enabled_by_default="true" /> + <inspection_tool class="RequiredAttributes" enabled="false" level="WARNING" enabled_by_default="false"> + <option name="myAdditionalRequiredHtmlAttributes" value="" /> + </inspection_tool> + <inspection_tool class="ScalaDocParserErrorInspection" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="ScalaDocUnclosedTagWithoutParser" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="ScalaFileName" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="ScalaUnnecessaryParentheses" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="ScalaUnusedExpression" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="ScalaUnusedSymbol" enabled="false" level="WEAK WARNING" enabled_by_default="false" /> + <inspection_tool class="ScalaWeakerAccess" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> + <option name="processCode" value="true" /> + <option name="processLiterals" value="true" /> + <option name="processComments" value="true" /> + </inspection_tool> + <inspection_tool class="SyntaxError" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="TypeAnnotation" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="TypeParameterShadow" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="XmlDefaultAttributeValue" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="XmlDeprecatedElement" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="XmlDuplicatedId" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="XmlHighlighting" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="XmlInvalidId" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="XmlPathReference" enabled="false" level="ERROR" enabled_by_default="false" /> + <inspection_tool class="XmlUnboundNsPrefix" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="XmlUnusedNamespaceDeclaration" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="XmlWrongRootElement" enabled="false" level="ERROR" enabled_by_default="false" /> + </profile> +</component>
\ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e6be3f1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/out" /> + </component> +</project>
\ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8a7c304 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/scalevalapokalypsi.iml" filepath="$PROJECT_DIR$/scalevalapokalypsi.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/.idea/scala_settings.xml b/.idea/scala_settings.xml new file mode 100644 index 0000000..4608fe0 --- /dev/null +++ b/.idea/scala_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ScalaProjectSettings"> + <option name="scala3DisclaimerShown" value="true" /> + </component> +</project>
\ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project>
\ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5f4f277 --- /dev/null +++ b/README.txt @@ -0,0 +1,83 @@ + +[PELIN NIMI TÄHÄN] +================== + +[pelin nimi] on tekstipeli, joka jäljittelee hieman Infocomin tekstipelejä ja +Z-koneen tuntumaa. Koska Z-koneen uudelleen keksiminen olisi tylsää, toteuttaa +[pelin nimi] ominaisuuksia, joita Z-koneeseen olisi ollut hankala toteuttaa. +Tällä on toki hintansa — seikkailujen lukeminen tekstitiedostoista olisi +tämän pelin Z-koneen ylittävien ominaisuuksien vuoksi hankalaa. + +Ensimmäinen olennainen lisäys on moninpelipainotteisuus. Tämä olisi todennnä- +köisesti ollut toteutettavissa Z-koneeseenkin, esim: +=> https://github.com/icculus/mojozork + +Toinen olennainen lisäys on suomalainen kulttuuriperintö, aikapaineella höys- +tettynä: pelissä lauletaan vihamiehiä suohon, ja se tapahtuu kirjoitusnopeus- +testien merkeissä! + +Z-koneen kannalta haastavin lisäys (joskaan ei muutoin tämän pelin teknisesti +haastavin osuus) lienee monimutkaisempi ei-pelattavien henkilöhahmojen +tekoäly. Kun tekoälyt kirjoitetaan suoraan scala-ohjelmaan funktioina, voivat +ne olennaisesti tehdä mitä tahansa, sen sijaan että Z-kone millään lailla +rajoittaisi niitä. + + +Pelin käynnistäminen +-------------------- + +[yksittäisen käyttäjän käynnistäminen] + +Moninpeliominaisuudesta saat eniten iloa irti, joten jaa [pelin nimi] +ystävillesi ja ala pelaamaan! Jos sinulla ei ole ystäviä, voit myös kokea +moninpeliominaisuuden mahtavuuden hieman vaisumpana käynnistämällä toisen +käyttäjän ylläolevien ohjeiden mukaisesti ja liittymällä samaan peliin +(eli samalle serverille), johon edellisellä käyttäjällä liityit. Toista +tämä niin monta kertaa kuin tahdot, kunnes serveri valittaa liian suuresta +pelaajamäärästä. + + +Pelin tavoite +------------- + +[lisää pelille tavoite] + + +Pelin pelaaminen +---------------- + +[pelin nimeä] ohjataan kutakuinkin samalla lailla, kuin Z-koneen pelejä. +On kuitenkin hyvä huomata, että peliä ohjaava serveri usein pakottaa vuorot +tiettyyn aikaraamiin muiden pelaajien odottelun vähentämiseksi. Tämä aikaraja +näkyy aina syötteen (merkitään '>'-merkillä) edessä: +``` +Istut metsässä ja pohdit maailman menoa. Polkuja johtaa kaikkiin ilmansuuntiin. +[30]> +``` +Yllä aikaraja olisi 30 sekuntia. + +Myöskään kaikki komennot eivät ole samoja kuin Z-koneessa, eikä se ollut +tavoitekaan. Alla on lista komennoista: + +`mene [suunta]` + Käskee pelaajan liikkua annettuun suuntaan. + +`lepää` + Käskee pelaajan levätä, eli odottaa vuoron päättymistä. + +`sano [viisaus]` + Sanoo annetun enemmän tai vähemmän viisaan lausahduksen ääneen. + +`sano [terveiset] henkilölle [äiti]` + Sanoo annetut terveiset annetulle pelin sisäiselle henkilölle. + Pelin tekijöitä ei kuulu pitää vastuussa, jos tätä kautta yritetään + välittää terveisiä pelin ulkopuolisille henkilöille. + +`laula [olento] suohon` + Aloittaa annetun olennon suohonlaulannan. Peli tulee seuraavaksi pyytämään + sinua kirjoittamaan jonkin säkeen, todennäköisesti kalevanlamitassa. + Kirjoita tämä säe niin nopeasti kuin pystyt, koska + laulun vaikutus määräytyy kirjoitusnopeuden + perusteella! + +[lisää loput käskyt] diff --git a/protocol.txt b/protocol.txt deleted file mode 100644 index bbeae64..0000000 --- a/protocol.txt +++ /dev/null @@ -1,16 +0,0 @@ -Client: [version number]CRLF[client name|] -Server: [good/version old] -... -Server: [time limit in int/secs]CRLF # signifies game start - [instantly gives turn info] - -Before turn: -N x [Action blocker indicator][Description of action during previous turn]CRLF -At start of turn: -Server: [turn indicator]CRLF - [Description of area]CRLF - [Directions separated with semicolon]CRLF - [Visible items separated with semicolon]CRLF - [Entities separated with semicolon]CRLF - -When running turn: [CRLF-separated list of things happening in the players room] diff --git a/scalevalapokalypsi.iml b/scalevalapokalypsi.iml new file mode 100644 index 0000000..a76f8e7 --- /dev/null +++ b/scalevalapokalypsi.iml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" name="scala-sdk-3.3.0" level="application" /> + </component> +</module>
\ No newline at end of file diff --git a/src/main/scala/Client/Client.scala b/src/scalevalapokalypsi/Client/Client.scala index fc3e6b8..41b1003 100644 --- a/src/main/scala/Client/Client.scala +++ b/src/scalevalapokalypsi/Client/Client.scala @@ -1,12 +1,12 @@ -package o1game.Client +package scalevalapokalypsi.Client import java.lang.Thread.sleep import java.net.Socket import scala.io.Source import scala.sys.process.stdout -import o1game.constants.* -import o1game.utils.{stringToByteArray,getNCharsFromSocket} -import o1game.Client.{ReceivedLineParser,StdinLineReader,Turn} +import scalevalapokalypsi.constants.* +import scalevalapokalypsi.utils.{stringToByteArray,getNCharsFromSocket} +import scalevalapokalypsi.Client.{ReceivedLineParser,StdinLineReader,Turn} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Try, Success, Failure} diff --git a/src/main/scala/Client/ReceivedLineParser.scala b/src/scalevalapokalypsi/Client/ReceivedLineParser.scala index 7cbf935..dfcc2d2 100644 --- a/src/main/scala/Client/ReceivedLineParser.scala +++ b/src/scalevalapokalypsi/Client/ReceivedLineParser.scala @@ -1,7 +1,7 @@ -package o1game.Client +package scalevalapokalypsi.Client import scala.collection.mutable.Buffer -import o1game.constants.* +import scalevalapokalypsi.constants.* /** A class for checking asynchronously for received lines */ class ReceivedLineParser: diff --git a/src/main/scala/Client/StdinLineReader.scala b/src/scalevalapokalypsi/Client/StdinLineReader.scala index 42a1f40..6ba8761 100644 --- a/src/main/scala/Client/StdinLineReader.scala +++ b/src/scalevalapokalypsi/Client/StdinLineReader.scala @@ -1,4 +1,4 @@ -package o1game.Client +package scalevalapokalypsi.Client import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global diff --git a/src/main/scala/Client/Turn.scala b/src/scalevalapokalypsi/Client/Turn.scala index 6b78811..30101c5 100644 --- a/src/main/scala/Client/Turn.scala +++ b/src/scalevalapokalypsi/Client/Turn.scala @@ -1,4 +1,4 @@ -package o1game.Client +package scalevalapokalypsi.Client /** `Turn`s represent information the client has got about a turn. * This class exists essentially so that the client has somewhere diff --git a/src/main/scala/Model/Action.scala b/src/scalevalapokalypsi/Model/Action.scala index 55f7f27..32f513d 100644 --- a/src/main/scala/Model/Action.scala +++ b/src/scalevalapokalypsi/Model/Action.scala @@ -1,4 +1,4 @@ -package o1game.Model +package scalevalapokalypsi.Model /** The class `Action` represents actions that a player may take in a text adventure game. * `Action` objects are constructed on the basis of textual commands and are, in effect, diff --git a/src/main/scala/Model/Adventure.scala b/src/scalevalapokalypsi/Model/Adventure.scala index dfcb100..2bf6cfe 100644 --- a/src/main/scala/Model/Adventure.scala +++ b/src/scalevalapokalypsi/Model/Adventure.scala @@ -1,4 +1,4 @@ -package o1game.Model +package scalevalapokalypsi.Model import scala.collection.mutable.Map diff --git a/src/main/scala/Model/Area.scala b/src/scalevalapokalypsi/Model/Area.scala index 6721957..c891af8 100644 --- a/src/main/scala/Model/Area.scala +++ b/src/scalevalapokalypsi/Model/Area.scala @@ -1,4 +1,4 @@ -package o1game.Model +package scalevalapokalypsi.Model import scala.collection.mutable.Map diff --git a/src/main/scala/Model/Entity.scala b/src/scalevalapokalypsi/Model/Entity.scala index d8e8559..083c37f 100644 --- a/src/main/scala/Model/Entity.scala +++ b/src/scalevalapokalypsi/Model/Entity.scala @@ -1,4 +1,4 @@ -package o1game.Model +package scalevalapokalypsi.Model import scala.collection.mutable.{Buffer,Map} diff --git a/src/main/scala/Model/Item.scala b/src/scalevalapokalypsi/Model/Item.scala index 229828d..7979480 100644 --- a/src/main/scala/Model/Item.scala +++ b/src/scalevalapokalypsi/Model/Item.scala @@ -1,4 +1,4 @@ -package o1game.Model +package scalevalapokalypsi.Model import scala.annotation.targetName diff --git a/src/main/scala/Server/Client.scala b/src/scalevalapokalypsi/Server/Client.scala index 3cd2b36..6ce2522 100644 --- a/src/main/scala/Server/Client.scala +++ b/src/scalevalapokalypsi/Server/Client.scala @@ -1,10 +1,10 @@ -package o1game.Server +package scalevalapokalypsi.Server import java.net.Socket import scala.math.min -import o1game.constants.* +import scalevalapokalypsi.constants.* import ServerProtocolState.* -import o1game.Model.{Action,Player,Entity} +import scalevalapokalypsi.Model.{Action,Player,Entity} class Client(val socket: Socket): private var incompleteMessage: Array[Byte] = diff --git a/src/main/scala/Server/Clients.scala b/src/scalevalapokalypsi/Server/Clients.scala index 6487446..377050d 100644 --- a/src/main/scala/Server/Clients.scala +++ b/src/scalevalapokalypsi/Server/Clients.scala @@ -1,4 +1,4 @@ -package o1game.Server +package scalevalapokalypsi.Server import scala.util.Try import scala.util.Random diff --git a/src/main/scala/Server/ConnectionGetter.scala b/src/scalevalapokalypsi/Server/ConnectionGetter.scala index b3246a7..40830c7 100644 --- a/src/main/scala/Server/ConnectionGetter.scala +++ b/src/scalevalapokalypsi/Server/ConnectionGetter.scala @@ -1,4 +1,4 @@ -package o1game.Server +package scalevalapokalypsi.Server import java.io.IOException import java.net.{ServerSocket, Socket} diff --git a/src/main/scala/Server/Server.scala b/src/scalevalapokalypsi/Server/Server.scala index 7864c49..13ca2f5 100644 --- a/src/main/scala/Server/Server.scala +++ b/src/scalevalapokalypsi/Server/Server.scala @@ -1,4 +1,4 @@ -package o1game.Server +package scalevalapokalypsi.Server // TODO: TLS/SSL / import javax.net.ssl.SSLServerSocketFactory @@ -6,9 +6,9 @@ package o1game.Server import java.lang.Thread.{currentThread, sleep} import java.io.IOException import java.net.{ServerSocket, Socket} -import o1game.constants.* -import o1game.Model.{Adventure,Entity,Player} -import o1game.utils.stringToByteArray +import scalevalapokalypsi.constants.* +import scalevalapokalypsi.Model.{Adventure,Entity,Player} +import scalevalapokalypsi.utils.stringToByteArray import java.lang.System.currentTimeMillis import scala.util.Try diff --git a/src/main/scala/Server/constants.scala b/src/scalevalapokalypsi/constants/constants.scala index 083db4e..d5abb43 100644 --- a/src/main/scala/Server/constants.scala +++ b/src/scalevalapokalypsi/constants/constants.scala @@ -1,5 +1,5 @@ -package o1game.constants +package scalevalapokalypsi.constants val MAX_MSG_SIZE = 1024 // bytes val CRLF: Vector[Byte] = Vector(13.toByte, 10.toByte) diff --git a/src/main/scala/main.scala b/src/scalevalapokalypsi/main.scala index d68664a..9633f73 100644 --- a/src/main/scala/main.scala +++ b/src/scalevalapokalypsi/main.scala @@ -1,6 +1,7 @@ +package scalevalapokalypsi -import o1game.Client.newClient -import o1game.Server.Server +import scalevalapokalypsi.Client.newClient +import scalevalapokalypsi.Server.Server import java.lang.Thread import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global @@ -12,7 +13,7 @@ import scala.io.StdIn.readLine print("How do you want to play?\n1) Host and join local game\n2) Join local game\n> ") readLine().toIntOption match case Some(1) => - Thread(() => Server(2267, 5, 30, true).startServer()).start() + Thread(() => new Server(2267, 5, 30, true).startServer()).start() println("Server started in background.") print("Choose a name:\n> ") val name = readLine() diff --git a/src/main/scala/utils.scala b/src/scalevalapokalypsi/utils/utils.scala index cfca568..b1bac4d 100644 --- a/src/main/scala/utils.scala +++ b/src/scalevalapokalypsi/utils/utils.scala @@ -1,4 +1,4 @@ -package o1game.utils +package scalevalapokalypsi.utils import java.io.InputStream diff --git a/tyylimaare.txt b/tyylimaare.txt deleted file mode 100644 index 2de2c18..0000000 --- a/tyylimaare.txt +++ /dev/null @@ -1,157 +0,0 @@ - -Scala-tyylimääre tekstipeliin -============================= - - -Seuraa kurssin tyyliopasta ja tätä ohjetta. Noudata tätä ohjetta, jos ohjeiden -välillä on ristiriita. Kirjoita mieluummin vähemmän koodia paremmin kuin -enemmän koodia laiskasti. Näin vähennetään tulevaisuuden työtä, joka syntyy -kun koodi on lähtenyt lapasesta eikä kenelläkään ole enää mitään käsitystä -ohjelman struktuurista. Tee näin etenkin, kun kirjoittamamme koodin laatua ja -yhtenäisyyttä arvioidaan palautuksessa. - -=> https://docs.scala-lang.org/scala3/book/ca-multiversal-equality.html -Kannattaiskohan käyttää? ^^ - - -This-sanan käyttö ------------------ - -This-sanaa tulee käyttää aina, kun se on mahdollista. Se selventää sitä, kenen -muuttuja on kyseessä ja missä se on määritelty. - - -Merkkijonojen muodostaminen ---------------------------- - -Käytä s"Arvo: $a, toinen arvo: ${this.b}" jos se ei ole aivan tajuttoman -kömpelö ratkaisu tilanteeseen. Se on lähes aina parempi ilmaisu kuin merkki- -jonojen summaaminen. - - -Tyyppien kirjaaminen --------------------- - -Nimellisiin funktioihin kirjoitetaan aina paluutyyppi, vaikka se olisi Unit tai -funktio ei olisi julkinen. Paluutyypin kirjoittaminen pakottaa miettimään vielä -kerran funktion todellista tarkoitusta. Kun sen on kirjoittanut, Scalan tyyppi- -järjestelmä huomaa virheet aikaisemmin ja ne saadaan korjattua. Julkisilla -funktioilla tyyppimääre toimii hieman kuin dokumentaatio. - -Julkisille muuttujille (etenkin ohjelman laajuisille vakioille) tulee kirjata -tyypit. - - -Rivien pituudet ---------------- - -Rivin maksimipituus on 80 merkkiä. Tässä sisennykset lasketaan kahdeksaksi -merkiksi. Tämä rajoitus on ikiaikaista perua siitä, kun terminaalien standardi- -koko leveyssuunnassa oli 80 merkkiä. Tämä rajoitus on kuitenkin nykyäänkin -kätevä, koska kahta 80-merkkistä riviä on helppo pitää vierekkäin melkein näy- -töllä kuin näytöllä. Lisäksi ylipitkä rivi voi olla oire epäselkeästä koodista, -joka muutenkin kuuluisi jakaa osiin. - -Alla on esimerkkejä, miten ylipitkiä rivejä saa (ja kuuluu) jakaa. - -Esim 1 -``` -def jokuNimi(parametri1: tyyppi1, parametri2: tyyppi2, parametri3: tyyppi3): paluutyyppi = - ??? - -def jokuNimi( - parametri1: tyyppi1, - parametri2: tyyppi2, - parametri3: tyyppi3 -): paluutyyppi = - ??? -``` - -Esim 2 -``` -kokoelma.filter(_ % 2 ==0).flatten.map(_.muutaHauskallaTavalla).contains(condition) - -kokoelma - .filter(_ % 2 ==0) - .flatten - .map(_.muutaHauskallaTavalla) - .contains(condition) -``` - -Esim 3 -``` -val pitkäMuttaHyväMuuttujanNimi = PitkäOlionNimiJotaEiTahdotaMuuttaa(jokuParametri) - -val pitkäMuttaHyväMuuttujanNimi = - PitkäOlionNimiJotaEiTahdotaMuuttaa(jokuParametri) -``` - -Esim 4 -``` -val olio = MoniparametrisenOlionLuoja(parametri1, parametri2, parametri3, parametri4, parametri5) - -val olio = MoniparametrisenOlionLuoja( - parametri1, - parametri2, - parametri3, - parametri4, - parametri5 -) -``` - -Esim 5: Huomaa myös tyhjän tilan käyttö ja kommentin alku- ja loppumerkkien - paikat. Tuollainen muotoilu on nättiä ja suotavaa. -``` -/* Pitkä dokumentaatiokommentti funktiolle, jonka kuuluu olla useammalla rivillä, koska muuten koodin dokumentaatiosta ei saa selvää ja on näin ollen turhaa*/ - -/* Pitkä dokumentaatiokommentti funktiolle, jonka kuuluu olla useammalla - rivillä, koska muuten koodin dokumentaatiosta ei saa selvää ja on näin ollen - turhaa. */ -``` - - -Sisennykset ------------ - -Sisentämiseen käytetään sisennyksiä eikä välilyöntejä. Näin jokainen ohjelmoija -saa katsoa koodiansa sillä sisennyspituudella josta pitää ja säästetään muisti- -tilaa. - -IntelliJ IDEAn tapauksessa tulee siis muuttaa asetus -File - > Settings - > Editor - > Code Style - > Java - > Tabs and Indents - > Use tab character - -Kuten Linus Torvalds on sanonut, jos tiedostossa on enemmän kuin kolme -sisennettyä tasoa ([tab][tab][tab]), olet todennäköisesti eksyksissä koodissasi -ja ohjelmasi sisäinen logiikka ja rakenne kaipaa parantamista. - -Kolmen sisennyksen sääntö ei ole kiveen hakattu, koska me ei olla yhtä hyviä -ohjelmoijia kuin Torvalds. Jos kuitenkin huomaat olevasi sisennysten -viidakossa, josta ei saa selvää, niin voi olla hyvä miettiä, voisiko ohjelman -rakennetta muokata vaikkapa lisäämällä apufunktioita yms. - - -If, match, for, while jne... ----------------------------- - -Jos saatavilla on ohjelman toimintaa ja datan virtausta kuvaavia korkeamman -asteen funktioita, ja et tiedä niiden suorituskyvyn olevan heikkoa verrattnua -itse tekemääsi toteutukseen, käytä korkeamman asteen funktioita. Jos et heti -keksi sopivaa korkeamman asteen funktiota, ei se tarkoita ettei sellaista ole. -Lue läpi korkeamman asteen funktiot Scalan dokumentaatiosta, esim. - -Vector-luokan dokumentaatio: -=> https://scala-lang.org/api/3.x/scala/collection/immutable/Vector.html# - -Buffer-luokan dokumentaatio: -=> https://scala-lang.org/api/3.x/scala/collection/mutable/Buffer$.html# - -Option-luokan dokumentaatio: -=> https://scala-lang.org/api/3.x/scala/Option.html# - - |