-
打砖游戏,详解每一行代码,历经三个小时解析,初学可看(4)
self.frequency = 0
def countscore(self): #定义计算分数的函数
my_score = self.score_font.render(str(self.score), False, (255, 255, 255))
self.game_window.blit(my_score, (555, 15))# 绘制玩家分数,分数的位置放在横坐标为555,距离窗顶位置15
class GameOver(object):
'''创建游戏结束类'''
def __init__(self, *args, **kw):
# 设置Game Over字体 楷体,字体大小80
self.over_font = pygame.font.SysFont('arial', 80)
# 定义GameOver标识
self.over_sign = 0
class Win(object):
'''创建游戏胜利类'''
def __init__(self, *args, **kw):
# 设置You Win字体 楷体,字体大小80
self.win_font = pygame.font.SysFont('arial', 80)
# 定义Win标识
self.win_sign = 0
class Collision(object):
'''碰撞检测类'''
# 球与窗口边框的碰撞检测
def ball_window(self):
if self.ball_x <= self.radius or self.ball_x >= (self.window_length - self.radius):#如果球横坐标位置小于球半径或者大于窗口宽度减去球半径,意思就是超出边界了
self.move_x = -self.move_x#横坐标减小一个单位,意思就是反弹了
if self.ball_y <= self.radius:#球纵坐标小于半径,意思就是只要没落地
self.move_y = -self.move_y#继续向下移动
# 球与球拍的碰撞检测
def ball_rect(self):
# 定义碰撞标识为0
self.collision_sign_x = 0
self.collision_sign_y = 0
#分三种情况,一种是直接碰到砖块反弹到球拍;一种是碰撞到砖块,又碰撞到墙;还有一种是碰到两个砖块,又碰到墙。这里用if-elif-else讨论。
if self.ball_x < (self.mouse_x - self.rect_length // 2): #如果球中心位置小于鼠标坐标减去球拍一半的长度,表示没有超出边界。即没有撞墙,撞一个砖块。
self.closestpoint_x = self.mouse_x - self.rect_length // 2#横坐标最近点位置为鼠标位置减去球拍一半长度
self.collision_sign_x = 1#这种情况,碰撞标识用1标识
elif self.ball_x > (self.mouse_x + self.rect_length // 2):#超出边界范围,撞墙。碰到墙和砖块各一次。
self.closestpoint_x = self.mouse_x + self.rect_length // 2#反弹了,横坐标最近位置为鼠标坐标加上球拍一半的长度。
self.collision_sign_x = 2#这种情况,碰撞标识用2标识
else: #上面两种情况都不满足的话执行下面的语句
self.closestpoint_x = self.ball_x#横坐标最近点位置就是球位置。
self.collision_sign_x = 3#这种情况,碰撞标识用3标识
if self.ball_y < (self.window_wide - self.rect_wide): #如果球的纵坐标小于窗口高度减去球心的高度。意思如果就是没有落地的话。
self.closestpoint_y = (self.window_wide - self.rect_wide)#纵坐标最近距离为窗口高度减去球拍的高度
self.collision_sign_y = 1#这种情况,碰撞标识用1标识
elif self.ball_y > self.window_wide: #如果球的纵向长度大于了窗口高度,意思就是落地了
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程