수지수진
10
2020-09-26 22:32:49
1
120

파이썬 코딩 질문 드립니다!!


파이썬으로 하는 숫자 맞히기 게임 같은 걸 만들고 싶은데요!


첫 메뉴에는 곧바로 시작하기, 숫자 범위 조정하기, 제일 높은 점수 보기, 그리고 끝내기 이렇게 네 개가 나와있어야 해요.

끝내기를 제외한 세 개를 다 하게 되면 또 메뉴판이 뜨면서 다른 기능을 다시금 쓸 수 있게 해야 합니다.

곧바로 시작하기를 고르게 되면 미리 정해놓은 1과 42 중에 랜덤 숫자가 나오고 기본 파이썬 숫자 맞히기 게임처럼 맞혀야 하는 형식이고요, 유저가 얼마나 틀렸는지 기록하고 제일 높은 점수 보기에 언제든 볼 수 있게 이름과 점수를 함께 기록을 해야 합니다. 만약 게임을 하기 전에 제일 높은 점수 보기를 누르게 된다면 '아직 아무것도 없다' 를 띄워야 하고요.

숫자 범위를 조정하기를 누르게 되면 유저가 제일 작은 숫자와 제일 큰 숫자를 정할 수 있게 해야 하는데요, 정하고 난 다음에는 이것이 게임의 범위가 되어야 합니다.

한 번 게임을 한 유저는 게임을 다시 못 하게 해야 하며, 다른 이름을 집어넣어야 곧바로 게임이 다시 실행이 됩니다.


대략 이게 이 게임의 설명인데요, 함수와 루프, 그리고 셀렉션 등등을 써서 하는데 막히는 부분이 몇 있습니다.

1. 게임 범위를 설정하고 난 후 본 게임에 적용시키는 방법

2. 유저가 게임을 하고 난 후 이름과 기록을 기억해 높은 점수 보기에 등록하는 방법


이거 두 부분을 어떻게 해야 할지 너무 모르겠어서 질문 드립니다. 아직 기본적인 것만 배운 터라 조금 나아간 코드는 쓸 수 없어요. 


팁을 주셔도 감사하고요, 게임 흐름 전체를 잡아주시면 더더욱 감사하겠습니다.

좋은 하루 되세요!

0
  • 답변 1

  • howoni123
    403
    2020-09-28 17:16:33

    질문을 하실때에는 자신이 생각하는 내용에 대해서 언급을 하는게 좋아보입니다.

    또한 작성중인 소스코드가 없이 답변을 원하시는 건 답변자가 관련되어 소스코드를 다 작성하는 수 밖에 없습니다.

    아마 쉬운 내용일지래도 이틀간 답변이 안달린내용이라면 질문자의 질문방식이 틀렸다고 할 수 있을거 같습니다.

    하지만 전 오늘 시간이 남아돌고 도와드리고 싶은 의향이 있어 아래와 같이 코드 남깁니다.

    어렵지 않는 내용이라... 보시기만 해도 이해하실거라 판단되고 관련되어 물어보실내용이 있으시면 답글부탁드려요

    감사합니다

    import random
    import sys
    
    class game():
        def __init__(self):  
            '''
                게임에 대한 최초정보 생성
                최소값 0
                최대값 42
                정답은 0 ~ 42 int
                최초 게임 순위에 대해서는 리스트형태로
            '''
            self.min = 0
            self.max = 42
            self.answer = random.randint(self.min, self.max)
            self.rank = []
    
        def modify_gamevalue(self):
            '''
                게임범위수정
                self.min , self.max 값 변경 이후에
                change_value 함수를 통해 answer 값 재조정
            '''
            try:
                min = int(input('[?] Change min value > '))
                max = int(input('[?] Change max value > '))
            except:
                return 0
    
            if min > max:
                return 0
    
            self.min = min
            self.max = max
            self.change_value()
    
        def change_value(self):
            '''
                게임정답수정
                __init__ 처럼 처리해도 되지만 정답일시에
                동일 범위내에 새로운 정답을 만들어야하기 때문에 함수화         
            '''
            self.answer = random.randint(self.min, self.max)
    
        def record_score(self, player):
            '''
                점수기록
                rank 리스트에 플레이어 정보(리스트) 넣기. 
            '''
            self.rank.append(player.getinfo())
    
        def view_rank(self):
            '''
                점수 출력
                점수 리스트 [이름, 점수] 에 대해서 점수로 오름차순 하여 정렬 
                시도가 적은사람이 랭크가 높아야한다.
            '''
            self.rank.sort(key=lambda x:x[1])
            for idx, i in enumerate(self.rank):
                print(f'RANK {idx+1} : {i[0]} is {i[1]} attempt.')
    
    class player():
        def __init__(self):
            '''
                플레이어 정보 생성
                플레이어의 정보는 이름과 점수면 된다.
            '''
            self.name = ""
            self.score = 1
    
        def getinfo(self):
            '''
                플레이어 정보
                에 대한 리스트 return 
            '''
            return [self.name,self.score]
    
    def menu():
        while True:
            msg ='''Playing Game :D
        1. playing game
        2. modify game range
        3. view rank
        4. quit
    >>> '''
            q = input(msg)
            if q.isdigit():
                return int(q)
    
    def ingame(game):
        playerinfo = player() #게임 시작시 플레이어 정보 받기 
        playerinfo.name = input('input your name > ')
        
        while True: #게임시작
            q = input('[?] Input Your Value > ')
            if q.isdigit() is True: 
                if int(q) == game.answer:
                    msg = '''
                    
         **   Congraturation   **
                 
    '''
                    print(msg)
                    game.record_score(playerinfo) #정답일시에 플레이어 정보를 game.rank 집어넣고 동일 범위내 정답 수정
                    game.change_value()
                    break
                else:
                    print('[!] Wrong :(')
                    playerinfo.score += 1
            else:
                print('[?] Wrong type !!')
    
    
    def main():
        gameinfo = game() # 게임로딩
        while True:
            q = menu()
            if q == 1:
                ingame(gameinfo)
            elif q == 2:
                if gameinfo.modify_gamevalue() != 0:
                    print("[!] Changed")
            elif q == 3:
                gameinfo.view_rank()
            elif q == 4:
                sys.exit()
    
    if __name__ == "__main__":
        main()


  • 로그인을 하시면 답변 을 등록할 수 있습니다.