본문 바로가기
프로그램/Python 1000제

Python 327제] 두근두근 파이썬(개정판) CHAPTER 13 연습문제 4 p397

by 건티 2024. 10. 28.
728x90

출처 : 반크_독도2023

 

참고풀이]

from tkinter import *
import random
import time

class Ball:
    def __init__(self, x, y, col, size): #원의 위치, 색, 그리고 크기를 받아온다.
        #x,y위치에서 size크기의 col색의 원을 그린다.
        self.won=canvas.create_oval(x, y, x+size, y+size, fill=col)
        self.mx=random.randint(1,10) #x의 이동값을 임의의로 구한다.
        self.my=random.randint(1,10) #y의 이동값을 임의의로 구한다.
       
    def Move(self):
        canvas.move(self.won, self.mx, self.my)
        #현재 원 위치의 시작점과 끝점을 구한다.
        x1, y1, x2, y2 = canvas.coords(self.won)
        #원이 위쪽이나 아래쪽으로 벗어났다면
        if y2>canvas.winfo_height() or y1<0:
            self.my *= -1 #이동방향을 반전시킨다.
        #원이 왼쪽이나 오른쪽으로 벗어났다면
        if x2>canvas.winfo_width() or x1<0:
            self.mx *= -1 #이동방향을 반전시킨다.

win=Tk()
win.geometry("820x720")

canvas=Canvas(win, width=800, height=700)
canvas.pack()

bList=[]
colors=["blue", "red", "yellow", "green", "indigo", "violet", "orange", "gray"]
for i in range(10):
    xm=random.randint(0,700)
    ym=random.randint(0,600)
    sizem=random.randint(20, 150)
    colm=random.choice(colors)
    bList.append(Ball(xm, ym, colm, sizem))

while True:
    for i in range(10):
        bList[i].Move()
    win.update()
    time.sleep(0.05)

win.mainloop()

 

참고풀이 결과]

 

 

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

반응형

댓글