πŸ“ 과제 제좜 μ•ˆλ‚΄

πŸ’‘ κ²Œμž„ μ„€λͺ…μ„œ

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

πŸ’Ύ κ²Œμž„ μ‹€ν–‰ μ˜μƒ 파일 및 μ•Œμ§‘ 파일