小程序:桌面弹球

小程序:桌面弹球

print("************************************欢迎进入 桌面弹球 ***************************************************")
cla = input("请选择难度等级:1:小菜一碟  2:驾轻就熟  3:略感吃力  4:手忙脚乱  5:头晕目眩  6:目瞪口呆:")
dic = {"1":4,"2":7,"3":12,"4":20,"5":50,"6":100}
import random
num1 = random.randint(200,500)
num2 = random.randint(200,500)
import pygame
pygame.init()
window = pygame.display.set_mode((1000,600)) #创建一个窗口

pygame.display.set_caption('小杨的Freya——桌面弹球')
clock = pygame.time.Clock()#创建一个时钟
ball = pygame.Rect(num1,num2,45,45) #球的参数,以及对球的位置进行初始化
ball1 = pygame.Rect(num1,num2,45,45)
player_1 = pygame.Rect(0,230,20,200) #定义玩家1
player_2 = pygame.Rect(980,230,20,200) #定义玩家2

player_speed = 7
p1_w = 0
p1_s = 0
p2_w = 0
p2_s = 0
p1_score = 0
p2_score = 0
ball_speed_y = dic.get(cla)
ball_speed_x = dic.get(cla)
#球2
ball1_speed_y = 4
ball1_speed_x = 4
import os
now_path = os.path.abspath(__file__) #获得当前文件所在路径,为文件的传输做准备
current_path = os.path.dirname(now_path)

font = pygame.font.SysFont(None,40) #设置窗体字体样式
def text_object(text,color):
    '''
    在画面中创建一个边框
    :return: pass
    '''
    textsurface = font.render(text,True,color)
    return textsurface,textsurface.get_rect()
def print_message(msg,color,place):
    '''
    设置边框的信息
    :return: pass
    '''
    tsurf,tsurf_rect = text_object(msg,color)
    tsurf_rect.center = place
    window.blit(tsurf,tsurf_rect)

def pause():
    '''
    暂停功能
    :return:pass
    '''
    flag = True
    while flag:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_y:
                    flag = False
                elif event.key == pygame.K_n:
                    pygame.exit()
                    exit()
            print_message("You are the loser!!!  Coutinue?(N/Y)",(225,225,225),(500,300))
            pygame.display.update()
            clock.tick(50)

#背景音乐
v = "Gak Ada Waktu Beib - Ghea Youbi.mp3"
result = os.path.join(current_path,v) #对文件的路径进行拼接,防止因为文件的移动导致位置偏移
# file=r'C:\Users\lenovo\Desktop\MusicDownload\Gak Ada Waktu Beib - Ghea Youbi.mp3'       # 音乐的路径
pygame.mixer.init()                   # 初始化
track = pygame.mixer.music.load(result)    # 加载音乐文件
pygame.mixer.music.play()           # 开始播放音乐流\
volume = pygame.mixer.music.set_volume(0.2)#音量
v1 = "bejing.jpg"
result1 = os.path.join(current_path,v1)
# background = pygame.image.load(r"C:\Users\lenovo\Desktop\MusicDownload\bejing.jpg")  # 创建背景图片
background = pygame.image.load(result1)
#主循环
while True:
    clock.tick(90) #刷新频率
    for event in pygame.event.get():
        print(event)
        if event.type == pygame.QUIT:
            print("退出游戏")
            pygame.quit()
            exit()

        elif event.type == pygame.VIDEORESIZE: #背景图片与窗体相适应
            size = width, height = event.size[0], event.size[1]  # 获取背景图新的size
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                p1_s = player_speed
            if event.key == pygame.K_w:
                p1_w = -player_speed
            # if event.key == pygame.K_y:
            #     pause()
            if event.key == pygame.K_DOWN:
                p2_s = player_speed
            if event.key == pygame.K_UP:
                p2_w = -player_speed
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_s:
                p1_s = 0
            if event.key ==pygame.K_DOWN:
                p2_s = 0
            if event.key == pygame.K_w:
                p1_w = 0
            if event.key ==pygame.K_UP:
                p2_w = 0


    #移动球
    ball.x += ball_speed_x
    ball.y += ball_speed_y
    ball1.x += ball1_speed_x
    ball1.y += ball1_speed_y

    if ball.bottom >= 600 or ball.top <= 0:
        ball_speed_y = ball_speed_y * -1.01
    if ball.right >= 1000 or ball.left <= 0:
        pause()
        ball = pygame.Rect(num1, num2, 45, 45)

    #球二
    # if ball1.bottom >= 600 or ball.top <= 0:
    #     ball1_speed_y = ball1_speed_y * -1.01
    # if ball1.right >= 1000 or ball1.left <= 0:
    #     pause()
    #     ball1= pygame.Rect(num1, num2, 45, 45)

    #碰撞:
    v3 = "11479.wav"
    result3 = os.path.join(current_path, v3)
    # soundwav = pygame.mixer.Sound(r"C:\Users\lenovo\Desktop\MusicDownload\11479.wav") #碰撞音效
    soundwav = pygame.mixer.Sound(result3)
    if ball.colliderect(player_1):
        ball_speed_x *= -1.01
        p1_score += 1
        soundwav.play()
    if ball.colliderect(player_2):
        ball_speed_x *= -1.01
        p2_score += 1
        soundwav.play()
        #球2
    if ball1.colliderect(player_1):
        ball1_speed_x *= -1
        p1_score += 1
        soundwav.play()
    if ball1.colliderect(player_2):
        ball1_speed_x *= -1
        p2_score += 1
        soundwav.play()

    # 移动玩家范围
    if player_1.top >= 0:
        player_1.y += p1_w
    if player_1.bottom <= 600:
        player_1.y += p1_s
    if player_2.top >= 0:
        player_2.y += p2_w
    if player_2.bottom <= 600:
        player_2.y += p2_s


    #呈现背景图片
    window.blit(pygame.transform.scale(background, size), (0, 0))  # 背景图片对齐的坐标
    # pygame.display.flip()

    #呈像
    pygame.draw.ellipse(window,(225,22,0),ball)
    pygame.draw.ellipse(window, (0, 22, 225), ball1)
    pygame.draw.rect(window,(160,32,240),player_1)
    pygame.draw.rect(window, (0,255,255),player_2)

    #打印分数
    print_message(f'P1 : {p1_score} - P2 : {p2_score}',(225,225,225),(500,30))
    #刷新画面
    pygame.display.update()
原文地址:https://www.cnblogs.com/yangzilaing/p/13664874.html