零、序章
这是一个使用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(