【Python项目】乒乓球小游戏

零、序章

这是一个使用Python写的打乒乓游戏。

可以练习一些面向对象的知识。

实现的功能有:

  • 球的发球、碰撞检测及反弹、出界检测
  • 玩家球拍的上下移动、电脑球拍的自动移动
  • 区分玩家、电脑的计分板及刷新

可以改进的地方有:

  • 暂停功能
  • 碰撞检测可以优化,现在是给球加个个碰撞后的加速(闪现)以免卡bug
  • 球和球拍的碰撞可以,现在只能接住球并反弹出去,而不能将球拍的移动或碰撞位置与球的反弹联动起来实现击球效果
  • 电脑球拍的逻辑优化,现在移动过于鬼畜

一、游戏主程序

import time
from turtle import Turtle, Screen
from ball import Ball
from bat import Bat
from scoreboard import ScoreBoard

# 设置难度
MODE = 'normal'

# 实例化屏幕对象、设置屏幕大小、背景色、标题、关闭实时刷新
screen = Screen()
screen.setup(width=1200, height=600)
screen.bgcolor('black')
screen.title('Ping-Pong')
screen.tracer(False)


def cal_limits(screen):
    """
    根据屏幕计算边界的函数
    :param screen: 屏幕
    :return: 上下左右四个边界
    """
    u_limit = screen.window_height() // 2 - 30
    d_limit = -screen.window_height() // 2 + 30
    l_limit = -screen.window_width() // 2 + 30
    r_limit = screen.window_width() // 2 - 30
    return u_limit, d_limit, l_limit, r_limit


def draw_mid_line(limits):
    """
    这是一个绘制中线的函数
    :param limits: 边界
    :return: 无
    """
    line = Turtle()
    line.ht()
    line.pensize(10)
    line.pencolor('white')
    line.penup()
    line.goto(0, limits[1])
    line.setheading(90)
    while line.pos()[1] <= limits[0]:
        line.pendown()
        line.forward(10)
        line.penup()
        line.forward(30)


def game_init():
    """
    这是一个重开一局的函数
    :return: 无
    """
    # 调用发球函数
    ball.serve()
    # 初始化球拍位置
    player_bat.b_goto(limits[2], 0)
    computer_bat.b_goto(limits[3], 0)
    # 停顿1秒
    time.sleep(1)


def quit_game(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sprite.Nym

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

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

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

打赏作者

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

抵扣说明:

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

余额充值