π κ³Όμ μ μΆ μλ΄
π‘ κ²μ μ€λͺ
μ
import turtle
# νλ©΄ μ€μ
screen = turtle.Screen()
screen.title("Ping Pong")
screen.bgcolor("black")
screen.setup(width=600, height=400)
# ν¨λ€ μμ±
def create_paddle(x):
paddle = turtle.Turtle()
paddle.shape("square")
paddle.color("white")
paddle.shapesize(stretch_wid=6, stretch_len=1)
paddle.penup()
paddle.goto(x, 0)
return paddle
left_paddle = create_paddle(-250)
right_paddle = create_paddle(250)
# 곡
ball = turtle.Turtle()
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 6
ball.dy = 6
# μ μ
left_score = 0
right_score = 0
# μ μ νμ
score_display = turtle.Turtle()
score_display.color("white")
score_display.penup()
score_display.hideturtle()
score_display.goto(0, 160)
score_display.write("Left: 0 Right: 0", align="center", font=("Courier", 24, "normal"))
# κ²μ μ’
λ£ νμ
game_over_display = turtle.Turtle()
game_over_display.color("white")
game_over_display.penup()
game_over_display.hideturtle()
game_over_display.goto(0, 0)
# ν€ μν μ μ₯ λ³μ
keys = {"w": False, "s": False, "Up": False, "Down": False}
# ν€ μ΄λ²€νΈ νΈλ€λ¬
def press_key(key):
keys[key] = True
def release_key(key):
keys[key] = False
# λ°λ³΅μ μΌλ‘ ν€ μνλ₯Ό νμΈν΄μ ν¨λ€ μ΄λ
def move_paddles():
if keys["w"] and left_paddle.ycor() < 150:
left_paddle.sety(left_paddle.ycor() + 10)
if keys["s"] and left_paddle.ycor() > -150:
left_paddle.sety(left_paddle.ycor() - 10)
if keys["Up"] and right_paddle.ycor() < 150:
right_paddle.sety(right_paddle.ycor() + 10)
if keys["Down"] and right_paddle.ycor() > -150:
right_paddle.sety(right_paddle.ycor() - 10)
screen.ontimer(move_paddles, 20) # 0.02μ΄λ§λ€ λ°λ³΅
# ν€ λ°μΈλ©
screen.listen()
screen.onkeypress(lambda: press_key("w"), "w")
screen.onkeyrelease(lambda: release_key("w"), "w")
screen.onkeypress(lambda: press_key("s"), "s")
screen.onkeyrelease(lambda: release_key("s"), "s")
screen.onkeypress(lambda: press_key("Up"), "Up")
screen.onkeyrelease(lambda: release_key("Up"), "Up")
screen.onkeypress(lambda: press_key("Down"), "Down")
screen.onkeyrelease(lambda: release_key("Down"), "Down")
move_paddles() # ν¨λ€ μμ§μ κ°μ§ μμ
# κ²μ 루ν
while True:
screen.update()
# 곡 μμ§μ
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# μν λ²½ λ°μ¬
if ball.ycor() > 190 or ball.ycor() < -190:
ball.dy *= -1
# μ μ 쑰건
if ball.xcor() < -290:
right_score += 1
ball.goto(0, 0)
ball.dx *= -1
score_display.clear()
score_display.write(f"Left: {left_score} Right: {right_score}", align="center", font=("Courier", 24, "normal"))
if ball.xcor() > 290:
left_score += 1
ball.goto(0, 0)
ball.dx *= -1
score_display.clear()
score_display.write(f"Left: {left_score} Right: {right_score}", align="center", font=("Courier", 24, "normal"))
# ν¨λ€ μΆ©λ
if (240 < ball.xcor() < 250) and (right_paddle.ycor() - 50 < ball.ycor() < right_paddle.ycor() + 50):
ball.dx *= -1
if (-250 < ball.xcor() < -240) and (left_paddle.ycor() - 50 < ball.ycor() < left_paddle.ycor() + 50):
ball.dx *= -1
# μΉλ¦¬ 쑰건
if left_score == 5:
game_over_display.write("Left Player Wins!", align="center", font=("Courier", 36, "normal"))
break
if right_score == 5:
game_over_display.write("Right Player Wins!", align="center", font=("Courier", 36, "normal"))
break
πΎ κ²μ μ€ν μμ νμΌ λ° μμ§ νμΌ