98 lines
2.2 KiB
Python
98 lines
2.2 KiB
Python
import pgzrun
|
|
|
|
music.play('bgm')
|
|
# 窗口参数
|
|
WIDTH = 1920
|
|
HEIGHT = 1080
|
|
TITLE = "Ping_Pang"
|
|
|
|
# 左右球拍
|
|
paddle1 = Actor("1")
|
|
paddle1.x = 80
|
|
paddle1.y = HEIGHT / 2
|
|
paddle_speed = 8
|
|
|
|
paddle2 = Actor("2")
|
|
paddle2.x = WIDTH - 80
|
|
paddle2.y = HEIGHT / 2
|
|
|
|
# 乒乓球
|
|
ball = Actor("ball")
|
|
ball.pos = (WIDTH//2, HEIGHT//2)
|
|
ball_speed_x = 7
|
|
ball_speed_y = 7
|
|
|
|
# 游戏状态: playing / gameover
|
|
game_state = "playing"
|
|
lose_text = ""
|
|
|
|
# 球拍上下限位
|
|
half_h = paddle1.height / 2
|
|
top = half_h
|
|
bottom = HEIGHT - half_h
|
|
|
|
bg = Actor("bg")
|
|
|
|
def draw():
|
|
screen.clear()
|
|
bg.draw()
|
|
paddle1.draw()
|
|
paddle2.draw()
|
|
ball.draw()
|
|
|
|
# 游戏结束提示
|
|
if game_state == "gameover":
|
|
screen.draw.text(lose_text, center=(WIDTH//2, HEIGHT//2), fontsize=80, color="red")
|
|
screen.draw.text("click space to restar", center=(WIDTH//2, HEIGHT//2+80), fontsize=40, color="white")
|
|
|
|
def update():
|
|
global ball_speed_x, ball_speed_y, game_state, lose_text
|
|
if game_state != "playing":
|
|
return
|
|
|
|
# 左拍 W S
|
|
if keyboard.w and paddle1.y>top:
|
|
paddle1.y -= paddle_speed
|
|
if keyboard.s and paddle1.y<bottom:
|
|
paddle1.y += paddle_speed
|
|
# 右拍 ↑ ↓
|
|
if keyboard.up and paddle2.y>top:
|
|
paddle2.y -= paddle_speed
|
|
if keyboard.down and paddle2.y<bottom:
|
|
paddle2.y += paddle_speed
|
|
|
|
# 小球移动
|
|
ball.x += ball_speed_x
|
|
ball.y += ball_speed_y
|
|
|
|
# 上下墙壁反弹
|
|
if ball.top <= 0 or ball.bottom >= HEIGHT:
|
|
ball_speed_y *= -1
|
|
sounds.bump.play()
|
|
|
|
# 球拍碰撞反弹
|
|
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
|
|
ball_speed_x *= -1
|
|
sounds.bump.play()
|
|
|
|
# 出左右边界直接失败
|
|
if ball.left <= 0:
|
|
game_state = "gameover"
|
|
lose_text = "Himeko win!"
|
|
sounds.zhanbai.play()
|
|
if ball.right >= WIDTH:
|
|
game_state = "gameover"
|
|
lose_text = "Theresa Apocalypse win!"
|
|
sounds.zhanbai.play()
|
|
|
|
# 空格重新开局
|
|
def on_key_down(key):
|
|
global game_state, ball_speed_x, ball_speed_y
|
|
if key == keys.SPACE and game_state == "gameover":
|
|
game_state = "playing"
|
|
ball.pos = (WIDTH//2, HEIGHT//2)
|
|
ball_speed_x = 7
|
|
ball_speed_y = 7
|
|
|
|
pgzrun.go()
|