簡體   English   中英

初學者 python 海龜游戲中的分數/點數更新

[英]Score/points update in beginner python turtle game

我是 python 的新手,我的海龜游戲得分有問題。 比分在我第一次接球時更新,但在我以后任何時候接球時都不會更新。 我希望每次收集球時分數增加一個數字,例如 2。

也許有人能夠提供解決方案? 我懷疑問題可能在於:

  • 變量'score的scope
  • 任何/某些 function 的不正確循環
import turtle
import random
import math

screen = turtle.Screen()
screen.title("My game by python code")
screen.bgcolor("black")
screen.setup(width=600, height=600)

# Making the user 'bubble'
bubble = turtle.Turtle()
bubble.color("red")
bubble.shape("circle")
bubble.penup()
speed = 3

# Making the collection balls
collection_ball = turtle.Turtle()
collection_ball.color("red")
collection_ball.penup()
collection_ball.shape("circle")
collection_ball.shapesize(0.5, 0.5, 0.5)
ball_cor1 = random.randint(30, 280)
ball_cor2 = random.randint(30, 280)
collection_ball.setposition(ball_cor1, ball_cor2)
collection_ball.color("yellow")

# Scoring
points = turtle.Turtle()
points.color("yellow")
style = ('Courier', 30, 'italic')
points.penup()
points.goto(-200, 250)
points.write("Points: 0", font=style)
points.hideturtle()

# Turning
def turn_left():
    bubble.left(90)


def turn_right():
    bubble.right(90)


# Collection of the balls
def collection(a, b):
    return abs(a.xcor() - b.xcor()) < 10 and abs(a.ycor() - b.ycor()) < 20


def collection_ball_restart():
    collection_ball.color("black")
    ball_cor1 = random.randint(30, 280)
    ball_cor2 = random.randint(30, 280)
    collection_ball.goto(ball_cor1, ball_cor2)
    collection_ball.color("yellow")
    bubble.forward(speed)
    screen.ontimer(play_game, 10)


def play_game():
    if collection(bubble, collection_ball):
        score = 0
        score += 2
        points.clear()
        points.write("Points: " + str(score), font=style)
        collection_ball_restart()
        bubble.forward(speed)

    else:
        bubble.forward(speed)
        screen.ontimer(play_game, 10)


turtle.onkeypress(turn_left, "Left")
turtle.onkeypress(turn_right, "Right")

screen.listen()

play_game()

screen.mainloop()

除了@TimRoberts 指出的score初始化問題 (+1) 之外,下面是對代碼的返工以簡化邏輯:

from turtle import Screen, Turtle
from random import randint

FONT_STYLE = ('Courier', 30, 'italic')

screen = Screen()
screen.title("My game by python code")
screen.bgcolor('black')
screen.setup(width=600, height=600)

# Making the user 'bubble'
bubble = Turtle()
bubble.color('red')
bubble.shape('circle')
bubble.penup()

# Making the collection balls
collection_ball = Turtle()
collection_ball.color('yellow')
collection_ball.shape('circle')
collection_ball.shapesize(0.5)
collection_ball.penup()
ball_cor1 = randint(30, 280)
ball_cor2 = randint(30, 280)
collection_ball.setposition(ball_cor1, ball_cor2)

# Scoring
score = 0
speed = 3

points = Turtle()
points.hideturtle()
points.color('yellow')
points.penup()
points.goto(-200, 250)
points.write("Points: 0", font=FONT_STYLE)

# Turning
def turn_left():
    bubble.left(90)

def turn_right():
    bubble.right(90)

# Collection of the balls
def was_collected(bubble):
    return bubble.distance(collection_ball) < 15

def collection_ball_reset():
    collection_ball.hideturtle()
    collection_ball.goto(randint(30, 280), randint(30, 280))
    collection_ball.showturtle()

def play_game():
    global score

    if was_collected(bubble):
        score += 2
        points.clear()
        points.write("Points: " + str(score), font=FONT_STYLE)
        collection_ball_reset()

    bubble.forward(speed)
    screen.ontimer(play_game, 10)

screen.onkeypress(turn_left, 'Left')
screen.onkeypress(turn_right, 'Right')
screen.listen()

play_game()

screen.mainloop()

例如,使用hideturtle()showturtle()代替顏色技巧; 盡量減少對ontimer()的必要調用; 使用內置距離 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM