Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
T
Testat RockPaperScissoirs
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package Registry
Operate
Terraform modules
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
OST
WE1
Testat RockPaperScissoirs
Compare revisions
e9b8b23a0ac8f147e522ecefe98965f4f27ed369 to 02f818e35562f63b55997602c20e779170b57378
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
ost/we1/testat-rockpaperscissoirs
Select target project
No results found
02f818e35562f63b55997602c20e779170b57378
Select Git revision
Swap
Target
ost/we1/testat-rockpaperscissoirs
Select target project
ost/we1/testat-rockpaperscissoirs
1 result
e9b8b23a0ac8f147e522ecefe98965f4f27ed369
Select Git revision
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Commits on Source (2)
game-service.js online mode
· ada091b3
Andri Joos
authored
2 years ago
ada091b3
main.js online mode
· 02f818e3
Andri Joos
authored
2 years ago
02f818e3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
TestatVorlage/scripts/game-service.js
+67
-13
67 additions, 13 deletions
TestatVorlage/scripts/game-service.js
TestatVorlage/scripts/main.js
+22
-2
22 additions, 2 deletions
TestatVorlage/scripts/main.js
with
89 additions
and
15 deletions
TestatVorlage/scripts/game-service.js
View file @
02f818e3
...
...
@@ -17,9 +17,9 @@ const playerStats = {
},
};
function
getRankingsFromPlayerStats
()
{
function
getRankingsFromPlayerStats
(
stats
)
{
const
ranking
=
[];
const
playerValues
=
Object
.
values
(
playerS
tats
);
const
playerValues
=
Object
.
values
(
s
tats
);
playerValues
.
sort
((
a
,
b
)
=>
b
.
win
-
a
.
win
);
for
(
const
playerValue
of
playerValues
)
{
...
...
@@ -51,8 +51,15 @@ export function isConnected() {
}
export
function
getRankings
(
rankingsCallbackHandlerFn
)
{
const
rankingsArray
=
getRankingsFromPlayerStats
();
setTimeout
(()
=>
rankingsCallbackHandlerFn
(
rankingsArray
),
DELAY_MS
);
if
(
isConnected
())
{
fetch
(
'
https://stone.sifs0005.infs.ch/ranking
'
)
.
then
((
res
)
=>
res
.
json
())
.
then
((
json
)
=>
getRankingsFromPlayerStats
(
json
))
.
then
((
rankings
)
=>
rankingsCallbackHandlerFn
(
rankings
));
}
else
{
const
rankings
=
getRankingsFromPlayerStats
(
playerStats
);
rankingsCallbackHandlerFn
(
rankings
);
}
}
const
evalLookup
=
{
...
...
@@ -93,21 +100,39 @@ const evalLookup = {
},
};
const
translationLookup
=
{
Rock
:
'
Stein
'
,
Paper
:
'
Papier
'
,
Scissors
:
'
Schere
'
,
Well
:
'
Quelle
'
,
Matchstick
:
'
Streichholz
'
,
};
function
enDeTranslation
(
key
)
{
return
translationLookup
[
key
];
}
function
deEnTranslation
(
key
)
{
const
reversed
=
{};
for
(
const
k
of
Object
.
keys
(
translationLookup
))
{
reversed
[
translationLookup
[
k
]]
=
k
;
}
return
reversed
[
key
];
}
function
getGameEval
(
playerHand
,
systemHand
)
{
return
evalLookup
[
playerHand
.
toLowerCase
()][
systemHand
.
toLowerCase
()];
}
export
function
evaluateHand
(
playerName
,
playerHand
,
gameRecordHandlerCallbackFn
)
{
const
systemHand
=
HANDS
[
Math
.
floor
(
Math
.
random
()
*
5
)];
const
gameEval
=
getGameEval
(
playerHand
,
systemHand
);
// eslint-disable-next-line @web-and-design/wed/use-action-map
if
(
gameEval
>
0
)
{
playerStats
[
playerName
].
win
+=
1
;
}
else
if
(
gameEval
<
0
)
{
playerStats
[
playerName
].
lost
+=
1
;
function
reevaluateHandsFromServer
(
playerHand
,
systemHand
,
gameEval
)
{
// if gameEval === false => player has lost OR draw
if
(
!
gameEval
)
{
return
getGameEval
(
playerHand
,
systemHand
);
}
return
1
;
// if gameEval === true => player has won
}
function
evaluateGame
(
playerHand
,
systemHand
,
gameEval
,
gameRecordHandlerCallbackFn
)
{
setTimeout
(()
=>
gameRecordHandlerCallbackFn
({
playerHand
,
systemHand
,
...
...
@@ -115,6 +140,35 @@ export function evaluateHand(playerName, playerHand, gameRecordHandlerCallbackFn
}),
DELAY_MS
);
}
function
evaluateFromServer
(
playerHand
,
systemHand
,
gameEval
,
gameRecordHandlerCallbackFn
)
{
const
gameEvalAsNumber
=
reevaluateHandsFromServer
(
playerHand
,
systemHand
,
gameEval
);
evaluateGame
(
playerHand
,
systemHand
,
gameEvalAsNumber
,
gameRecordHandlerCallbackFn
);
}
export
function
evaluateHand
(
playerName
,
playerHand
,
gameRecordHandlerCallbackFn
)
{
// eslint-disable-next-line @web-and-design/wed/use-action-map
if
(
isConnected
())
{
const
translatedPlayerHand
=
enDeTranslation
(
playerHand
);
const
url
=
`https://stone.sifs0005.infs.ch/play?playerName=
${
playerName
}
&playerHand=
${
translatedPlayerHand
}
`
;
fetch
(
url
)
.
then
((
res
)
=>
res
.
json
())
.
then
((
json
)
=>
evaluateFromServer
(
playerHand
,
deEnTranslation
(
json
.
choice
),
json
.
win
,
gameRecordHandlerCallbackFn
));
}
else
{
const
systemHand
=
HANDS
[
Math
.
floor
(
Math
.
random
()
*
5
)];
const
gameEval
=
getGameEval
(
playerHand
,
systemHand
);
// eslint-disable-next-line @web-and-design/wed/use-action-map
if
(
gameEval
>
0
)
{
playerStats
[
playerName
].
win
+=
1
;
}
else
if
(
gameEval
<
0
)
{
playerStats
[
playerName
].
lost
+=
1
;
}
evaluateGame
(
playerHand
,
systemHand
,
gameEval
,
gameRecordHandlerCallbackFn
);
}
}
export
function
createUserIfNotExists
(
username
)
{
if
(
playerStats
[
username
]
===
undefined
)
{
playerStats
[
username
]
=
{
user
:
username
,
win
:
0
,
lost
:
0
};
...
...
This diff is collapsed.
Click to expand it.
TestatVorlage/scripts/main.js
View file @
02f818e3
...
...
@@ -2,13 +2,14 @@
README, as well as source code, can be found at https://git.420joos.dev/ost/we1/testat-rockpaperscissoirs/-/blob/dev/README.md
*/
import
{
getRankings
,
evaluateHand
,
createUserIfNotExists
}
from
'
./game-service.js
'
;
import
{
getRankings
,
evaluateHand
,
createUserIfNotExists
,
isConnected
,
setConnected
}
from
'
./game-service.js
'
;
const
loginScreen
=
document
.
querySelector
(
'
#login
'
);
const
gameScreen
=
document
.
querySelector
(
'
#game
'
);
const
options
=
document
.
querySelector
(
'
#options
'
);
const
changeModeButton
=
document
.
querySelector
(
'
#change-online-mode
'
);
const
loginForm
=
document
.
querySelector
(
'
#login-form
'
);
const
usernameInput
=
document
.
querySelector
(
'
#username-input
'
);
const
rankingTable
=
document
.
querySelector
(
'
#ranking-table
'
);
...
...
@@ -60,7 +61,9 @@ function showRankings(rankings) {
for
(
let
i
=
0
;
i
<
ranking
.
players
.
length
-
1
;
i
++
)
{
rankingsHtml
+=
`
${
ranking
.
players
[
i
]}
, `
;
}
rankingsHtml
+=
`
${
ranking
.
players
[
ranking
.
players
.
length
-
1
]}
</td></tr>`
;
let
playerName
=
ranking
.
players
[
ranking
.
players
.
length
-
1
];
playerName
=
playerName
.
replace
(
/</g
,
'
<
'
).
replace
(
/>/g
,
'
>
'
);
rankingsHtml
+=
`
${
playerName
}
</td></tr>`
;
}
rankingTable
.
innerHTML
=
rankingsHtml
;
...
...
@@ -150,9 +153,26 @@ function onMainMenuClick() {
getRankings
(
showRankings
);
}
function
updateOnlineButton
()
{
const
preText
=
'
Change to
'
;
if
(
isConnected
())
{
changeModeButton
.
innerText
=
`
${
preText
}
local`
;
}
else
{
changeModeButton
.
innerText
=
`
${
preText
}
online`
;
}
}
function
triggerOnlineState
()
{
setConnected
(
!
isConnected
());
updateOnlineButton
();
getRankings
(
showRankings
);
}
options
.
addEventListener
(
'
click
'
,
(
event
)
=>
onOptionClick
(
event
));
loginForm
.
addEventListener
(
'
submit
'
,
onLoginClick
);
mainMenuButton
.
addEventListener
(
'
click
'
,
onMainMenuClick
);
changeModeButton
.
addEventListener
(
'
click
'
,
triggerOnlineState
);
window
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
setScreenVisible
(
false
));
window
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
getRankings
(
showRankings
));
window
.
addEventListener
(
'
DOMContentLoaded
'
,
updateOnlineButton
);
This diff is collapsed.
Click to expand it.