button position

This commit is contained in:
Didictateur 2026-03-14 13:35:39 +01:00
parent bf3f3a2879
commit f50c5f7bf2

View file

@ -298,9 +298,9 @@
}
#call-panel {
position: fixed;
bottom: 20px;
left: 50%;
position: absolute;
bottom: -57%;
left: 61%;
transform: translateX(-50%);
display: none;
gap: 10px;
@ -420,6 +420,7 @@
let game;
let isDistributing = false;
let canPlayerAct = false;
let lastDiscarder = -1;
// Charger le menu
fetch('/components/menu.html')
.then(r => r.text())
@ -623,6 +624,7 @@
// Défausser la tuile piochée (index === tiles.length)
canPlayerAct = false;
lastDiscarder = 0;
game.discard(0, game.hands[0].tiles.length);
game.nextTurn();
updateTurnIndicator();
@ -670,6 +672,43 @@
}
}
async function continueBotPlay() {
// Continue la boucle des bots après une réponse du joueur
canPlayerAct = false;
while (game.turn !== 0) {
await new Promise(resolve => setTimeout(resolve, 500));
game.draw(game.turn);
renderHands();
// Pause aléatoire pour simuler la réflexion
const randomDelay = 1000 + Math.random() * 1000;
await new Promise(resolve => setTimeout(resolve, randomDelay));
// Défausser le bot
game.botPlay();
renderDiscards();
// Vérifier si le joueur peut faire un appel
if (game.canPon(0)) {
// Le joueur peut faire un pon, lui proposer
canPlayerAct = true;
showCallPanelForPon();
return; // Attendre la réponse du joueur
}
// Sinon, passer au joueur suivant
game.nextTurn();
updateTurnIndicator();
renderHands();
}
// C'est au tour du joueur - il pioche d'abord
await new Promise(resolve => setTimeout(resolve, 500));
game.draw(0);
renderHands();
canPlayerAct = true;
}
async function playBotsSequentially() {
// Le joueur ne peut plus agir pendant que les bots jouent
canPlayerAct = false;
@ -682,18 +721,30 @@
// Pause aléatoire pour simuler la réflexion
const randomDelay = 1000 + Math.random() * 1000;
await new Promise(resolve => setTimeout(resolve, randomDelay));
// Défausser le bot
game.botPlay();
renderDiscards();
// Vérifier si le joueur peut faire un appel
if (game.canPon(0)) {
// Le joueur peut faire un pon, lui proposer
canPlayerAct = true;
showCallPanelForPon();
return; // Attendre la réponse du joueur
}
// Sinon, passer au joueur suivant
game.nextTurn();
updateTurnIndicator();
renderHands();
renderDiscards();
}
// C'est au tour du joueur - il pioche d'abord
await new Promise(resolve => setTimeout(resolve, 500));
game.draw(0);
renderHands();
canPlayerAct = true;
showCallPanel();
}
function updateTurnIndicator() {
@ -711,11 +762,24 @@
document.getElementById('call-panel').style.display = 'none';
}
function showCallPanelForPon() {
const callPanel = document.getElementById('call-panel');
// Afficher seulement Pon et Skip
document.getElementById('pon-button').style.display = 'block';
document.getElementById('chii-button').style.display = 'none';
document.getElementById('kan-button').style.display = 'none';
document.getElementById('tsumo-button').style.display = 'none';
document.getElementById('ron-button').style.display = 'none';
callPanel.style.display = 'flex';
}
function showCallPanel() {
const callPanel = document.getElementById('call-panel');
// Ne pas afficher les appels si c'est le joueur qui vient de défausser
if (game.turn === 0) {
if (lastDiscarder === 0) {
callPanel.style.display = 'none';
return;
}
@ -756,18 +820,21 @@
updateTurnIndicator();
renderHands();
renderDiscards();
playBotsSequentially();
continueBotPlay();
});
document.getElementById('skip-button').addEventListener('click', () => {
if (!canPlayerAct) return;
canPlayerAct = false;
hideCallPanel();
playBotsSequentially();
continueBotPlay();
});
renderHands();
updateTurnIndicator();
// Ne pas rendre les mains si le jeu n'a pas commencé
if (game) {
renderHands();
updateTurnIndicator();
}
});
</script>
</body>