使用Python中的turtle制作乒乓球游戏
乒乓球游戏是最著名的街机游戏之一,非常类似于乒乓球。该游戏的规则很简单:
- 有两个玩家。
- 两个玩家都可以操控自己一侧的球拍。
- 他们可以将球拍在垂直方向上从上往下或从下往上移动。
玩家可以使用球拍来来回击打球。
turtle: turtle是Python中的内置模块,用于图形绘制。用户可以将其用作绘制图形的笔和面板。
以下是绘制乒乓球游戏的步骤:
- 步骤1: 用户需要为屏幕的“左侧”和“右侧”创建两个球拍。
- 步骤2: 接下来,用户需要创建球。
- 步骤3: 然后,通过按下特定的键来创建使球拍在垂直方向上移动的事件,即“左球拍”:按下“R”键表示“上”和“C”键表示“下”,“右球拍”:按下“上”键键表示“上”和按下“下”键表示“下”。
- 步骤4: 最后,创建一个函数,在每个玩家未击中球时更新得分。
代码1:用于绘制球和球拍
import os
import turtle
# First, we will create screen
screen_1 = turtle.Screen()
screen_1.title("Ping-Pong Game")
screen_1.bgcolor("Yellow")
screen_1.setup(width = 1050, height = 650)
# Left paddle
left_paddle = turtle.Turtle()
left_paddle.speed(0)
left_paddle.shape("square")
left_paddle.color("Red")
left_paddle.shapesize(stretch_wid = 6, stretch_len = 2)
left_paddle.penup()
left_paddle.goto(-400, 0)
# Right paddle
right_paddle = turtle.Turtle()
right_paddle.speed(0)
right_paddle.shape("square")
right_paddle.color("Blue")
right_paddle.shapesize(stretch_wid = 6, stretch_len = 2)
right_paddle.penup()
right_paddle.goto(400, 0)
# Ball of circle shape
hit_ball = turtle.Turtle()
hit_ball.speed(45)
hit_ball.shape("circle")
hit_ball.color("White")
hit_ball.penup()
hit_ball.goto(0, 0)
hit_ball.dx = 5
hit_ball.dy = -5
输出:
说明:
首先,我们导入了turtle库。然后,我们使用turtle.Screen()函数编写了背景屏幕的代码。我们使用turtle.Turtle()函数创建了左右挡板,并使用goto()函数定位它们。最后,我们使用turtle.Turtle()函数创建了球,并使用speed()函数和其他必需的参数在屏幕上指定了它的移动速度。屏幕上的球和挡板的插图已准备好。
代码2:用两个玩家插图乒乓球游戏的完整代码
import os
import turtle
# First, we will create screen
screen_1 = turtle.Screen()
screen_1.title("Ping-Pong Game")
screen_1.bgcolor("Yellow")
screen_1.setup(width = 1050, height = 650)
# Left paddle
left_paddle = turtle.Turtle()
left_paddle.speed(0)
left_paddle.shape("square")
left_paddle.color("Red")
left_paddle.shapesize(stretch_wid = 6, stretch_len = 2)
left_paddle.penup()
left_paddle.goto(-400, 0)
# Right paddle
right_paddle = turtle.Turtle()
right_paddle.speed(0)
right_paddle.shape("square")
right_paddle.color("Blue")
right_paddle.shapesize(stretch_wid = 6, stretch_len = 2)
right_paddle.penup()
right_paddle.goto(400, 0)
# Ball of circle shape
hit_ball = turtle.Turtle()
hit_ball.speed(45)
hit_ball.shape("circle")
hit_ball.color("Black")
hit_ball.penup()
hit_ball.goto(0, 0)
hit_ball.dx = 5
hit_ball.dy = -5
# Now, we will initialize the score
left_player = 0
right_player = 0
# Displaying of the score
sketch_1 = turtle.Turtle()
sketch_1.speed(0)
sketch_1.color("blue")
sketch_1.penup()
sketch_1.hideturtle()
sketch_1.goto(0, 260)
sketch_1.write("Left Player : 0 Right Player: 0",
align = "center", font = ("Courier", 24, "normal"))
# Implementing the functions for moving paddle vertically
def paddle_L_up():
y = left_paddle.ycor()
y += 20
left_paddle.sety(y)
def paddle_L_down():
y = left_paddle.ycor()
y -= 20
left_paddle.sety(y)
def paddle_R_up():
y = right_paddle.ycor()
y += 20
right_paddle.sety(y)
def paddle_R_down():
y = right_paddle.ycor()
y -= 20
right_paddle.sety(y)
# Then, binding the keys for moving the paddles up and down.
screen_1.listen()
screen_1.onkeypress(paddle_L_up, "r")
screen_1.onkeypress(paddle_L_down, "c")
screen_1.onkeypress(paddle_R_up, "Up")
screen_1.onkeypress(paddle_R_down, "Down")
while True:
screen_1.update()
hit_ball.setx(hit_ball.xcor() + hit_ball.dx)
hit_ball.sety(hit_ball.ycor() + hit_ball.dy)
# Check all the borders
if hit_ball.ycor() > 280:
hit_ball.sety(280)
hit_ball.dy *= -1
if hit_ball.ycor() < -280:
hit_ball.sety(-280)
hit_ball.dy *= -1
if hit_ball.xcor() > 500:
hit_ball.goto(0, 0)
hit_ball.dy *= -1
left_player += 1
sketch_1.clear()
sketch_1.write("Left_player : {} Right_player: {}".format(
left_player, right_player), align = "center",
font = ("Courier", 24, "normal"))
if hit_ball.xcor() < -500:
hit_ball.goto(0, 0)
hit_ball.dy *= -1
right_player += 1
sketch_1.clear()
sketch_1.write("Left_player : {} Right_player: {}".format(
left_player, right_player), align = "center",
font = ("Courier", 24, "normal"))
# Collision of ball and paddles
if (hit_ball.xcor() > 360 and
hit_ball.xcor() < 370) and (hit_ball.ycor() < right_paddle.ycor() + 40 and
hit_ball.ycor() > right_paddle.ycor() - 40):
hit_ball.setx(360)
hit_ball.dx *= -1
if (hit_ball.xcor() < -360 and
hit_ball.xcor() > -370) and (hit_ball.ycor() < left_paddle.ycor() + 40 and
hit_ball.ycor() > left_paddle.ycor() - 40):
hit_ball.setx(-360)
hit_ball.dx *= -1
输出:
说明:
在上面的代码中,在用挡板和球体展示屏幕的布局后,我们首先会初始化两位玩家的得分,即为零。然后,我们会将得分显示在屏幕上,当对手未能击中球时,得分会增加。然后,我们将实现挡板的垂直移动功能。我们将为每个功能绑定相应的按键,即对于“左边挡板”:上键为“上移”,下键为“下移”,对于“右边挡板”:R键为“上移”,C键为“下移”。然后,我们将初始化球体和挡板之间的碰撞,如果球体碰到挡板,它会朝向对方玩家,但如果挡板未能接住球,那么球体会碰到边界,并且对方玩家会得分。如果代码正确且无错误,运行代码后Ping Pong游戏的屏幕将弹出,玩家可以进行游戏。球体将首先朝右边玩家发球。
结论
在本教程中,我们通过使用Python的内置库Turtle在屏幕上创建了一个简单的乒乓球游戏的示例。用户可以通过使用Turtle库及其不同的函数来创建不同的移动示意图。