본문 바로가기

매일 TIL

[내일배움캠프 15일차] 가위바위보 게임

index.html

            <div>
                <!-- 모달창 적용시 type="button" 추가 -->
                <button type="button" class="btn btn-outline-secondary border-0 border-height-100" id="user" name="user"
                    value="가위" data-bs-toggle="modal" data-bs-target="#resultModal" onclick="submitForm('가위')">
                    <img src="http://itsys.hansung.ac.kr/WebEditor/upload/images/gawi.gif">
                </button>
                <button type="button" class="btn btn-outline-secondary border-0" id="user" name="user" value="바위"
                    data-bs-toggle="modal" data-bs-target="#resultModal" onclick="submitForm('바위')">
                    <img src="http://itsys.hansung.ac.kr/WebEditor/upload/images/bawi.gif">
                </button>
                <button type="button" class="btn btn-outline-secondary border-0" id="user" name="user" value="보"
                    data-bs-toggle="modal" data-bs-target="#resultModal" onclick="submitForm('보')">
                    <img src="http://itsys.hansung.ac.kr/WebEditor/upload/images/bo.gif">
                </button>
            </div>

우선 <body> 내부에 type="button"을 추가.

        <!-- 결과 모달창 띄우기 -->
        <div class="modal fade" id="resultModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
            aria-labelledby="resultModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="resultModalLabel">결과</h5>
                    </div>
                    <div class="modal-body" id="resultModalBody">
                    </div>
                    <div class="modal-footer">
                        <p class="text-muted small">계속하시려면 바깥 공간을 클릭하세요.</p>
                    </div>
                </div>
            </div>
        </div>

띄울 모달창.

모달창 외부 공간을 클릭하면 모달창이 닫히도록 하였기 때문에 바깥 공간을 클릭하라는 footer 구문을 넣었음.

        function submitForm(userChoice) {
            // 컴퓨터 선택 값 가져오기
            var computerChoice = document.getElementById('ComputerVal').value;

            // 사용자의 선택을 form에 설정
            var form = document.getElementById('gameForm');
            var input = document.createElement('input');
            input.type = 'hidden';
            input.name = 'user';
            input.value = userChoice;
            form.appendChild(input);

            // Ajax 요청으로 form 데이터 전송
            $.ajax({
                url: form.action,
                type: form.method,
                data: $(form).serialize(),
                success: function (response) {
                    // 모달에 결과 표시
                    // 사용자:, 컴퓨터:, 결과:, 추가
                    var resultText = `사용자 : ${response.user}\n컴퓨터 : ${response.computer}\n결과 : ${response.result}`;
                    document.getElementById('resultModalBody').innerText = resultText;
                    $('#resultModal').modal('show');
                },
                error: function (error) {
                    console.log('Error:', error);
                }
            });
        }

form 데이터를 Ajax로 전송.

  • 사용자 : 선택
  • 컴퓨터 : 선택
  • 결과 : 승/패/무

형태가 되도록 모달창 출력.

 

문제 발생

사용자의 선택이 모달창을 닫은 뒤에도 고정으로 변하지 않음.

처음 "가위"를 골랐다면 모달창에서 벗어나 다음 게임을 하더라도 사용자의 선택이 "가위"로 고정됨.

 

해결 (by 민성님)

        // 모달이 닫힐 때 페이지 새로고침
        $('#resultModal').on('hidden.bs.modal', function () {
            location.reload();
        });

모달이 닫히면서 페이지를 새로고침하는 코드를 추가함.

form에 저장된 값을 새로고침하여 초기화 한다고 이해하였음.


app.py

from flask import Flask, render_template, request, redirect, url_for, jsonify

jsonify 추가로 import

return jsonify(user=user, computer=computer, result=result)

jsonify를 통해 유저, 컴퓨터, 승패결과 반환


실행 결과


오늘의 회고

gpt야 참 고마워.

과제마감이 얼마 안남았다. 잘 마무리해보자

 

내일의 목표는 가위바위보 과제 마무리 + 멘토님 2번째 강의 참가