Rework /play page
This commit is contained in:
48
front/src/lib/models/game.ts
Normal file
48
front/src/lib/models/game.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import {scoreStore} from "../stores/scoreStore";
|
||||||
|
|
||||||
|
export class Game {
|
||||||
|
|
||||||
|
public name : string;
|
||||||
|
public result : number;
|
||||||
|
public state : GameState;
|
||||||
|
private readonly range : number;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.name = "";
|
||||||
|
this.result = -1;
|
||||||
|
this.state = GameState.Unplayed;
|
||||||
|
this.range = 100
|
||||||
|
}
|
||||||
|
|
||||||
|
public async play() {
|
||||||
|
this.result = this.getRandomNumber();
|
||||||
|
await scoreStore.add(this.name, this.result)
|
||||||
|
}
|
||||||
|
|
||||||
|
public hasBeenPlayed() : boolean {
|
||||||
|
return this.state == GameState.Played;
|
||||||
|
}
|
||||||
|
|
||||||
|
public isRunning() : boolean {
|
||||||
|
return this.state == GameState.Running;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getRandomNumber() : number{
|
||||||
|
let unit = Math.floor(Math.random() * (this.range + 1));
|
||||||
|
|
||||||
|
if(unit === 100){
|
||||||
|
let modifier = Math.floor(Math.random() * (this.range + 1));
|
||||||
|
return unit*modifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
let dec = Math.floor(Math.random() * (this.range));
|
||||||
|
return unit + (dec/100);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum GameState {
|
||||||
|
Unplayed,
|
||||||
|
Running,
|
||||||
|
Played,
|
||||||
|
}
|
||||||
@@ -1,54 +1,46 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
import {scoreStore} from "$lib/stores/scoreStore.ts";
|
|
||||||
import bomb from '$lib/assets/bomb.svg';
|
import bomb from '$lib/assets/bomb.svg';
|
||||||
|
import {Game, GameState} from "$lib/models/game.ts";
|
||||||
|
|
||||||
let scores;
|
let scores;
|
||||||
|
let game = new Game();
|
||||||
|
|
||||||
let playerName = undefined;
|
$: isRunning = game.state === GameState.Running;
|
||||||
let range = 100;
|
$: hasBeenPlayed = game.state === GameState.Played;
|
||||||
let result = 0;
|
|
||||||
|
|
||||||
async function roll() {
|
async function roll(){
|
||||||
|
game.state = GameState.Running;
|
||||||
toggleLoading();
|
await game.play()
|
||||||
result = getRandomNumber();
|
|
||||||
await new Promise(r => setTimeout(r, 3000));
|
await new Promise(r => setTimeout(r, 3000));
|
||||||
|
game.state = GameState.Played;
|
||||||
toggleLoading();
|
|
||||||
window.$(".result").text(`Result : ${result}/${range}`)
|
|
||||||
|
|
||||||
await scoreStore.add(playerName, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
function getRandomNumber(){
|
|
||||||
let unit = Math.floor(Math.random() * (range + 1));
|
|
||||||
let dec = Math.floor(Math.random() * (range));
|
|
||||||
return unit + (dec/100);
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleLoading(){
|
|
||||||
window.$(".loader").toggleClass("disabled");
|
|
||||||
window.$(".player").toggleClass("disabled");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="loader disabled">
|
|
||||||
<svg class="circular-loader" viewBox="0 0 30 30">
|
|
||||||
<circle class="loader-path" cx="15" cy="15" r="5" fill="none" stroke="#f1ecec" stroke-width="0.7" />
|
|
||||||
</svg>
|
|
||||||
<div class="info">Rolling a random numbers within range 0-{range}...</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="player">
|
{#if isRunning}
|
||||||
<input class="name" placeholder="Nom de la victime..." bind:value={playerName}/>
|
<div class="loader">
|
||||||
|
<svg class="circular-loader" viewBox="0 0 30 30">
|
||||||
|
<circle class="loader-path" cx="15" cy="15" r="5" fill="none" stroke="#4b0611" stroke-width="0.7" />
|
||||||
|
</svg>
|
||||||
|
<div class="info">Massacre en cours...</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<img class="roll" src={bomb} on:click={roll} alt="Bomb"/>
|
{#if !isRunning && !hasBeenPlayed}
|
||||||
|
<div class="player">
|
||||||
|
<input class="name" placeholder="Nom de la victime..." bind:value={game.name}/>
|
||||||
|
|
||||||
|
<img class="roll" src={bomb} on:click={roll} alt="Bomb"/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if hasBeenPlayed}
|
||||||
|
<div class="result">Vous avez {game.result}% de chance de mourir</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<div class="result"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@@ -62,11 +54,6 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.disabled
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.player
|
.player
|
||||||
{
|
{
|
||||||
gap: 2vh;
|
gap: 2vh;
|
||||||
|
|||||||
Reference in New Issue
Block a user