千家信息网

python pygame怎么实现打砖块游戏

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"python pygame怎么实现打砖块游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年11月07日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安全错误 数据库的锁怎样保障安全 深圳专业服务器散热器厂商 网络安全学习心得怎么写 mysql数据库怎么重启 云舟载梦服务器哪年开的 西南民族大学网络安全 l2tp服务器地址怎么填写 江苏专业服务器机柜虚拟主机 网络安全风险评估机构名单 网络安全的四个根本没有改变 服务器培训学校 数据库2008查询分析器工具 说一说有哪些网络安全防护小窍门 软件开发企业需要的资质证书 英国食品安全数据库 手机我的世界服务器吧 河南艾因斯互联网科技有限公司 个人软件开发质量推荐 服务器维修公司 命运2邪姬魅影服务器不可用 ota服务器和三星系统有什么用 服务器bmc抓取加速卡 软件开发文档编写需求分析 济南大学代理服务器 南粤交通网络安全技术培训 网络安全调查问卷主题 应用服务器种类 单机手游需不需要服务器 软件开发是商标哪个类别 软件开发项目技术管理规范 数据库技术的最新进展
0