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抓取加速卡
软件开发文档编写需求分析
济南大学代理服务器
南粤交通网络安全技术培训
网络安全调查问卷主题
应用服务器种类
单机手游需不需要服务器
软件开发是商标哪个类别
软件开发项目技术管理规范
数据库技术的最新进展