用python编写乒乓球小游戏--Turtle功能的应用

用python编写乒乓球小游戏–Turtle功能的应用

python有很多功能强大的代码库,Turtle是一款用于游戏开发的代码库。通过编写乒乓球小游戏可以了解这个库的基本的代码的使用

先创建游戏的背景,页面的话感觉跟matlab的交互页面的编辑还有easygui差不多。import os 与游戏本身无关,是为了后面可能添加音效而引用的

#创建游戏背景
import os
import turtle as t
game = t.Screen()
game.title("双人乒乓球对战")
game.bgcolor("black")
#os.system("pause")input()  可以使程序暂停,不过此处使用可能导致程序直接终止,所以使用game.mianloop()
game.mainloop()
game.setup(800,600)

先创建一个球拍
这里必须提一下Turtle创建可视的对象的实质是创建一支画笔,有笔本身和笔所画出的轨迹。

#创建球拍
pai = t.Turtle()   #对象其实是画笔
pai.ht()  #隐藏球拍
pai.up()  #隐藏轨迹
pai.speed(0) #运动速度为瞬移
pai.color("blue")
pai.shape('square')
pai.shapesize(5,1)      #对上面的正方形进行拉伸
#根据800*400建立直角坐标系,进行移动
pai.goto(-350,0)    #现在会有一条运动轨迹,所以第二条将其隐藏
pai.st()    #到位后再显示出来

第二个球拍同理,只需要换个颜色和坐标。坐标(0,0)为显示框的正中央,再背景创建时。我规定坐标范围是(800,600),相当于800*600的矩形框,大家也可以自己调整,但是后面的代码都会发生变化

pai2 = t.Turtle()
pai2.ht()
pai2.up()
pai2.speed(0)
pai2.color("white")
pai2.shape('square')
pai2.shapesize(4,1)
pai2.goto(350,0)
pai2.st()

然后添加乒乓球(在这里我想到了植物大战僵尸的魔改版,其实也可以不抬起画笔(doge))

#添加乒乓球
ball = t.Turtle()
ball.up()   #不需要隐藏但是不能画一条线
ball.speed(0)
ball.color("yellow")
ball.shape('circle')   #d=20
ball.goto(0,0)
ball.st()
ball.vx = 2   #直接定义X轴和Y轴的速度
ball.vy = 2
player1score = 0
player2score = 0

现在考虑打印分数,最后一行的代码有许多函数的内置参数,感兴趣的朋友可以参考我另一则博客Turtle内置部分函数的用法

pen = t.Turtle()   #创建一个画笔来打印分数
pen.ht() #隐藏最初的箭头,不影响书写(后面打印的字)
pen.up() #只要选定位置与初始化位置(00)不相符就会有轨迹
pen.color('white')
pen.goto(-10,260)
X = 'play1: {}  play2: {}'.format(player1score,player2score)
pen.write(X,align='center',font=('Arial',20,'bold'))

最后让球拍和乒乓球动起来吧
这里的键位设定不知道是不是我电脑的原因(惠普的按键总是奇奇怪怪),只能开英文大写才行

#移动球拍
#自定义方向键
#先定义方法
def pai_up():
    y = pai.ycor()
    y = y + 12
    pai.sety(y)
def pai_down():
    y = pai.ycor()
    y = y - 12
    pai.sety(y)
def pai2_up():
    y = pai2.ycor()
    y = y + 12
    pai2.sety(y)
def pai2_down():
    y = pai2.ycor()
    y = y - 12
    pai2.sety(y)
game.listen()   #听从玩家指令
game.onkey(pai_up,'W')   #开始自定义键位,为了避免输入法的问题直接开大写
game.onkey(pai_down,'S')
game.onkey(pai2_up,'I')
game.onkey(pai2_down,'K')



#用循环使乒乓球动起来
while True:
    ball.setx(ball.xcor()+ball.vx)
    ball.sety(ball.ycor()+ball.vy)
    if (ball.ycor() > 290) or (ball.ycor() < -290):   #防止出界(只针对上下)--反弹--动量守恒
        ball.vy *= -1
    if (ball.xcor() > 390) or (ball.xcor() < -390):
        ball.vx *= -1
    if (ball.ycor() < pai2.ycor() + 50) and (ball.ycor() > pai2.ycor() - 50) and (ball.xcor() > 330):
        ball.vx *= -1
    if (ball.ycor() < pai.ycor() + 50) and (ball.ycor() > pai.ycor() -50) and (ball.xcor() < -330 ):
        ball.vx *= -1

    #判断出界
    if ball.xcor() > 380 :
        ball.goto(0,0)
        player1score += 1
        pen.clear()
        X = 'play1: {}  play2: {}'.format(player1score, player2score)
        pen.write(X, align='center', font=('Arial', 20, 'bold'))

    if ball.xcor() < -380:
        player2score += 1
        pen.clear()    #作为幕布不会刷新,则需要认为地刷新(清除上一次的显示)
        X = 'play1: {}  play2: {}'.format(player1score, player2score)
        pen.write(X, align='center', font=('Arial', 20, 'bold'))  #这个方法被多次调用,为了简化也可以定义一个方法
  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
乒乓球是一种常见的运动项目,许多人都在课余时间或休闲时玩过乒乓球。而在Python中,有一个叫做turtle的库,它可以帮助我们模拟绘制各种图形。那么如何用Pythonturtle库来绘制乒乓球呢? 首先,我们需要导入turtle库,并创建一个画布。然后,我们可以设置乒乓球的初始位置、半径和运动速度。接着,我们可以使用turtle库的penup()和pendown()函数来控制乒乓球的绘制和不绘制。通过循环,我们可以不断地改变乒乓球的位置,并使其在画布上移动,从而模拟乒乓球的运动轨迹。 具体来说,我们可以使用turtle库的goto()函数将乒乓球移动到新的位置。我们可以利用乒乓球与画布边界的碰撞来改变乒乓球的方向。比如,当乒乓球碰到画布的上边界时,我们可以将乒乓球的运动方向向下改变;当乒乓球碰到画布的下边界时,我们可以将乒乓球的运动方向向上改变。同样的道理,当乒乓球碰到画布的左右边界时,我们可以将乒乓球的运动方向向相应的反方向改变。 另外,我们可以利用turtle库的begin_fill()和end_fill()函数来填充乒乓球的颜色。为了模拟乒乓球的弹跳效果,我们可以使用turtle库的speed()函数来调整乒乓球的绘制速度。 最后,我们可以使用turtle库的bye()函数来关闭画布,结束乒乓球的绘制。 通过上述步骤,我们可以使用turtle库在Python中绘制乒乓球,并模拟乒乓球的运动轨迹,让我们能够更好地理解和学习乒乓球的运动规律。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

It is a deal️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值