|
# Copyright (c) 2018 Peter Kwak (Edited by Chris Pedersen) |
|
# This is free and unencumbered software released into the public domain. |
|
# For more information, please refer to <http://unlicense.org/> |
|
|
|
import turtle |
|
|
|
# Create Game Window |
|
screen = turtle.Screen() |
|
# screen.setup(500, 400) |
|
screen.screensize(500, 500, "black") |
|
screen.bgcolor("black") |
|
# screen.addshape("Paddle.jpg") |
|
|
|
# Create Ping Pong Ball |
|
ball = turtle.Turtle() |
|
ball.penup() |
|
ball.speed(0) |
|
ball.shape("circle") |
|
ball.color("white") |
|
|
|
# Create Left Ping Pong Paddle |
|
paddle1 = turtle.Turtle() |
|
paddle1.penup() |
|
paddle1.speed(0) |
|
paddle1.setx(-200) |
|
paddle1.shape("square") |
|
paddle1.shapesize(4.5, 1, 0) |
|
paddle1.fillcolor("white") |
|
|
|
# Create Right Ping Pong Paddle |
|
paddle2 = turtle.Turtle() |
|
paddle2.penup() |
|
paddle2.speed(0) |
|
paddle2.setx(200) |
|
paddle2.shape("square") |
|
paddle2.shapesize(4.5, 1, 0) |
|
paddle2.fillcolor("white") |
|
|
|
# Create Scoreboard |
|
scoreWriter = turtle.Turtle() |
|
scoreWriter.penup() |
|
scoreWriter.speed(0) |
|
scoreWriter.hideturtle() |
|
scoreWriter.color("white") |
|
|
|
# Set Ball Trajectory |
|
rise = 3 |
|
run = 3 |
|
|
|
# Set Score |
|
score1 = 0 |
|
score2 = 0 |
|
|
|
# Create Function Which Will Move Player 1's Paddle Up |
|
def up1(): |
|
paddle1.sety(paddle1.ycor() + 50) |
|
|
|
# Create Function Which Will Move Player 1's Paddle Down |
|
def down1(): |
|
paddle1.sety(paddle1.ycor() - 50) |
|
|
|
# Create Function Which Will Move Player 2's Paddle Up |
|
def up2(): |
|
paddle2.sety(paddle2.ycor() + 50) |
|
|
|
# Create Function Which Will Move Player 2's Paddle Down |
|
def down2(): |
|
paddle2.sety(paddle2.ycor() - 50) |
|
|
|
# Create Function To Update Scoreboard |
|
def updateScoreboard(): |
|
global scoreWriter |
|
global score1 |
|
global score2 |
|
global ball |
|
scoreWriter.clear() |
|
myFont = ("Arial", 40, "bold") |
|
scoreWriter.goto(-100, 150) |
|
scoreWriter.write(score1, font=myFont) |
|
scoreWriter.goto(100, 150) |
|
scoreWriter.write(score2, font=myFont) |
|
ball.goto(0, 0) |
|
|
|
# Set Event Listeners |
|
# These event listeners will listen for button presses (up, down, etc.) |
|
screen.onkey(up1, "w") |
|
screen.onkey(down1, "s") |
|
screen.onkey(up2, "Up") |
|
screen.onkey(down2, "Down") |
|
screen.listen() |
|
|
|
# Create Main Game Loop (Simulates Time, Keeps Game Running) |
|
while True: |
|
# Move Ball |
|
ball.goto(ball.xcor() + run, ball.ycor() + rise) |
|
|
|
# Detect Top or Bottom Boundary Strike |
|
# (Reverses the Ball's Direction of Travel) |
|
if ball.ycor() > 200 or ball.ycor() < -200: |
|
rise = -rise |
|
|
|
# Detect Paddle Strike (Player 1) |
|
# (Also Reverses the Ball's Direction of Travel) |
|
if abs(paddle1.xcor() - ball.xcor()) < 15: |
|
if abs(paddle1.ycor() - ball.ycor()) < 50: |
|
run = -run |
|
|
|
# Detect Paddle Strike (Player 2) |
|
# (Also Reverses the Ball's Direction of Travel) |
|
if abs(paddle2.xcor() - ball.xcor()) < 15: |
|
if abs(paddle2.ycor() - ball.ycor()) < 50: |
|
run = -run |
|
|
|
# Detect When A Player Scores a Point |
|
if ball.xcor() > 250: |
|
# Increment player1's score by 1 point when his ball |
|
# travels past the paddle of his opponent, player 2. |
|
score1 = score1 + 1 |
|
updateScoreboard() |
|
ball.goto(0, 0) |
|
elif ball.xcor() < -250: |
|
# Increment player2's score by 1 point when his ball |
|
# travels past the paddle of his opponent, player 1. |
|
score2 = score2 + 1 |
|
updateScoreboard() |
|
ball.goto(0, 0) |
|
|
|
# Christine, My Super Sweet AI Goes HERE... |
|
if ball.ycor() > paddle2.ycor() + 25: |
|
paddle2.sety(paddle2.ycor() + 15) |
|
elif ball.ycor() < paddle2.ycor() - 25: |
|
paddle2.sety(paddle2.ycor() - 15) |