python实现打砖块游戏
本文实例为大家分享了Python实现打砖块游戏的具体代码,供大家参考,具体内容如下
#导入模块
importpygame
frompygame.localsimport*
importsys,random,time,math
classGameWindow(object):
'''创建游戏窗口类'''
def__init__(self,*args,**kw):
self.window_length=600
self.window_wide=500
#绘制游戏窗口,设置窗口尺寸
self.game_window=pygame.display.set_mode((self.window_length,self.window_wide))
#设置游戏窗口标题
pygame.display.set_caption("CatchBallGame")
#定义游戏窗口背景颜色参数
self.window_color=(135,206,250)
defbackgroud(self):
#绘制游戏窗口背景颜色
self.game_window.fill(self.window_color)
classBall(object):
'''创建球类'''
def__init__(self,*args,**kw):
#设置球的半径、颜色、移动速度参数
self.ball_color=(255,215,0)
self.move_x=1
self.move_y=1
self.radius=10
defballready(self):
#设置球的初始位置、
self.ball_x=self.mouse_x
self.ball_y=self.window_wide-self.rect_wide-self.radius
#绘制球,设置反弹触发条件
pygame.draw.circle(self.game_window,self.ball_color,(self.ball_x,self.ball_y),self.radius)
defballmove(self):
#绘制球,设置反弹触发条件
pygame.draw.circle(self.game_window,self.ball_color,(self.ball_x,self.ball_y),self.radius)
self.ball_x+=self.move_x
self.ball_y-=self.move_y
#调用碰撞检测函数
self.ball_window()
self.ball_rect()
#每接5次球球速增加一倍
ifself.distance520:
self.gameover=self.over_font.render("GameOver",False,(0,0,0))
self.game_window.blit(self.gameover,(100,130))
self.over_sign=1
classRect(object):
'''创建球拍类'''
def__init__(self,*args,**kw):
#设置球拍颜色参数
self.rect_color=(255,0,0)
self.rect_length=100
self.rect_wide=10
defrectmove(self):
#获取鼠标位置参数
self.mouse_x,self.mouse_y=pygame.mouse.get_pos()
#绘制球拍,限定横向边界
ifself.mouse_x>=self.window_length-self.rect_length//2:
self.mouse_x=self.window_length-self.rect_length//2
ifself.mouse_x<=self.rect_length//2:
self.mouse_x=self.rect_length//2
pygame.draw.rect(self.game_window,self.rect_color,((self.mouse_x-self.rect_length//2),(self.window_wide-self.rect_wide),self.rect_length,self.rect_wide))
classBrick(object):
def__init__(self,*args,**kw):
#设置砖块颜色参数
self.brick_color=(139,126,102)
self.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]]
self.brick_length=80
self.brick_wide=20
defbrickarrange(self):
foriinrange(5):
forjinrange(6):
self.brick_x=j*(self.brick_length+24)
self.brick_y=i*(self.brick_wide+20)+40
ifself.brick_list[i][j]==1:
#绘制砖块
pygame.draw.rect(self.game_window,self.brick_color,(self.brick_x,self.brick_y,self.brick_length,self.brick_wide))
#调用碰撞检测函数
self.ball_brick()
ifself.distanceb=(self.window_length-self.radius):
self.move_x=-self.move_x
ifself.ball_y<=self.radius:
self.move_y=-self.move_y
#球与球拍的碰撞检测
defball_rect(self):
#定义碰撞标识
self.collision_sign_x=0
self.collision_sign_y=0
ifself.ball_x<(self.mouse_x-self.rect_length//2):
self.closestpoint_x=self.mouse_x-self.rect_length//2
self.collision_sign_x=1
elifself.ball_x>(self.mouse_x+self.rect_length//2):
self.closestpoint_x=self.mouse_x+self.rect_length//2
self.collision_sign_x=2
else:
self.closestpoint_x=self.ball_x
self.collision_sign_x=3
ifself.ball_y<(self.window_wide-self.rect_wide):
self.closestpoint_y=(self.window_wide-self.rect_wide)
self.collision_sign_y=1
elifself.ball_y>self.window_wide:
self.closestpoint_y=self.window_wide
self.collision_sign_y=2
else:
self.closestpoint_y=self.ball_y
self.collision_sign_y=3
#定义球拍到圆心最近点与圆心的距离
self.distance=math.sqrt(math.pow(self.closestpoint_x-self.ball_x,2)+math.pow(self.closestpoint_y-self.ball_y,2))
#球在球拍上左、上中、上右3种情况的碰撞检测
ifself.distance0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_x==1andself.move_x<0:
self.move_y=-self.move_y
ifself.collision_sign_x==2andself.move_x<0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_x==2andself.move_x>0:
self.move_y=-self.move_y
ifself.distanceself.brick_x+self.brick_length:
self.closestpoint_bx=self.brick_x+self.brick_length
self.collision_sign_bx=2
else:
self.closestpoint_bx=self.ball_x
self.collision_sign_bx=3
ifself.ball_yself.brick_y+self.brick_wide:
self.closestpoint_by=self.brick_y+self.brick_wide
self.collision_sign_by=2
else:
self.closestpoint_by=self.ball_y
self.collision_sign_by=3
#定义砖块到圆心最近点与圆心的距离
self.distanceb=math.sqrt(math.pow(self.closestpoint_bx-self.ball_x,2)+math.pow(self.closestpoint_by-self.ball_y,2))
#球在砖块上左、上中、上右3种情况的碰撞检测
ifself.distanceb0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_bx==1andself.move_x<0:
self.move_y=-self.move_y
ifself.collision_sign_bx==2andself.move_x<0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_bx==2andself.move_x>0:
self.move_y=-self.move_y
ifself.distanceb0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_bx==1andself.move_x<0:
self.move_y=-self.move_y
ifself.collision_sign_bx==2andself.move_x<0:
self.move_x=-self.move_x
self.move_y=-self.move_y
ifself.collision_sign_bx==2andself.move_x>0:
self.move_y=-self.move_y
ifself.distanceb
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。