[파이썬 게임 프로그래밍 공부] 1. tkinter 모듈 시작하기

Alegruz
2017-09-01
조회수 21795

이 공부 시리즈는 Python Game Programming by Example이라는 책의 설명이 너무 부실해서 제가 따로 연재하는 것입니다. 모든 소스 코드는 PACKT 출판사의 것입니다.


게임을 만들기 전에 생각을 해봅시다.

우선, 게임을 실행하는 프로그램이 어떻게 이루어져 있을지 생각해봅시다. 게임을 인체로 비유를 해볼까요? 그렇다면 게임엔 영혼이 있겠고(있다고 칩시다) 신체 내부에서 작동하는 다양한 것들이 있을 것이고, 최종적으론 사람들의 눈에 보일 피부와 얼굴 등이 있을 것입니다. 이 세 가지, 영혼, 작동원리, 외견이 필요합니다.


영혼 > 작동원리 > 외견이라고 보면 다음과 같습니다.

영혼 = Tk = root = tkinter.Tk()

작동원리 == Game -> class Game(tkinter.Frame)

외견 == Canvas -> self.canvas = tkinter.Canvas(master, option=value, ... )


자 그렇다면 프로그래밍 할 때는 무엇을 해야할까요?

  1. 우선 게임의 master, 즉 영혼을 만들어야합니다. 이것은 Tk 클래스입니다.
  2. 다음엔 Frame 클래스, 즉 심장, 근육 등 뼈대를 만들어야한다. 이것은 Tk를 부모로 상속받아야할 것입니다.
  3. 마지막으론 사실상 게이머들이 볼 게임의 외견, Canvas 위젯이 필요하죠. 이 위젯은 Frame 클래스 위에 있어야할 것입니다.


1번에 따라 master를 제작해봅시다.


import tkinter as tk

if __name__ == '__main__':
    root = tk.Tk()
    root.title('Game Title')    #게임의 이름을 결정한다.


자, 이제 게임의 뼈대를 제작해봅시다.

import tkinter as tk

class Game(tk.Frame):
    def __init__(self, master): #master 는 부모를 의미한다. 즉, Tk를 의미.
        super(Game, self).__init__(master)
        self.pack() #공간 중에서 사용할 것이라고 선언되었으며, 사용될 공간을 할당한다. 즉, 불필요한 공간을 없애는 역할을 해준다.

if __name__ == '__main__':
    root = tk.Tk()
    root.title('Game Title')
    game = Game(root)
    game.mainloop() #사실상 게임을 팔딱팔딱 움직이게 만들 혈액순환이다.


마지막으로, 게임의 외견을 만들어봅시다.

import tkinter as tk

class Game(tk.Frame):
    def __init__(self, master):
        super(Game, self).__init__(master)
        self.width = 600
        self.width = 400
        self.canvas = tk.Canvas(self, bg = '#aaaaaa', width = self.width, height = self.height)
'''Canvas 위젯은 우선 master를 필요로 한다. 그 이외 옵션들은 마음대로 지정해도 된다. 위에서 사용한 옵션들은 기본적인 배경화면 색을 지정해주는 bg와 게임의 가로길이와 세로길이를 결정해줄 width와 height을 사용했다.'''
        self.canvas.pack()
        self.pack()

if __name__ == '__main__':
    root = tk.Tk()
    root.title('Game Title')
    game = Game(root)
    game.mainloop()


이것으로 게임 만들 준비운동 정도 끝난 것 같네요.


추가적으로, bg 옆에 쓰인 #으로 시작하는 코드는 HTML Colour Code입니다.

http://htmlcolorcodes.com/

이 사이트를 통해 마음에 드는 색깔을 마음껏 사용하세요~



7 0