千家信息网

python pygame怎么实现打砖块游戏

发表于:2025-02-20 作者:千家信息网编辑
千家信息网最后更新 2025年02月20日,本篇内容介绍了"python pygame怎么实现打砖块游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年02月20日python pygame怎么实现打砖块游戏

本篇内容介绍了"python pygame怎么实现打砖块游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

游戏环境的界面以及代码如下

import syssys.path.append(r'E:\anaconda\Lib\site-packages')import pygameimport sysimport randomimport timeimport mathfrom tkinter import _flattenpygame.init()pygame.font.init()brick_length = 25brick_wide = 15rect_length = 100rect_wide = 5window_length = 400                                                           window_wide = 250move_x = 8                                                                   move_y = 8radius = 10score=0over_sign=0win_sign=0frequency=0ball_color=(240,240,240)k_counter = 0state = []game_window = pygame.display.set_mode((window_length,window_wide))def rectmove():    mouse_x , _ = pygame.mouse.get_pos()    pygame.draw.rect(game_window,(255,255,255),((mouse_x-rect_length//2),(window_wide-rect_wide),rect_length,rect_wide)) def ballready():                                                                            pygame.draw.circle(game_window,ball_color,(ball_x,ball_y),radius)            #绘制球def ball_window():     global move_x    global move_y   #球与窗口边框的碰撞检测    if ball_x <= radius or ball_x >= (window_length-radius):                move_x = -move_x    if ball_y <= radius:        move_y = -move_ydef ball_rect():       #球与球拍的碰撞检测        collision_sign_x = 0        #定义碰撞标识    collision_sign_y = 0    global k_counter    global move_x    global move_y    global distance    mouse_x , _ = pygame.mouse.get_pos()    if ball_x < (mouse_x-rect_length//2):        closestpoint_x = mouse_x-rect_length//2        collision_sign_x = 1    elif ball_x > (mouse_x+rect_length//2):        closestpoint_x = mouse_x+rect_length//2        collision_sign_x = 2    else:        closestpoint_x = ball_x        collision_sign_x = 3    if ball_y < (window_wide-rect_wide):        closestpoint_y = (window_wide-rect_wide)        collision_sign_y = 1    elif ball_y > window_wide:        closestpoint_y = window_wide        collision_sign_y = 2    else:        closestpoint_y = ball_y        collision_sign_y = 3        #定义球拍到圆心最近点与圆心的距离    distance = math.sqrt(math.pow(closestpoint_x-ball_x,2)+math.pow(closestpoint_y-ball_y,2))        #球在球拍上左、上中、上右3种情况的碰撞检测    if distance < radius and collision_sign_y == 1 and (collision_sign_x == 1 or collision_sign_x == 2):        if collision_sign_x == 1 and move_x > 0:            move_x = - move_x            move_y = - move_y        if collision_sign_x == 1 and move_x < 0:            move_y = - move_y        if collision_sign_x == 2 and move_x < 0:            move_x = - move_x            move_y = - move_y        if collision_sign_x == 2 and move_x > 0:            move_y = - move_y    if distance < radius and collision_sign_y == 1 and collision_sign_x == 3:        move_y = - move_y        if distance < radius and collision_sign_y == 3:     #球在球拍左、右两侧中间的碰撞检测        move_x = - move_x            k_counter = k_counter + 1def ballmove():     global ball_x     global ball_y        global over_sign    global frequency        global brick_list          #绘制球,设置反弹触发条件        pygame.draw.circle(game_window,ball_color,(ball_x,ball_y),radius)            ball_x += move_x    ball_y -= move_y   #调用碰撞检测函数    ball_window()    ball_rect()    if distance < radius:        frequency += 1           #接球次数        if ball_y > 270:       #设置游戏失败条件        over_sign = 1      def record_brick_state():    global brick_state    global brick_list    if ball_y == 203:        brick_state = list(_flatten(brick_list))    #变为一维ball_state = [0,0,0,0,0,0]def record_ball_state():    global ball_x    global ball_y     global ball_state    if ball_y == 203:        ball_state[0] = ball_x*0.01        ball_state[1] = ball_y*0.01    if ball_y == 211:        ball_state[2] = ball_x*0.01        ball_state[3] = ball_y*0.01          if ball_y == 219:        ball_state[4] = ball_x*0.01        ball_state[5] = ball_y*0.01  def calculate_score(brick_list):    brick_num = 0    global score    for i in range(5):        for j in range(12):            brick_num = brick_num + brick_list[i][j]    score = 60 - brick_num#    print(score)    def brickarrange():    global brick_length    global brick_wide    global score        global win_sign    global brick_x    global brick_y    global distanceb    global ball_x    global ball_y      global brick_list_      #绘制砖块    for i in range(5):        for j in range(12):            brick_x = j*(brick_length+5)            brick_y = i*(brick_wide+5)+40            if brick_list[i][j] == 1:                                                                                              pygame.draw.rect(game_window,(255,255,255),(brick_x,brick_y,brick_length,brick_wide))                                                        ball_brick()      #调用碰撞检测函数                                        if distanceb < radius:                     brick_list[i][j] = 0          calculate_score(brick_list)       #设置游戏胜利条件    if score == 60:        win_sign = 1def ball_brick():        global distanceb     global move_x    global move_y         #球与砖块的碰撞检测    collision_sign_bx = 0       #定义碰撞标识    collision_sign_by = 0    if ball_x < brick_x:        closestpoint_bx = brick_x        collision_sign_bx = 1    elif ball_x > brick_x+brick_length:        closestpoint_bx = brick_x+brick_length        collision_sign_bx = 2    else:        closestpoint_bx = ball_x        collision_sign_bx = 3    if ball_y < brick_y:        closestpoint_by = brick_y        collision_sign_by = 1    elif ball_y > brick_y+brick_wide:        closestpoint_by = brick_y+brick_wide        collision_sign_by = 2    else:        closestpoint_by = ball_y        collision_sign_by = 3                                                   #定义砖块到圆心最近点与圆心的距离    distanceb = math.sqrt(math.pow(closestpoint_bx-ball_x,2)+math.pow(closestpoint_by-ball_y,2))                                                                                #球在砖块上左、上中、上右3种情况的碰撞检测    if distanceb < radius and collision_sign_by == 1 and (collision_sign_bx == 1 or collision_sign_bx == 2):        if collision_sign_bx == 1 and move_x > 0:            move_x = - move_x            move_y = - move_y        if collision_sign_bx == 1 and move_x < 0:            move_y = - move_y        if collision_sign_bx == 2 and move_x < 0:            move_x = - move_x            move_y = - move_y        if collision_sign_bx == 2 and move_x > 0:            move_y = - move_y    if distanceb < radius and collision_sign_by == 1 and collision_sign_bx == 3:            move_y = - move_y                                            #球在砖块下左、下中、下右3种情况的碰撞检测    if distanceb < radius and collision_sign_by == 2 and (collision_sign_bx == 1 or collision_sign_bx == 2):        if collision_sign_bx == 1 and move_x > 0:            move_x = - move_x            move_y = - move_y        if collision_sign_bx == 1 and move_x < 0:            move_y = - move_y        if collision_sign_bx == 2 and move_x < 0:            move_x = - move_x            move_y = - move_y        if collision_sign_bx == 2 and move_x > 0:            move_y = - move_y    if distanceb < radius and collision_sign_by == 2 and collision_sign_bx == 3:        move_y = - move_y        if distanceb < radius and collision_sign_by == 3:       #球在砖块左、右两侧中间的碰撞检测        move_x = - move_xwhile True:    brick_list = [[1,1,1,1,1,1,1,1,1,1,1,1],               [1,1,1,1,1,1,1,1,1,1,1,1],               [1,1,1,1,1,1,1,1,1,1,1,1],               [1,1,1,1,1,1,1,1,1,1,1,1],               [1,1,1,1,1,1,1,1,1,1,1,1]]    score=0    win_sign=0    frequency=0    over_sign=0        mouse_x , _= pygame.mouse.get_pos()    ball_x=mouse_x    ball_y = window_wide-rect_wide-radius    while True:        game_window.fill((111,111,111))        pygame.display.flip()        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                exit()        rectmove()          ballmove()        brickarrange()        record_brick_state()        record_ball_state()        if ball_state[1] !=0:            if ball_state[3] !=0:                if ball_state[5] !=0:                    state = brick_state + ball_state                    ball_state =[0,0,0,0,0,0]                    print(state)        if over_sign == 1:            break        if win_sign == 1:            break        pygame.display.update()        time.sleep(0.06)

"python pygame怎么实现打砖块游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

碰撞 检测 砖块 圆心 情况 球拍 条件 内容 函数 更多 标识 知识 实用 学有所成 接下来 代码 困境 实际 文章 案例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技有关的公司 我的世界主播直播的服务器手机版 网络安全法依法给予责任 数据库什么情况下会更新失败 聊天服务器怎么登录 数据库基础教学视频 重庆海云互联网科技有限公司 洛阳西美网络技术服务有限公司 双流区公兴镇农民网络技术学校 楚留香手游服务器排名 基岩版服务器手机管理 网络技术综合实践论文 软件开发性能参考标准 三心网络技术员加班 花园战争2哪个服务器好 在网络安全领域中肉鸡又称为 许昌市的软件开发公司 手机服务器报错500或404 第八届网络安全会 染色软件开发定制 完成家人共享设置连接服务器失败 辽宁互联网科技 世界各国服务器出口 审计局网络安全宣传系列 什么是网络技术咨询口碑推荐 乐亭县网络安全知识 深圳市微客网络技术有限公司 数据库的操作要以内容为依据 网络安全工作发展规划 网络安全的本质和内容是什么
0