경기도 인공지능 개발 과정/과제

Python 숫자야구 만들기

agingcurve 2022. 5. 29. 12:49
반응형

파이썬으로 숫자야구게임을 진행해본다.

 

목표 
 - 숫자야구 오락기를 만들려고 합니다.
 - 돈을 입력받고 게임을 진행할 수 있고, 이길시 상금이 쌓임
 - 게임이 끝날 시, 유저에게 현금으로 돈을 내어주고, 전적과 상금금액이 쌓이도록 구성



1. 숫자야구


클래스 : 숫자야구
- 입력기능
-> 이름을 입력기능
-> 금액 충전기능


- 숫자야구 기능
-> 컴퓨터 숫자만들기 기능
-> 컴퓨터 숫자와 입력한 숫자를 비교하는 기능 (게임실행)
  - 7이닝 동안 컴퓨터의 숫자를 맞추는 것으로 이전에 맞추면 유저의 승 아니면 컴퓨터의 승
-> 게임이 끝날 시 정산기능

-> 전적 검색기능 : 컴퓨터 전적, 내전적, 등
-> mysql에 전적 데이터를 적재함

 

import random
import pymysql
import time
# 숫자야구 클래스
class 숫자야구:
    '''
    컴퓨터와 숫자야구를 대결하는 게임입니다. 
    
    실행전 import random, import pymysql, import time 해주시기 바랍니다.

    1. 실행하시면 플레이어 이름과 금액을 투입해주시면 됩니다!


    2. 기능설명
     - 게임시작 : 게임을 시작합니다. 게임 1판당 금액은 1,450원입니다. 잔액이 부족할 경우 돈을 충전해 주셔야 합니다.
      게임은 총 7이닝동안 진행됩니다. 컴퓨터가 제시한 0~9의 숫자를 맞춰주시면 되는데, 7이닝동안 맞추지 못할경우 컴퓨터의 승리 입니다.

     - 전적검색 : 전적을 검색할 수 있습니다. 여태까지 컴퓨터와 몇승 몇패인지 그리고 남은 잔액을 확인 할 수 있습니다. 

     - 종료 : 전체 게임을 종료합니다. 게임에 대한 전적을 DB에 기록합니다. 투입했던 금액을 화폐로 계산해서 반환해 줍니다.

    '''
    def __init__(self):
        name = input("플레이어 이름을 입력해 주세요! \n")
        first_money = int(input("금액을 투입해 주세요 \n"))
        print(f"{first_money}원 투입 되었습니다. 숫자야구 게임 {first_money//1450} 번 가능합니다.")
        user_win, user_lose = 0, 0
        self.name = name
        self.first_money = first_money
        self.user_win = user_win
        self.user_lose = user_lose
        

        ##self.user_question = list(map(int,input("사용자측 문제 정답 입력\n>> 0~9까지의 숫자 3개를 스페이스바로 구분해 입력해주세요").split(" ")))
    
    def 전적_및_잔액확인(self):
    
        print(f"{self.name}님 전적 : {self.user_win}승 {self.user_lose}패 잔여금액:{self.first_money}원")
        
    def gamestart(self):       
        #난수 생성, 문제 만들기.
        if self.first_money < 1450: # 투입한 금액이 작을 경우
            print("잔액이 부족합니다. 돈을 더 투입해 주세요!")
            add_money = int(input("얼마 더 내실겁니까?"))
            self.first_money += add_money
            print("돈이 충전되었습니다.")

        print(f"게임을 시작하겠습니다! 1,450원이 차감되었습니다. 잔액은{self.first_money-1450}입니다.")
        print("7이닝 이내로 컴퓨터의 숫자를 맞추면 승리합니다. 승리 시 1450원을 드립니다!")
        self.first_money = self.first_money-1450
        num_list = list()
        for i in range(9):
            num_list.append(i)
            
        # computer_list -> 정답이 되는 수 리스트
        computer_list = random.sample(num_list,3) 
        

        inning = 1
        play_cnt=1

        while inning < 8:
            # 유저의 시도 입력1 3 51
            print(f'{inning}이닝')
            user_try = list(map(int,input(f"{self.name}님 0~9까지의 숫자 3개를 스페이스바로 구분해 입력해주세요").split(" ")))
            # 유저 숫자리스트
            num_list=[]
            for i in range(9):
                num_list.append(i)
            computer_comparison_list = random.sample(num_list, 3)
        
            # 비교하는과정 코드()
            
            cnt_strike = 0
            print(user_try)
            for i in range(3):
                if computer_list[i] == user_try[i]:
                    cnt_strike += 1
            
            if cnt_strike == 3:
                self.user_win += 1
                print(f"정답입니다. 승리하셨습니다. 당신의 전적은 {self.user_win}승 {self.user_lose}패입니다. 누적 잔액은 {self.first_money + 1450}원입니다.")
                self.first_money += 1450
                break
                
            print(str(cnt) + " strike")
            print()
            
            cnt_ball = 0
            for i in range(3):
                if computer_list[i] != user_try[i] and computer_list[i] in user_try:
                    cnt_ball += 1
                    
            print(str(cnt_ball) + " ball")
            print()
            
            if cnt_strike == 0 and cnt_ball == 0:
                print("OUT!!") 

            
            # 마무리가 될경우
            inning += 1
            if inning == 8:
                self.user_lose += 1
                print(f"패배하셨습니다. 정답은{computer_list}이었습니다. 당신의 전적은 {self.user_win}승 {self.user_lose}패입니다. 누적 잔액은 {self.first_money}원입니다.")
                print(f"{play_cnt}번째 게임이 끝났습니다.")
                play_cnt+=1
                break

    def 종료(self):
        money_list = [50000,10000,5000,1000,500,100,50]
        money_count = 0    
        i = 0
        print("게임을 종료하겠습니다. 금액 정산을 시작하겠습니다!")
        conn = pymysql.connect(host='localhost',port=3306,user='aiuser',password='aipw',db='aidb')
        cur = conn.cursor()
        sql = 'INSERT INTO baseball_game(USER_NAME, USER_WIN, USER_LOSE, SEND_M) VALUES (%s, %s, %s, %s)'
        cur.execute(sql,(self.name, self.user_win, self.user_lose, self.first_money))
        conn.commit()
        cur.close()
        conn.close()
        sum_money = 0
        print("정산 중입니다 잠시만 기다려 주세요..........")
        time.sleep(0.5)
        print("정산 중입니다 잠시만 기다려 주세요.........")
        time.sleep(0.5)
        print("정산 중입니다 잠시만 기다려 주세요........")
        time.sleep(0.5)
        print("정산 중입니다 잠시만 기다려 주세요.........")
        time.sleep(0.5)
        print("정산 중입니다 잠시만 기다려 주세요..........")
        time.sleep(1.5)
        print()
        print("정산 한 돈입니다. 돈을 꺼내주세요!")
        time.sleep(0.7)
        while i != len(money_list):
            money_count = self.first_money//money_list[i]
            self.first_money = self.first_money - (money_list[i] * money_count)
            time.sleep(1)
            if i <4:
                sum_money += (money_list[i] * money_count)
                print(f"{money_list[i]}원 {money_count}장")
            else:
                sum_money += (money_list[i] * money_count)
                print(f"{money_list[i]}원 {money_count}개")



            i += 1
        time.sleep(1)
        print()
        print(f"정산 금액 총: {sum_money}원")
        print()
        print("정산이 완료되었습니다! 다음에도 또 찾아주세요~")

 

보완점

 - 실행 후 다시 다른 기능들을 복귀할 수 있도록 코드를 구성해야 됬다.

 - 코드를 따로따로 구성 하다보니 불편한점이 있어서 이를 보완해야될거같다.