ROB BOWDEN:你好。 我抢。 想知道如何实现这个游戏? 好吧,让我们打出来 员工的解决方案。 所以,让我们先低着头给init 我们告诉你要的功能 第一个执行。 第一个,我们就来看看 在它的init桨。 好吧,那么请记住,我们想要的 划将完全集中在 在x轴上。 因此,我们需要弄清楚 在那里,应该去。 由于板的宽度 - 这 也凑定义往上顶 - 我们需要减去了桨宽度 和除以2,从而使 该桨叶的中心是在 该中心的董事会。 请记住,在x坐标指 挡板的左上角, 所以这是究竟在何处 我们希望它是。 y坐标无所谓 尽可能多的,因为我们可以将 但无论我们想要的。 因此,我们实例化桨,我们设置 色黑,我们设置填充为True 所以它是一个填充的矩形,而我们 然后将其添加到窗口,并返回 桨。 这就是它的初始化 桨。 这将是类似的 用于初始化记分牌。 因此,我们要初始化的标签, 我们将颜色设置为 浅灰色 - 你可以选择任何你 想 - 我们要的字体设置为 无衬线48 - 也可以选择任何你想要的 - 我们将它添加到窗口。 现在这个发送备份是不是真的 必要的,它只是在一些情况下, 事情发生在标签重叠。 那么当我们使用碰撞检测, 碰撞检测将检测其他 当它检测到标签的事情之前。 但是,这真的不应该影响 我们这个计划。 最后,我们有这个更新记分牌 函数,我们写。 因此,让我们来看看那个。 现在,在这里我们看到的东西的 几乎是相同的东西 我们在label.c看到。 因此,我们有一个标签 - 12个字符的字符缓冲区, 这仅仅是足以应付任何 整数,负的或正的。 然后,我们用sprintf复制 点到该缓冲区。 所以S这包含代表一个字符串 点的数目。 最后,我们设置标签 该字符串。 然后,我们需要居中的标签 在例子中,我们已经从9至10 点,我们已经转移了。 因此,我们计算在x和y坐标 标签这将 得到的宽度和高度 窗外。 虽然,我们也可以只使用 常量宽度和高度哈希 定义往上顶。 我们也得到了宽度和高度 标签和鸿沟 通过2至中心。 然后我们使用设置位置实际 把它放在那个位置。 所以这是它的初始化记分牌。 确定。 因此,init球将是非常相似 给init拨片也是如此。 我们在这里看到,我们使用newgoval 为了实例化一个新球。 在这里,我们使用的是2倍的半径 当球2的宽度,并 半径为次 球的高度。 现在,还为newgoval,x和 y坐标,我们传递是怎么回事 指的左上方 球,这实际上是 外球本身。 因此,为了让球正好 集中在主板,我们需要传递 宽度除以2为中心,并 然后减去了半径推 球的实际中心成 该中心的董事会。 和我们做同样的事情 为y轴,不同的是使用 高度而不是宽度。 使放置的球的中心。 与此实例的球,设置 颜色为黑色,填充球, 后来终于把它添加到 窗口并返回它。 这就是它的初始化 球。 所以,现在让我们来看看初始化 砖是稍微更 复杂,但它是相当 类似的init桨。 现在,我们首先需要弄清楚 每块砖的宽度。 请记住,我们有一个叫做常数 调用它指定了 砖的列数 我们有。 所以,我们要确定宽度 通过取宽度的单个砖的 整板的,减去 从我们的缝隙的大小 - 这是哈希定义了顶部和指 向的像素数即 应该是每块砖之间 - 所以我们就要有一个共 间隔时间调用一个空白像素 单列。 而这也将参照一些空白 像素的左侧和右侧 左栏和右栏中的砖。 所以减去了那些空白像素 留给我们的像素的数目是 砖实际使用。 然后我们把通过调用来获得 每砖的像素的数目。 所以在这里我们定义一个数组,仅仅 指定我们要为每一种颜色 排砖。 如果我们有超过排砖 我们指定的颜色,我们拭目以待 那我们就回送及周围 再次使用红色,然后橙色和 黄色等。 这样,作为p设定规格的提示,我们 要遍历所有的行和 砖块列。 但是,我们遍历所有的列之前,我们 看到这里,我们正在指定 每块砖的y位置 在特定的行。 我们也可以移动到这一点,第二 for循环,但随后我们就只是 一遍又一遍做计算 再次,当我们不需要。 所以地砖的y位置是怎么回事 为余量,这是散列 定义往上顶,只是指 电路板的顶部之间的空间 所有砖块的开始。 而我们将要添加到该行 我们是在时代的高度 个别砖加的差距 这是每块砖之间。 所以这也是一个垂直 每块砖之间的差距。 所以,让我们的y坐标 的砖。 所以在这里我们要计算 x坐标的砖。 现在,我们有差距,因为除以2, 记得以前,我说,在 电路板的左侧,我们要 留下一点空间。 所以间隙除以2是该空间。 然后我们添加到该列 我们是在时间宽度加上 间隙,即宽度的空间量 单个砖块占用和 然后间隙空间 每块砖之间。 以便计算x坐标 的砖。 现在我们只需要实例化 砖给出x和y坐标 使用我们计算每个宽 砖和断裂高度是 哈希定义往上顶。 我们设定砖的颜色。 我们正在使用我们的颜色阵列和注意事项 我们传递的是该行中 上模数的颜色这是会令 我们转回到身边的红色,如果我们 比颜色更行。 最后,我们将填写砖 颜色并将其添加到该窗口。 就是这样。 所以,这是它为我们所有的 初始化方法。 现在我们需要来看看,虽然 循环,你必须填写。 所以在这里我们看到,这是我们的,而 循环将会继续下去,直到 比赛结束了,这不是手段 我们用尽生命​​或 我们运行了砖。 我们有那么第一件事 是一个等待点击。 因此本场比赛等着我们来实际 点击球开始移动之前。 然后我们要去 递减的生活。 因此,如果我们有三个生命,现在我们 下降到两个人的生命,我们用我们的 第三次生命。 我们要围绕球。 所以,现在,这是不是真的要帮助 我们的第一个生命,我们玩 由于球是已经去 已经从中心时,我们 实例化它。 但是,我们看到,当我们最终失去了 生活和环回身边,那么我们 会希望从recenter球 电路板的底部回 的中心。 所以,现在我们在这里需要生成 球的X速度。 并且,按照该规范,我们以D兰特 48,以产生一些随机数 以指定的速度。 我们增加一到,既然我们只是 要在1的范围内的速度 到的2代替零到1。 最后,我们以D兰特48再次 为了确定球是否 将要移动到左边 或有权启动。 因此d兰特48返回一个随机数 零和1之间,所以通过询问 如果这是小于0.5,我们有一个50 50 切换的速度机会 球是负面的。 最后,我们设置的垂直速度 球到只是某个常数。 我们选择三种。 现在我们有另一个循环。 所以这个内循环是 是否要继续。 注意这里,而砖 大于零, - 因此,如果我们运行了砖,我们已经 赢得了比赛,我们可以 打破这个循环 - 和所有获取Y滚珠比高度不 减去2倍的半径。 那么,这是认识到的是,如果在 球恰好晃过桨,在 这种情况下,你已经失去了生命。 寻找这里面的for循环,我们有 在检查一个鼠标事件。 因此,如果有一个鼠标事件,该 意味着我们要检查, 见,如果鼠标被移动,并且如果 鼠标被移动了,我们希望有 桨跟上鼠标。 因此,要做到这一点,我们计算新 桨,这是怎么回事的位置 抢鼠标的位置 - 它采用抓起位置 倘若我们通过 - 然后我们要减去了 桨叶的宽度除以2,所以 桨住宿集中在鼠标 代替桨的左侧 住居中。 所以,现在我们也希望确保我们 不走在左边或右边 电路板的一面。 所以在这里我们只是检查,如果 桨将是关闭的左侧 董事会,只是坚持 它的左侧。 在这里,我们正在检查,如果桨 将在右侧的 板,只需把它贴 向右侧。 最后,我们其实设置 挡板的位置。 现在,如果没有一个鼠标移动, 这意味着我们要 要移动球。 因此,我们已经有了在x 和球y的速度 所以我们移动它。 但现在我们要检测 一对夫妇的事情。 所以在这里我们要检测,如果我们要么打 的左侧或右侧 板,我们希望把球反弹。 因此,在这种情况下,令x速度 到负x速度。 如果球击中了电路板的顶层, 那么我们也希望球反弹。 但是,现在我们要改变 在y速度。 请注意,我们不具备的条件 球击中的底部 因为该板已经被抓获 在这里在这个while循环。 最后,我们要检测一些 碰撞中,如果球击中 无论是桨或砖,我们要 做一些特殊情况下的东西。 所以,如果有一个碰撞,其中 案例对象将不能为空,那么, 如果对象打桨,我们会 只是想反弹球。 这里,另外,我们设置的位置 球只桨以上。 请注意,我们正在采取的x坐标位置 球,只是重用。 但在这里,我们得到的y位置 桨和移动球 桨以上。 这是一种特殊情况,以使球 不打桨,然后, 之前,它能够移出桨, 另一个循环善有善报和 它认为它仍然在面板上和 所以在y速度被重新设置为 负面然后将球正中下怀 枝弹跳上的桨。 所以,如果我们没有打桨, 那么我们还需要检查 如果我们打砖。 所以这是我们该如何检查 看看我们打砖。 我们需要检查这一点,因为我们可能 其实打标签,而我们 不想删除该标签。 因此,如果我们打一块砖,我们可以删除 从窗口,砖递减 我们对砖的数量,增加我们的 点的数量,现在我们需要 更新这正是记分牌 同样的,因为我们,当我们看到以前看过 初始化记分牌。 但是,现在我们只是更新 记分牌,因为我们已经改变了 点的数目。 它现在应该显示 我们打​​多一个突破。 最后,如​​果我们打砖 我们也想反弹。 所以最后,我们只是暂停,这样的 球是不动的超级快,我们 其实可以打我们的桨。 而这几乎是它。 所以,现在我们将循环回到顶部 这个while循环,并持续到 要么我们失去了生命或 我们运行了砖。 如果我们失去了生命,会发生什么? 然后我们要退出这个while 循环,我们将看到将循环备份 到外while循环的顶部。 在这种情况下,我们要 执行此重新设置。 而这个设置都将有我们拭目以待 一点击,我们的递减数 生命,recenter球,重新计算 的x和y的速度,并 然后继续游戏。 因此,将一直持续,直到 砖结束是小于 或等于零 - 在这种情况下,我们赢得了比赛 - 或生命小于零,其中 情况下,我们已经输掉了比赛。 因此,一旦是那样的话,我们打出来 while循环中,我们到达这里 我们要去的地方等待点击 退出游戏之前,这样的 游戏不只是立即 关闭我们。 最后,我们将关闭 窗口,就是这样。 我的名字是罗布,这是突围。