Moved files from private to public repo for first release

This commit is contained in:
eetnaviation
2024-01-01 22:49:04 +02:00
parent 7ce960c91a
commit 2f7f0075be
7 changed files with 1724 additions and 0 deletions

195
main.js Normal file
View File

@ -0,0 +1,195 @@
let firstNumber;
let secondNumber;
let correctAnswerValue;
let responseMessage;
let secondMaxTotal;
let operator = "+";
let maxTotal = 10;
let pointLimitPercentage = 0.8;
let points = 0;
let currentLevel = 1;
//Interval's
let levelInterval = 40000;
let gameEndTimer = 240000;
let gameRunning = 0;
//IntervalID
let setLevelInterval;
let stopGameTimeout;
//Server config
let serverPort = 3000;
let debugMode = 0; //1 for enabled 0 for disabled
let answerMode = 0; //1 for enabled 0 for disabled (shows the correct answer always)
let godMode = 0; //1 for enabled 0 for disabled (shows the correct answer in the web interface)
let showClientAnswer = 0 //1 for enabled 0 for disabled (show the answer that the client sent back)
const express = require('express');
const { fstat } = require('fs');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
app.get('/', (req, res) => {
//index.html
res.sendFile(__dirname + '/client/index.html');
});
app.get('/choice', (req, res) => {
gameRunning = 0;
res.sendFile(__dirname + '/client/choice.html');
stopGame();
clearUserData();
})
app.get('/liitmine', (req, res) => {
//Set correctAnswerValue to use the correct operator and send to arvutus.html
operator = "+";
res.sendFile(__dirname + '/client/arvutus.html');
gameRunning = 1;
});
app.get('/lahutamine', (req, res) => {
//Set correctAnswerValue to use the correct operator and send to arvutus.html
operator = "-";
res.sendFile(__dirname + '/client/arvutus.html');
gameRunning = 1;
});
server.listen(serverPort, () => {
console.log('Server started on port', serverPort);
});
io.on('connection', (socket) => {
//Only start math if user is on the correct page (gameRunning = 1)
console.log("Connection made");
if (gameRunning == 1) {
if (debugMode == 1) {console.log("gameset to 1");};
getNewCalculation();
io.emit('calculation', { firstNumber: firstNumber, secondNumber: secondNumber, calculationType: operator});
if (godMode == 1) { io.emit('godModeData', correctAnswerValue); };
if (debugMode == 1) {console.log(socket.id);};
//Answers the answer for the calculation
socket.on('answer', (msg) => {
if (showClientAnswer == 1) {
console.log(msg);
}
if (msg == correctAnswerValue) {
calculatePoints(true);
responseMessage = "Correct answer! You currently have " + points + " points. Current level: " + currentLevel;
}
else {
calculatePoints(false);
responseMessage = "Incorrect answer! You currently have " + points + " points. Current level: " + currentLevel;
}
io.emit('answerCheck', { answerType: responseMessage});
getNewCalculation();
io.emit('calculation', { firstNumber: firstNumber, secondNumber: secondNumber, calculationType: operator});
});
setLevelInterval = setInterval(setLevel, levelInterval);
stopGameTimeout = setTimeout(stopGame, gameEndTimer);
if (debugMode == 1) {console.log("timeout and interval set");};
}
});
function getNewCalculation() {
//Generates correct answer with the correct operator
if (operator == "+") {
if (currentLevel == 1 || currentLevel == 2) {
firstNumber = Math.floor(Math.random() * maxTotal);
secondMaxTotal = maxTotal - firstNumber;
secondNumber = Math.floor(Math.random() * secondMaxTotal);
if (secondNumber < (firstNumber / 2)) {console.info("secondnumber smaller than firstnumber div 2")}
}
//Needed for eliminating the calculations from the previous levels
else if (currentLevel > 2) {
firstNumber = Math.floor(Math.random() * (maxTotal - (maxTotal * 0.1)) + (maxTotal * 0.1));
secondMaxTotal = maxTotal - firstNumber;
secondNumber = Math.floor(Math.random() * (secondMaxTotal - (secondMaxTotal * 0.5)) + (secondMaxTotal * 0.2));
if (secondNumber < (firstNumber / 2)) {console.info("secondnumber smaller than firstnumber div 2")}
} //TODO: fix secondMaxRandom being too low (777 - 23)
correctAnswerValue = firstNumber + secondNumber;
if (answerMode == 1) {console.log(correctAnswerValue);};
}
else if (operator == "-") {
if (currentLevel == 1 || currentLevel == 2) {
firstNumber = Math.floor(Math.random() * maxTotal);
secondNumber = Math.floor(Math.random() * firstNumber);
}
//Needed for eliminating the calculations from the previous levels
else if (currentLevel > 2) {
firstNumber = Math.floor(Math.random() * (maxTotal - (maxTotal * 0.1)) + (maxTotal * 0.1));
secondNumber = Math.floor(Math.random() * (firstNumber - (maxTotal * 0.1)) + (maxTotal * 0.1));
}
correctAnswerValue = firstNumber - secondNumber;
if (answerMode == 1) {console.log(correctAnswerValue);};
}
}
function calculatePoints(correct) {
//Calculate points (correct = true means that answer was correct and vice versa)
if (correct == true) {
if (firstNumber <= maxTotal * 0.1 || secondNumber <= maxTotal * 0.1 ) {
points += 2;
}
else if (correctAnswerValue <= maxTotal * pointLimitPercentage) {
points += 4;
}
else {
points += 7;
}
}
else {
points -= 5;
}
}
function sendErrorInfo(data) {
//Unused (Error messages)
io.emit('errorResponse', "ERROR: ", data);
}
function setLevel() {
//Constantly updates/sets level
currentLevel += 1;
switch (currentLevel) {
case 2:
maxTotal = 20;
break;
case 3:
maxTotal = 100;
break;
case 4:
maxTotal = 1000;
break;
case 5:
maxTotal = 10000;
break;
case 6:
maxTotal = 100000;
break;
default:
maxTotal = 10;
currentLevel = 1;
break;
}
}
function stopGame() {
//Ends/Stops the game
gameRunning = 0;
clearInterval(setLevelInterval);
setLevelInterval = 0;
clearTimeout(stopGameTimeout)
stopGameTimeout = 0;
console.log("Cleared timeout and interval data.");
io.emit('gameEndMessage', { points: points, currentLevel: currentLevel });
}
function clearUserData() {
//Used to clear user data variables
points = 0;
currentLevel = 1;
gameRunning = 0;
setLevelInterval = 0;
}