111
This commit is contained in:
52
main.py
52
main.py
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user