千家信息网

python pygame怎么实现打砖块游戏

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"python pygame怎么实现打砖块游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 互联网科技有限公司经营范围 鸠鸠互联网科技 新华互联网科技学院 没上市的科技互联网公司 碳银互联网科技 亿账通互联网科技 睿民互联网科技 上海卓越科技 互联网 科技伦理 互联网公司 团飞科技与伯堂互联网服务平台 宁夏科技产业互联网案例 亳州好赞互联网科技有限公司 互联网金融科技公司的优势 四川互联网展示科技馆设计 陕西云淼互联网科技公司 上海万顺科技互联网有限公司招聘 数字互联网科技有限公司 陕西彩京云互联网科技有限公司 互联网科技快速发展优美句子 互联网 科技节活动 微视频大赛 科技赋能下的互联网金融 深圳艾佳互联网科技 蓝色互联网科技 云创客互联网科技公司 互联网科技实习生岗位 皮皮虾互联网科技有限公司 从那以后互联网科技有限公司 互联网科技手抄报图片 易租星互联网科技有限公司 互联网对科技影响
0