-
Notifications
You must be signed in to change notification settings - Fork 1
Dokumentation Jonathan Schwab
- Architektur
- Factory
- Schnittstellen
- Businesslogik
- Highscore-Verwaltung
- Cooperative-Tile-Creator
Das Projekt 2048 besteht aus den drei Modulen
• Controller
• ControllerTest
• UI
Es gibt eine unidirektionale Abhängigkeit vom UI-Modul zum Controller-Modul. Die Erzeugungsabhängigkeiten hiervon werden in der Factory Klasse "ComponentFaktory" mittels Schnittstellen entkoppelt.
Das Module ControllerTest ist für UnitTests vorgesehen.
Cooperative-Tile-Creator (CooperativeTileCreator.java)
Beim Cooperative Tile Creator wird mit den Standardwahrscheinlichkeiten von "2048" ein Stein mit einer 2 bzw. 4 erzeugt. Dieser Stein wird nun so platziert, dass er möglichst beim nächsten Zug mit einem bereits vorhandenen Stein mit selben Wert "verschmolzen" werden kann.
Highscore-Verwaltung (Package Highscore im Controller)
Der Highscore eines Players wird local (Serialisierung in eine Datei) und Global (über eine Rest API) auf einem Backend Server gespeichert. Eine Liste aller Globalen Highscores ist über den Menü-Punkt "Highscores" einzusehen. Globale Highscores zählen nur bei dem Standardspielmodus ("Random").
Einfacher NodeJs Express WebServer (Backend):
var express = require('express');
var app = express();
var fs = require("fs");
var scores = [];
var fs = require('fs');
try
{
scores = JSON.parse(fs.readFileSync("scores.json")); //Score aus lokaler Datei laden
}
catch(e)
{
}
var bodyParser = require('body-parser');
const { S_IFREG } = require('constants');
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
app.post('/get', function (req, res)
{
res.end(JSON.stringify(scores));
})
app.post('/submitHighscore', function (req, res)
{
var token = req.body.token;
var _score = req.body.score;
var _name = req.body.name;
var _dimensions = req.body.dimensions;
if(token!="a$dfjveÖS3ir_§2") res.end("invalid token");
console.log("newScore: "+ _score+ " name: "+_name);
const scoreObj = {name:_name, score: _score, dimensions:_dimensions};
var match = scores.find(e=>e.name==_name);
if(match==null)
{
scores.push(scoreObj);
}
else
{
var index = scores.indexOf(match);
if(scores[index]<_score)
{
scores[index] = scoreObj;
}
try
{
fs.writeFileSync("scores.json",JSON.stringify(scores)); //Score in eine lokale Datei schreiben
}
catch(e)
{
console.log(e);
}
}
scores.sort(function(a, b) //Scores sortieren
{
return a.score-b.score;
});
res.end("success");
})
var server = app.listen(3001, function () {
var host = server.address().address
var port = server.address().port
console.log("Webserver läuft", host, port)
})