如何为我的网球比赛创建记分板?

时间:2019-07-02 01:42:16

标签: python python-3.x pygame

我正在使用@notifier = INotify::Notifier.new @notifier.watch(DownloadHelpers::PATH.to_s, :create) do |file| puts "Check: #{file.name}" if file.name.eql?(File.basename(@filename.to_s)) @pdf = PdfReader.new(@filename) # Check PDF expect(@pdf.page_count).to eq(1) expect(@pdf.pages[1]).to have_text("CONTRACTORS") @notifier.stop # Stops the infinite loop watch end end visit "/#/contractors_report" within "#heading" do expect(page).to have_text("Contractors") end click_on("pdf-btn") @notifier.run # Make sure we finish our thread 和Python(很明显)创建一个网球游戏。我正在尝试实施一个计分板,以使当球停下时,假设其他玩家无法达到该分数,分数就会上升。

我尝试使用Pygame语句检查球的速度是否已停止,但这几乎可以创建一个运行时钟。当球停在其起始位置时,我也不需要提高得分(尚未添加发球技巧)。

if

我希望球停下来后分数会更新。稍后实施服务机制时,我可能会担心重置球。

1 个答案:

答案 0 :(得分:1)

由于网球的位置属性是浮点值,所以永远不会精确到0.0,但是获得的值非常接近0.0。
您必须执行Epsilon Comparison

通过检查绝对值(abs())是否小于某个阈值(ε),来测试tennisball.speedxtennisball.speedy是否接近0.0:

abs(tennisball.speedx) < espi and abs(tennisball.speedy) < espi:

在您的代码中更改术语tennisball.speedx == 0 and tennisball.speedy == 0

espi = 0.1
if abs(tennisball.speedx) < espi  and abs(tennisball.speedy) < espi:
    score = score + 1

请注意,您必须根据需要“选择” epsi的值。


  

[...],但这几乎创建了一个运行时钟。

添加状态allow_score,该状态指示是否允许得分并通过False对其进行初始化:

allow_score = False

当球开始移动时,必须立即发出状态信号(allow_score = True)。从现在开始就可以得分。
当球停下来并allow_score == True时,就可以得分,但是只能得分一次,因此必须重置状态(allow_score = False)。
这导致得分不会连续增加,因为要再次得分,球必须先移动:

while carryOn:

    # [...]

    moving = abs(tennisball.speedx) > espi or abs(tennisball.speedy) > espi 
    if moving:
        allow_score = True 
    elif allow_score:
        allow_score = False
        score = score + 1

请注意,由于allow_score已初始化False,因此分数在开始时不会增加。