Created
September 3, 2019 07:15
-
-
Save topherPedersen/d42b59d15d2d377e960dcbabdc5112bd to your computer and use it in GitHub Desktop.
Simple Pong Tutorial using Turtle by Peter Kwak, edited by Topher Pedersen
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment