본문 바로가기

내일배움캠프

팀 프로젝트 - 가위바위보게임

지난주에 개인과제로 진행했었던 가위바위보게임을 웹으로 구현하는 것이 이번 과제이다.

 

내가 주로 맡은 부분은 데이터베이스를 만들고 웹에서 실행한 가위바위보의 전적을 데이터베이스에 입력하는 것이다.

 

강의의 내용을 최대한 떠올려보면서 진행을 했다.

 

# 데이터베이스 생성코드입니다.
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
        'sqlite:///' + os.path.join(basedir, 'database.db')

db = SQLAlchemy(app)

stats = {'win':0, 'lose':0, 'draw':0} # 통계 저장용 딕셔너리

# 데이터베이스 생성
class Score(db.Model):
    matches = db.Column(db.Integer, primary_key=True) # 게임횟수 저장용
    win = db.Column(db.Integer, nullable=False) # 승리 저장용
    lose = db.Column(db.Integer, nullable=False) # 패배 저장용
    draw = db.Column(db.Integer, nullable=False) #무승부 저장용

 

가장먼저한 것은 데이터베이스를 만드는 것이었다. 게임횟수(matches)를 primary_key로 두었고 승, 무, 패를 각각 열로 만들어주었다.

 

그리고 통계값을 딕셔너리 형태로 저장을 해서 추후에 메인페이지에 출력할 수 있도록 했다.

 

game_result = result()
    
    if game_result == '승!':
        stats['win'] += 1
    elif game_result == '패배!':
        stats['lose'] += 1
    elif game_result == '무승부!':
        stats['draw'] += 1

 

가위바위보 게임 결과에 따라서 stats딕셔너리에 값이 업데이트 된다.
다만 이 부분은 함수가 재시작되면 초기화되기 때문에 나중에 데이터베이스에서 직접 값을 가져올 수 있도록 수정할 생각이다.

 

# DB 입력부분입니다.
    score = Score(win = stats['win'], lose = stats['lose'], draw = stats['draw'])
    
    db.session.add(score)
    
    db.session.commit()
    # 여기까지 입력부분!

 

그리고 지금까지의 전적은 합산해서 데이터베이스에 차례대로 입력하게 된다.

 

# 데이터베이스 삭제 함수(전적초기화 용도)
def delete_all_scores():
    try:
        # 모든 Score 레코드 삭제
        db.session.query(Score).delete()
        db.session.commit()
    except Exception:
        db.session.rollback()
 # delete_all_scores() # 데이터 베이스 초기화가 필요할때 활성화하고 게임을 1회 실행하세요.

 

데이터베이스 삭제 함수도 만들어두었는데 지금은 디버깅용 코드이다. 나중에 메인페이지의 버튼을 눌러서 모든 전적을 초기화할 수 있는 기능을 추가하면 좋을것같다.

 

구현 방법 자체는 생각외로 어렵지는 않았지만 처음 해보는 작업이었기때문에 아이디어를 떠올리는 것이 쉽지않았다.
부족한부분은 내일 계속해서 수정할 생각이다.