dico.gif


DANG.gif

giphy---복사본.gif

i15947420946.gif

huuon2.gif



♨신규 게시물♨




♨신규 댓글♨




♨랭킹 TOP 50♨


  1. 사나 28,441
  2. 치즈돈가스덮밥 24,653
  3. 투혼v 23,770
  4. ZicP 20,948
  5. 호날두마리치킨 17,455
  6. 김돈치 12,414
  7. 에케덟 11,551
  8. 반가워용 11,138
  9. 자료구 10,520
  10. 안인시우안 9,949
  11. 타이갓 8,981
  12. 도리고 8,935
  13. 브랜뉴 8,848
  14. 악당 8,688
  15. 헉헉로 8,453
  16. 킴성태와함께 8,124
  17. kimjg 7,460
  18. Ollie 5,925
  19. 피요옹 5,350
  20. 노트 4,691
  21. 지금몇시지 4,644
  22. 밍정잉 4,534
  23. 도리toS 4,393
  24. 염탐맨 4,304
  25. 은당수 4,108
  26. 뉴비임다 3,820
  27. 틸란 3,554
  28. 모두모두파이팅 3,525
  29. 원솔 3,486
  30. 인도남자 3,115
  31. 유미코 2,970
  32. 셍스 2,761
  33. 무무기 2,613
  34. 남동현 2,560
  35. 와룡 2,539
  36. 택이 2,439
  37. 가국가가 2,439
  38. 코난 2,419
  39. 츠이게스레가 2,418
  40. gurdl20 2,393
  41. 빛나는길 2,346
  42. KIM 2,316
  43. 살수가없다 2,272
  44. 라일리 2,235
  45. 제리이라아 2,206
  46. 리신 2,168
  47. 선하 2,163
  48. f3sads 2,147
  49. Jong 2,079
  50. 개나리 2,058

6faa2286ccd015fb37f28f688e13eac6.png

파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기

지금몇시지2019.08.11 00:18조회 수 68추천 수 2댓글 2

  • 4
    • 글자 크기

파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기

 

ch_title.png

다음화면에 이걸 넣도록 하겠습니다(임시조치) 다운받아주세요. (도움을 주신 사나님 정말 감사드립니다)

그리고 지금까지 로그인을 할때 콘솔창에 입력하는 형식이였습니다. 하지만 이기능을 대대적으로 수정하여 진짜 메이플과 유사하게 바꿔보도록 하겠습니다.

 

우선 다음화면 출력부터 하겠습니다.

class game:
    def __init__(self):
        self.state = 0
        self.image = pygame.image.load("resource\image\ch_title.png")
                
    def system(self):
        global play 

        if self.state == 0: # 로그인 화면
            login.system()

        elif self.state == 1: # 다음 화면
            screen.blit(self.image, (0, 0))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    play = False 

 

저번이랑 달라진 부분은  screen.blit(self.image, (0, 0)) 추가밖에 없습니다 

저 이미지를 그려주는거죠 ㅎㅎ. 그러면 밑에 사진처럼 됩니다

18.PNG

 

이제 부터가 진짜 문제인데 아까도 말했다시피 지금까지는 콘솔로 입력받았습니다.

이걸이제 키보드로부터 값을받아 화면에 출력해주겠습니다. 지금까지 했던작업중 그 무엇보다 하드코딩 입니다.

로직 자체가 어려운것은 아니나 다소 복잡할수 있습니다. 이론부터 설명하겠습니다

로직은: 키입력 -> loign.input[1] 에 저장 -> 뭔가 이벤트를하면 -> 현재 login.input[1]을 user_id든 user_pw든 저장 이런식입니다.

pygame은 키입력 메소드인 pygame.key.get_pressed()

이 메소는 입력된 모든값을 받기때문에 로그인시 구현할때 다소부적절한 함수일수있습니다. (누르고 있으면 계속받음)

하지만 처음에 실수로 이걸로 이 메소드로 만들어버려서.. 이미 되돌리기에는 너무 노가다.. 그래서 그냥하겠습니다

시간이 남으신분들은 이메소드를 부디 쓰지말아주세여

class key라는것을 만들어 따로처리하겠습니다

 

class key:
    def system(self):
        key_event = pygame.key.get_pressed()

        if pygame.KEYDOWN:
            if key_event[pygame.K_q]: # Q or q
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'Q'
                else:
                    login.input[1] = login.input[1] + 'q'

            elif key_event[pygame.K_w]: # W or w
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'W'
                else:
                    login.input[1] = login.input[1] + 'w'

            elif key_event[pygame.K_e]: # E or e
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'E'
                else:
                    login.input[1] = login.input[1] + 'e'

            elif key_event[pygame.K_r]: # R or r
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'R'
                else:
                    login.input[1] = login.input[1] + 'r'

            elif key_event[pygame.K_t]: # T or t
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'T'
                else:
                    login.input[1] = login.input[1] + 't'

            elif key_event[pygame.K_y]: # Y or y
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'Y'
                else:
                    login.input[1] = login.input[1] + 'y'

            elif key_event[pygame.K_u]: # U or u
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'U'
                else:
                    login.input[1] = login.input[1] + 'u'

            elif key_event[pygame.K_i]: # I or i
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'I'
                else:
                    login.input[1] = login.input[1] + 'i'

            elif key_event[pygame.K_o]: # O or o
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'O'
                else:
                    login.input[1] = login.input[1] + 'o'

            elif key_event[pygame.K_p]: # P or p
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'P'
                else:
                    login.input[1] = login.input[1] + 'p'

            elif key_event[pygame.K_a]: # A or a
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'A'
                else:
                    login.input[1] = login.input[1] + 'a'

            elif key_event[pygame.K_s]: # S or s
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'S'
                else:
                    login.input[1] = login.input[1] + 's'

            elif key_event[pygame.K_d]: # D or d
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'D'
                else:
                    login.input[1] = login.input[1] + 'd'

            elif key_event[pygame.K_f]: # F or f
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'F'
                else:
                    login.input[1] = login.input[1] + 'f'

            elif key_event[pygame.K_g]: # G or g
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'G'
                else:
                    login.input[1] = login.input[1] + 'g'

            elif key_event[pygame.K_h]: # H or h
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'H'
                else:
                    login.input[1] = login.input[1] + 'h'

            elif key_event[pygame.K_j]: # J or j
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'J'
                else:
                    login.input[1] = login.input[1] + 'j'

            elif key_event[pygame.K_k]: # K or k
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'K'
                else:
                    login.input[1] = login.input[1] + 'k'

            elif key_event[pygame.K_l]: # L or l
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'L'
                else:
                    login.input[1] = login.input[1] + 'l'

            elif key_event[pygame.K_z]: # Z or z
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'Z'
                else:
                    login.input[1] = login.input[1] + 'z'

            elif key_event[pygame.K_x]: # X or x
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'X'
                else:
                    login.input[1] = login.input[1] + 'x'

            elif key_event[pygame.K_c]: # C or c
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'C'
                else:
                    login.input[1] = login.input[1] + 'c'

            elif key_event[pygame.K_v]: # V or v
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'V'
                else:
                    login.input[1] = login.input[1] + 'v'

            elif key_event[pygame.K_b]: # B or b
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'B'
                else:
                    login.input[1] = login.input[1] + 'b'

            elif key_event[pygame.K_n]: # N or n
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'N'
                else:
                    login.input[1] = login.input[1] + 'n'

            elif key_event[pygame.K_m]: # M or m
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'M'
                else:
                    login.input[1] = login.input[1] + 'm'

            elif key_event[pygame.K_n]: # N or n
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'N'
                else:
                    login.input[1] = login.input[1] + 'n'

            elif key_event[pygame.K_m]: # M or m
                if key_event[pygame.K_CAPSLOCK] or key_event[pygame.K_LSHIFT] or key_event[pygame.K_RSHIFT]:
                    login.input[1] = login.input[1] + 'M'
                else:
                    login.input[1] = login.input[1] + 'm'

            elif key_event[pygame.K_0] or key_event[pygame.K_KP0]: # 0
                login.input[1] = login.input[1] + '0'

            elif key_event[pygame.K_1] or key_event[pygame.K_KP1]: # 1
                login.input[1] = login.input[1] + '1'

            elif key_event[pygame.K_2] or key_event[pygame.K_KP2]: # 2
                login.input[1] = login.input[1] + '2'

            elif key_event[pygame.K_3] or key_event[pygame.K_KP3]: # 3
                login.input[1] = login.input[1] + '3'

            elif key_event[pygame.K_4] or key_event[pygame.K_KP4]: # 4
                login.input[1] = login.input[1] + '4'

            elif key_event[pygame.K_5] or key_event[pygame.K_KP5]: # 5
                login.input[1] = login.input[1] + '5'

            elif key_event[pygame.K_6] or key_event[pygame.K_KP6]: # 6
                login.input[1] = login.input[1] + '6'

            elif key_event[pygame.K_7] or key_event[pygame.K_KP7]: # 7
                login.input[1] = login.input[1] + '7'

            elif key_event[pygame.K_8] or key_event[pygame.K_KP8]: # 8
                login.input[1] = login.input[1] + '8'

            elif key_event[pygame.K_9] or key_event[pygame.K_KP9]: # 9
                login.input[1] = login.input[1] + '9'

            elif key_event[pygame.K_BACKSPACE]:
                login.input[1] = login.input[1][:len(login.input[1])-1]

            time.sleep(0.1)

 

보시면 아시겠지만 login.input[1] 이라는 배열에 인덱스 1번째에 누르고있는 키를 저장하빈다

 아 그리고 화면에 표시하기 위한 폰트는 저는 궁서체를 사용합니다 

font = pygame.font.Font("resource\\font\\Maplestory Light.ttf", 12) <- 이걸 import밑에다가 써줍시다

로그인쪽 부분은 아래와같습니다.

class login:
    def __init__(self):
        # 이미지 관련
        self.titles = [ pygame.image.load("resource\image\\title.png"), pygame.image.load("resource\image\\title2.png"), pygame.image.load("resource\image\common.png") ] 
        self.logins = [ pygame.image.load("resource\image\signboard.png"), pygame.image.load("resource\image\login.png"), pygame.image.load("resource\image\id_register.png"),
                        pygame.image.load("resource\image\quit.png"), pygame.image.load("resource\image\id.png"), pygame.image.load("resource\image\pw.png") ]

        # 충돌변수 관련
        self.mouse_rect = pygame.Rect(0, 0, 10, 10)
        self.id_rect = pygame.Rect(290, 280, 160, 23)
        self.pw_rect = pygame.Rect(290, 306, 160, 23)
        self.id_register_rect = pygame.Rect(320, 355, 69, 30)
        self.login_rect = pygame.Rect(455, 280, 50, 50)
        self.quit_rect = pygame.Rect(405, 355, 69, 30)

        # 변수 관련
        self.input = [ "000", "" ]
        self.user_id = ""
        self.user_pw = ""
        self.data = ""
        self.bdata = ""

    def system(self):
        global play

        self.mouse_rect.topleft = pygame.mouse.get_pos()
        self.draw()

        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONDOWN:
                if login.mouse_rect.colliderect(login.id_rect): # 로그인 입력
                    if self.input[0] == "010":
                        self.user_pw = self.input[1]
                        self.input[0] = "100"
                    elif self.input[0] == "000":
                        self.input[0] = "001"
                    self.input[1] = ""
                elif login.mouse_rect.colliderect(login.pw_rect): # 비밀번호 입력
                    if self.input[0] == "001":
                        self.input[0] = "011"
                        self.user_id = self.input[1]
                    elif self.input[0] == "000":
                        self.input[0] = "010"
                    self.input[1] = ""

                elif login.mouse_rect.colliderect(login.id_register_rect): # 회원가입 버튼
                    if self.input[0] == "011":
                        self.user_pw = self.input[1]
                    elif self.input[0] == "100":
                        self.user_id = self.input[1]
                    self.data = self.user_id + ' ' + self.user_pw
                    f = open('setting.txt','wt')
                    f.write(self.data)
                    f.close()
                    print("회원가입 성공")
                    self.input[0], self.input[1] = "000", ""
                    self.user_id, self.user_pw = "", ""

                elif login.mouse_rect.colliderect(login.login_rect): # 로그인 버튼
                    if self.input[0] == "011":
                        self.user_pw = self.input[1]
                    elif self.input[0] == "100":
                        self.user_id = self.input[1]
                    f = open('setting.txt','rt')
                    self.bdata = f.readline()
                    f.close()
                    if self.bdata == (self.user_id + ' ' + self.user_pw):
                        print("로그인 성공")  
                        game.state = 1
                    self.input[0], self.input[1] = "000", ""
                    self.user_id, self.user_pw = "", ""

                elif login.mouse_rect.colliderect(login.quit_rect):
                    play = False

            elif event.type == pygame.QUIT:
                play = False 

    def draw(self):
        screen.blit(self.titles[0], (0, 0))
        screen.blit(self.titles[1], (0, 0))
        screen.blit(self.titles[2], (0, 0))
        screen.blit(self.logins[0], (275, 265))
        screen.blit(self.logins[1], (455, 280))
        screen.blit(self.logins[2], (320, 355))
        screen.blit(self.logins[3], (405, 355)) # 435, 355

        if self.input[0] == "000":
            screen.blit(self.logins[4], (290, 280))
            screen.blit(self.logins[5], (290, 306))

        if self.input[0] == "001": # ID = on, PW = off
            screen.blit(self.logins[5], (290, 306))
            screen.blit(font.render(self.input[1], True, (255, 255, 255)), (295, 283))
        elif self.input[0] == "011":
            screen.blit(font.render(self.user_id, True, (255, 255, 255)), (295, 283))
            screen.blit(font.render('*' * len(self.input[1]), True, (255, 255, 255)), (295, 309))

        if self.input[0] == "010": # ID = off, PW = on
            screen.blit(self.logins[4], (290, 280))
            screen.blit(font.render('*' * len(self.input[1]), True, (255, 255, 255)), (295, 309))
        elif self.input[0] == "100":
            screen.blit(font.render(self.input[1], True, (255, 255, 255)), (295, 283))
            screen.blit(font.render('*' * len(self.user_pw), True, (255, 255, 255)), (295, 309))

 

흠 이부분은  설명하기가 난해하네요

쉽게말하면 000은 아무것도아닌상태 001은 아이디만 입력한상태 010은 비밀번호만 입력한상태

011은 다입력한상태 100도 다입력한상태 011, 100의 차이는 순서의 차이입니다 무엇부터 입력했냐 이차이밖에없습니다.

자 오늘강의는 여기서 맞추도록 하겠습니다 아래는 시연영상입니다.

 

Loading the player ...

 

추천해주신 분들

  • 4
    • 글자 크기
03. 크레이지 아케이드 만들기 (타이머 매니저, 싱글톤 패턴) (by sacyz1n)

댓글 달기 WYSIWYG 사용

글쓴이 비밀번호
댓글 2
번호 제목 글쓴이 조회 수
파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기2 지금몇시지 68
22 03. 크레이지 아케이드 만들기 (타이머 매니저, 싱글톤 패턴)3 sacyz1n 63
21 02. 크레이지 아케이드 만들기 (PeekMessage, 게임 구조) sacyz1n 31
20 01. 크레이지 아케이드 만들기 (윈도우 창 보정,)2 sacyz1n 43
19 00. 크레이지 아케이드 만들기 (Win API 소개)2 sacyz1n 53
18 파이썬을 이용한 간단한 메이플스토리 만들기(5/20) - 회원가입 및 로그인 기능 수정 및 다음 화면 만들기1 지금몇시지 41
17 파이썬을 이용한 간단한 메이플스토리 만들기 공지(포토샵 디자이너 모집)2 지금몇시지 76
16 파이썬을 이용한 간단한 메이플스토리 만들기(4/20) - 회원가입 및 로그인 기능 만들기5 지금몇시지 111
15 파이썬을 이용한 간단한 메이플스토리 만들기(3/20) - 로그인 화면 만들기3 지금몇시지 138
14 파이썬을 이용한 간단한 메이플스토리 만들기(2/20) - IDE(통합개발환경)설치편1 지금몇시지 34
13 파이썬을 이용한 간단한 메이플스토리 만들기(1/20) - 설치편1 지금몇시지 56
12 [C#]프로그래밍 강좌 5 - 2장 : 기본 자료형1 사나 20
11 [던파]구축법3 사나 75
10 [던파]NPC판매품목 변경하기 수정본1 사나 23
9 [던파]모든 던전난이도 언락 사나 21
8 [C#]프로그래밍 강좌 5 - 1장 : 기본 자료형 사나 14
7 [C#]프로그래밍 강좌 4장 : C# 기본용어1 사나 20
6 [C#]프로그래밍 강좌 3장 : C# 시작하기 사나 16
5 [C#]프로그래밍 강좌 2장 : C# 시작하기 사나 21
4 [C#]프로그래밍 강좌 1장 : C#의 정의3 사나 28
첨부 (4)
ch_title.png
551.1KB / Download 0
">
18.PNG
75.7KB / Download 0
">
maplestory.zip
12.97MB / Download 1
">
bandicam 2019-08-10 15-41-20-372.mp4
1.41MB / Download 0
">

서버에 요청 중입니다. 잠시만 기다려 주십시오...