This commit is contained in:
Frank
2026-06-17 15:32:42 +08:00
parent 30d1934359
commit ed26cee5c5
2 changed files with 42 additions and 10 deletions

52
main.py
View File

@@ -1,10 +1,18 @@
import pgzrun
import random
#分数
scorep1 = 0
scorep2 = 0
# 防重复加分标记
hit_paddle1 = False
hit_paddle2 = False
#随机数生成
random_intX = random.randint(235, 1685)
random_intY = random.randint(235, 845)
music.play('bgm')
# 窗口参数
WIDTH = 1920
@@ -45,14 +53,18 @@ bottom = HEIGHT - half_h
bg = Actor("bg")
def draw():
global scorep1, scorep2
screen.clear()
bg.draw()
paddle1.draw()
paddle2.draw()
ball.draw()
tbox.draw()
#分数
screen.draw.text('Score_p1: ' + str(scorep1), (15,10), color=(255,255,255), fontsize=30)
screen.draw.text('Score_p2: ' + str(scorep2), (1750,10), color=(255,255,255), fontsize=30)
# 游戏结束提示
if game_state == "gameover":
screen.draw.text(lose_text, center=(WIDTH//2, HEIGHT//2), fontsize=80, color="red")
@@ -60,6 +72,13 @@ def draw():
def update():
global ball_speed_x, ball_speed_y, game_state, lose_text
global scorep1, scorep2, hit_paddle1, hit_paddle2
global random_intX, random_intY
# 每一帧重置碰撞标记,保证一次碰撞只加一次分
hit_paddle1 = False
hit_paddle2 = False
if game_state != "playing":
return
@@ -83,13 +102,23 @@ def update():
ball_speed_y *= -1
sounds.bump.play()
# 球拍碰撞反弹
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
# 球拍接住加分
if ball.colliderect(paddle1) and not hit_paddle1:
ball_speed_x *= -1
sounds.bump.play()
scorep1 += 1
hit_paddle1 = True
# 右球拍接住加分
if ball.colliderect(paddle2) and not hit_paddle2:
ball_speed_x *= -1
sounds.bump.play()
scorep2 += 1
hit_paddle2 = True
#方块实现
if ball.colliderect(tbox):
sounds.bump.play()
sounds.box_co.play()
# 判断撞方块左侧/右侧翻转X速度
if ball.centerx < tbox.x:
ball_speed_x = -abs(ball_speed_x) - 1
@@ -100,30 +129,33 @@ def update():
ball_speed_y = -abs(ball_speed_y)
else:
ball_speed_y = abs(ball_speed_y)
# 重新生成方块坐标(现在能修改全局变量)
# 重新生成方块坐标
random_intX = random.randint(235, 1685)
random_intY = random.randint(235, 845)
tbox.x = random_intX
tbox.y = random_intY
# 出左右边界直接失败
# 出左右边界游戏结束,这里不再加分
if ball.left <= 0:
game_state = "gameover"
lose_text = "player 1 win!"
lose_text = "player 2 win!"
sounds.zhanbai.play()
if ball.right >= WIDTH:
game_state = "gameover"
lose_text = "player 2 win!"
lose_text = "player 1 win!"
sounds.zhanbai.play()
# 空格重新开局
def on_key_down(key):
global game_state, ball_speed_x, ball_speed_y
global game_state, ball_speed_x, ball_speed_y, scorep1, scorep2
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
# 重启清空分数,不需要就注释掉下面两行
scorep1 = 0
scorep2 = 0
pgzrun.go()

BIN
sounds/box_co.wav Normal file

Binary file not shown.