python pygame怎么实现打砖块游戏
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容介绍了"python pygame怎么实现打砖块游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年01月17日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安全错误
数据库的锁怎样保障安全
森态园林手机软件开发商
数据库的所有表查询重复数据
外派到大连英特尔做软件开发
学习网络安全概念
2009英国网络安全战略
济南软件开发平台
linux服务器清空
数据库用语句查询
d7it网络技术论坛
国家网络安全法条款
把软件装在服务器上
通州网络安全产业园选址
重庆美音网络技术怎么样
dns服务器差
移动网络技术就业方向
网络技术实用与基础2379
网络安全售前面试常问问题
北京调度服务器报价
网上赌博软件开发
家里台式机可以作为服务器吗
2网络安全黑板报模板
河北安卓软件开发价位
京太教育软件开发
地下城堡有几个服务器
linux软件开发 用啥
学习网络安全评估
北京常规软件开发收费
2个数据库表怎么进行对比
数据库管理的难点
14部门联合整治网络安全问题