zoukankan      html  css  js  c++  java
  • 小程序:桌面弹球

    小程序:桌面弹球

    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()
    
  • 相关阅读:
    栈和堆的区别【转】
    C++虚函数表解析(转)
    C++编码规范(转)
    全局变量的声明和定义 以及dll中全局变量的导出
    Sizeof与Strlen的区别与联系.
    利用事件对象实现线程同步
    创建互斥对象同步线程
    MFC GDI笔记 转
    ClientToScreen( )和ScreenToClient( )
    Visual C++线程同步技术剖析
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13664874.html
Copyright © 2011-2022 走看看