프로그래밍(Web)/Javascript(TS,Node)

[바미] 로또 추첨기(JS)

Bami 2024. 6. 2. 09:46
728x90
반응형

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Bami`s 로또 추첨기</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        .container {
            margin-top: 20px;
            text-align: center;
        }
        .numbers {
            margin-top: 20px;
            font-size: 24px;
        }
        .result, .status {
            margin-top: 20px;
            font-size: 20px;
        }
        .result {
            color: green;
        }
        .warning {
            margin-top: 20px;
            font-size: 20px;
            color: red;
        }
    </style>
</head>
<body>
<div class="container">
    <h1>Bami`s 로또 추첨기</h1>
    <button id="startButton" onclick="startLottery()">추첨 시작</button>
    <button id="stopButton" onclick="stopLottery()" style="display: none;">추첨 정지</button>
    <div class="numbers" id="numbers">로또 번호: </div>
    <div class="result" id="result">
        시도 횟수: 0회<br>
        당첨 횟수:<br>
        1등: 0회<br>
        2등: 0회<br>
        3등: 0회<br>
        4등: 0회<br>
        5등: 0회
    </div>
    <div class="status" id="status"></div>
    <div class="warning" id="warning"></div>
</div>

<script>
    let interval;
    let moneySpent = 0;
    let money = 0; // 시작 금액 0원
    let lastWinningNumbers = [];

    function getRandomNumber(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    function generateLottoNumbers() {
        const numbers = new Set();
        while (numbers.size < 6) {
            numbers.add(getRandomNumber(1, 45));
        }
        let bonusNumber = getRandomNumber(1, 45);
        while (numbers.has(bonusNumber)) {
            bonusNumber = getRandomNumber(1, 45);
        }
        return {numbers: Array.from(numbers).sort((a, b) => a - b), bonus: bonusNumber};
    }

    function compareNumbers(userNumbers, lottoNumbers) {
        return userNumbers.filter(num => lottoNumbers.includes(num)).length;
    }

    function startLottery() {
        document.getElementById('startButton').style.display = 'none';
        document.getElementById('stopButton').style.display = 'inline';

        let attempts = 0;
        let wins = [0, 0, 0, 0, 0]; // 0부터 4까지 등수별 당첨 횟수 (5등부터 1등)
        const ticketPrice = 5000; // 로또 1번 가격 5천원
        const prizeMoney = [5000, 100000, 1000000, 100000000, 2000000000]; // 당첨금: 5등 5천원, 4등 10만원, 3등 100만원, 2등 1억, 1등 20억
        const maxAttempts = 100000; // 최대 시도 횟수 설정
        let userNumbers;
        let lottoResult;
        const resultDiv = document.getElementById('result');
        const numbersDiv = document.getElementById('numbers');
        const statusDiv = document.getElementById('status');
        const warningDiv = document.getElementById('warning');
        resultDiv.innerHTML = `시도 횟수: 0회<br>당첨 횟수:<br>1등: 0회<br>2등: 0회<br>3등: 0회<br>4등: 0회<br>5등: 0회`;
        numbersDiv.innerHTML = '로또 번호: ';
        statusDiv.innerHTML = `시작 금액: ${money.toLocaleString()}원, 로또에 사용한 금액: ${moneySpent.toLocaleString()}원`;
        warningDiv.innerHTML = '';
        lastWinningNumbers = []; // 초기화

        interval = setInterval(() => {
            attempts++;
            moneySpent += ticketPrice;
            userNumbers = generateLottoNumbers().numbers;
            lottoResult = generateLottoNumbers();
            const matchingCount = compareNumbers(userNumbers, lottoResult.numbers);
            const bonusMatch = userNumbers.includes(lottoResult.bonus);
            numbersDiv.innerHTML = `사용자 번호: ${userNumbers.join(', ')}<br>로또 번호: ${lottoResult.numbers.join(', ')} + 보너스: ${lottoResult.bonus}<br>일치하는 숫자: ${matchingCount}개`;

            let winIndex = -1;
            if (matchingCount === 6) {
                winIndex = 4; // 1등
            } else if (matchingCount === 5 && bonusMatch) {
                winIndex = 3; // 2등
            } else if (matchingCount === 5) {
                winIndex = 2; // 3등
            } else if (matchingCount === 4) {
                winIndex = 1; // 4등
            } else if (matchingCount === 3) {
                winIndex = 0; // 5등
            }

            if (winIndex >= 0) {
                wins[winIndex]++;
                money += prizeMoney[winIndex];
                if (winIndex === 4) { // 1등일 때
                    lastWinningNumbers = lottoResult.numbers; // 1등 당첨 번호 저장
                }
            }

            resultDiv.innerHTML = `시도 횟수: ${attempts}회<br>당첨 횟수:<br>1등: ${wins[4]}회<br>2등: ${wins[3]}회<br>3등: ${wins[2]}회<br>4등: ${wins[1]}회<br>5등: ${wins[0]}회<br>1등 당첨 번호: ${lastWinningNumbers.length ? lastWinningNumbers.join(', ') : ''}`;

            statusDiv.innerHTML = `시도 횟수: ${attempts}회<br>내 돈: ${money.toLocaleString()}원, 로또에 사용한 금액: ${moneySpent.toLocaleString()}원`;

            if (attempts >= maxAttempts) {
                clearInterval(interval);
                warningDiv.innerHTML = `최대 시도 횟수(${maxAttempts}회)를 초과하였습니다. 다시 시도해주세요.`;
                document.getElementById('startButton').style.display = 'inline';
                document.getElementById('stopButton').style.display = 'none';
            }
        }, 100); // 100ms 간격으로 추첨
    }

    function stopLottery() {
        clearInterval(interval);
        document.getElementById('startButton').style.display = 'inline';
        document.getElementById('stopButton').style.display = 'none';
        document.getElementById('warning').innerHTML = '추첨이 중지되었습니다.';
    }
</script>
</body>
</html>
728x90
반응형