GMDL 1001 Prototype v1
Single-team validation prototype. No saving. No exports.
Player 1:
Player 2:
Player 3:
Player 4:
Digital Scoresheet
Player Totals
let players=[]; let currentPlayer=0; let history=[]; function startGame(){ players=[1,2,3,4].map(i=>({name:document.getElementById(‘player’+i).value||(‘Player ‘+i),scores:[]})); currentPlayer=0;history=[]; document.getElementById(‘gamePanel’).style.display=’block’; updateDisplay(); document.getElementById(‘scoreInput’).focus();} function recordScore(){ const input=document.getElementById(‘scoreInput’); const score=parseInt(input.value); if(isNaN(score)) return; history.push({player:currentPlayer}); players[currentPlayer].scores.push(score); currentPlayer=(currentPlayer+1)%players.length; input.value=”;updateDisplay();input.focus();} function undoLast(){ if(history.length===0) return; const last=history.pop(); players[last.player].scores.pop(); currentPlayer=last.player; updateDisplay();} function resetGame(){ if(!confirm(‘Reset current game?’)) return; players=[];history=[];currentPlayer=0; document.getElementById(‘gamePanel’).style.display=’none’; document.getElementById(‘scoreSheet’).innerHTML=”; document.getElementById(‘playerTotals’).innerHTML=”;} function updateDisplay(){ const shooter=players[currentPlayer]; document.getElementById(‘currentShooter’).textContent=shooter.name; document.getElementById(‘currentRound’).textContent=’Throw #’+(shooter.scores.length+1); buildScoresheet();buildTotals();} function buildScoresheet(){ let html=’| Player | ‘; for(let i=1;i<=8;i++){html+='S’+i+’ | T’+i+’ | ‘;} html+=’||
|---|---|---|---|---|
| ‘+p.name+’ | ‘;for(let i=0;i=95?’ class=”high”‘:”;html+=’‘+s+’ | ‘+run+’ | ‘;}else{html+=’‘;}}html+=’ |
| Player | Shots | Points | Average |
|---|---|---|---|
| ‘+p.name+’ | ‘+shots+’ | ‘+pts+’ | ‘+avg+’ |