■ tkinter 모듈을 사용해 바운스 게임을 만드는 방법을 보여준다.
▶ ball.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import random class Ball: def __init__(self, canvas, paddle, color): self.canvas = canvas self.paddle = paddle self.id = canvas.create_oval(10, 10, 25, 25, fill = color) self.canvas.move(self.id, 245, 100) startXList = [-3, -2, -1, 1, 2, 3] random.shuffle(startXList) self.x = startXList[0] self.y = -3 self.canvas_height = self.canvas.winfo_height() self.canvas_width = self.canvas.winfo_width() self.hitBottom = False def draw(self): self.canvas.move(self.id, self.x, self.y) position = self.canvas.coords(self.id) if position[1] <= 0: self.y = 3 if self.hitPaddle(position) == True: self.y = -3 if position[3] >= self.canvas_height: self.hitBottom = True if position[0] <= 0: self.x = 3 if position[2] >= self.canvas_width: self.x = -3 def hitPaddle(self, position): paddle_pos = self.canvas.coords(self.paddle.id) if position[2] >= paddle_pos[0] and position[0] <= paddle_pos[2]: if position[3] >= paddle_pos[1] and position[3] <= paddle_pos[3]: return True return False |
▶ paddle.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class Paddle: def __init__(self, canvas, color): self.canvas = canvas self.id = canvas.create_rectangle(0, 0, 100, 10, fill = color) self.canvas.move(self.id, 200, 450) self.x = 0 self.canvas_width = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>' , self.moveLeft ) self.canvas.bind_all('<KeyPress-Right>', self.moveRight) def moveLeft(self, evt): self.x = -2 def moveRight(self, evt): self.x = 2 def draw(self): self.canvas.move(self.id, self.x, 0) position = self.canvas.coords(self.id) if position[0] <= 0: self.x = 0 elif position[2] >= self.canvas_width: self.x = 0 |
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import random import time from tkinter import * from ball import * from paddle import * tk = Tk() tk.title("Game") tk.resizable(False, False) tk.wm_attributes("-topmost", True) canvas = Canvas(tk, width = 500, height = 500, bd = 0, highlightthickness = 0) canvas.pack() tk.update() paddle = Paddle(canvas, "blue") ball = Ball(canvas, paddle, "red") while True: if ball.hitBottom == False: ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01) |